210 7643187Τηλέφωνο Επικοινωνίας - 210 7649008Τηλέφωνο Διευθυντή

ΠΛΗΡΟΦΟΡΙΚΗ Β4

Θέλουμε να φτιάξουμε μια αλυσίδα από φωτάκια, τα οποία θα ανάβουν με τη σειρά, ανάλογα πόσο έχουμε γυρίσει το ποτενσιόμετρο.

Το ποτενσιόμετρο θα λειτουργεί ως είσοδος, δηλ. θα δίνει μια τιμή στο Arduino και το Arduino θα πρέπει αυτή την τιμή να την αποθηκεύει.
Το ποτενσιόμετρο είναι αναλογικό στοιχείο, όχι ψηφιακό.
Δίνει δηλ. πολλές διαφορετικές τιμές, όχι μόνο 0 ή 1. Οι τιμές που δίνει είναι στο διάστημα από 0 μέχρι 1023.


BHMΑ 1ο

Αρχικά, θα συνδέσουμε το ποτενσιόμετρο και συντονίσουμε το Arduino και τον υπολογιστή μας σε ρυθμό επικοινωνίας 9600 bit/sec.

int potPin = A0;  // Ορίζουμε το pin όπου θα συνδεθεί το ποτενσιόμετρο
int potValue;      // Ορίζουμε μια μεταβλητή για να αποθηκευτεί η τιμή του ποτενσιόμετρου


void setup()
{
  pinMode(potPin, INPUT);

  // Ορίζουμε τον ρυθμό επικοινωνίας μεταξύ arduino και του υπολογιστή μας
  // σε 9600 bit ανά δευτερόλεπτο
  Serial.begin(9600);   

}


ΒΗΜΑ 2ο

Θα δώσουμε εντολή στο Arduino να βλέπει (διαβάζει) συνεχώς το pin του ποτενσιόμετρου και την τιμή που θα παίρνει να την αποθηκεύει σε μια μεταβλητή.
Έπειτα, το Arduino θα στείλει την τιμή αυτή στον υπολογιστή μας.

void loop()
{
  // Το arduino διαβάζει το pin του ποτενσιόμετρου και την τιμή
  // που θα πάρει την αποθηκεύει στην μεταβλητή potValue
  potValue = analogRead(potPin);
 
  // Το arduino στέλνει την τιμή στην σειριακή θύρα, ώστε να φτάσει
  // στον υπολογιστή μας και να μπορέσουμε να την δούμε στην οθόνη
  Serial.println(potValue);

}

ΒΗΜΑ 3ο

Κάνουμε δοκιμές με το ποτενσιόμετρο και βλέπουμε τις τιμές που δίνει.


ΒΗΜΑ 4ο

Προσθέτουμε στο κύκλωμα 3 led και μέσα στον κώδικα ορίζουμε τα αντίστοιχα pin ως OUTPUT.

int led1 = ...;   // Δίνουμε ονόματα (ορίζουμε μεταβλητές)
int led2 = ...;   // για τα digital pins των led
int led3 = ...;

και μέσα στην setup() πρέπει να προστεθούν τρεις εντολές pinMode()
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);


BHMA 5o

Τώρα πρέπει να περιγράψουμε τις τρεις περιπτώσεις: πότε θα ανάψει το 1ο led, πότε θα ανάψει το 1ο και το 2ο, πότε θα ανάψουν και τα τρία.

Οι περιπτώσεις ονομάζονται ΕΛΕΓΧΟΙ.

Θα πούμε δηλ. στο Arduino να ελέγξει την τιμή του ποτενσιόμετρου και θα του δώσουμε οδηγίες τι να κάνει σε κάθε περίπτωση.

Η εντολή για τον ΕΛΕΓΧΟ είναι το if.

Μέσα στην loop προσθέτουμε λοιπόν τις εντολές για κάθε περίπτωση:


if (potValue > 0 and potValue <= 300)
{
    εντολές για να ανάψει μόνο το 1ο led
}
else if (potValue > 300 and potValue <= 800)
{
    εντολές για να ανάψουν και το 1ο και το 2ο led
}
else
{
    εντολές για να ανάψουν και τα τρία led
}


ΒΗΜΑ 6ο

Πώς μπορούμε να τροποποιήσουμε τον παραπάνω κώδικα, ώστε το νέο led που ανάβει κάθε φορά, να μην μένει σταθερά αναμμένο, αλλά να αναβοσβήνει;

Αρχικά, ας δημιουργήσουμε ένα μικρό τμήμα κώδικα (μία function) που θα αναβοσβήνει μία φορά ένα led.

Την function αυτή τη γράφουμε έξω και μετά την loop().

void blink(int led)
{
    digitalWrite(led, HIGH);
    delay(200);
    digitalWrite(led, LOW);
    delay(200);
}

Το πολύ σημαντικό ερώτημα που πρέπει να απαντήσουμε εδώ είναι: τι είναι το  int led  που υπάρχει μέσα στην παρένθεση; Αλλά κρατήστε την ερώτηση για λίγο πιο μετά.

 

BHMA 7o

Μέσα στον κώδικα της loop() στα σημεία που θέλουμε να ανάψει το επόμενο led κάθε φορά, θα αντικαταστήσουμε την εντολή

digitalWrite(..., HIGH);

με την

blink(...);  

χρησιμοποιώντας την ίδια ονομασία led που έχετε στην digitalWrite.

Για παράδειγμα, η εντολή digitalWrite(led1, HIGH) θα γίνει blink(led1).

Η εντολή digitalWrite(ledPin2, HIGH) θα γίνει blink(ledPin2).

 

BHMA 8ο

Τι είναι, επομένως το int led που έχουμε γράψει στο void blink(int led)?

Σε τι μας βοηθάει?

 

Ας τροποποιήσουμε την blink() ώστε εκτός από το led pin να μπορούμε να καθορίζουμε και τον ρυθμό του αναβοσβήματος.

Δείτε τι άλλαξε και εξηγείστε γιατί.

void blink(int led, int millisec)
{
    digitalWrite(led, HIGH);
    delay(millisec);
    digitalWrite(led, LOW);
    delay(millisec);
}

Μέσα στην loop() στα σημεία που χρησιμοποιούμε την blink(), θα πρέπει στην παρένθεση να έχουμε 2 στοιχεία: το 1ο δείχνει ποιο led pin θα αναβοσβήσει, το 2ο δείχνει πόσο γρήγορα.

Για παράδειγμα: blink(led1, 500)  ή  blink(ledPin2, 300).

 

Κυρίες κ κύριοι, συγχαρητήρια!

 

 
Επιστροφή στην κορυφή της σελίδας