Τετάρτη 29 Δεκεμβρίου 2021

Η έννοια της καταγραφής ενός γεγονότος (σημαία - flag)

 Στο προηγούμενο παράδειγμα με το κουμπί, όσο πατάμε το κουμπί, ανάβει η LED.

Συνήθως, θέλουμε να πατάμε ένα κουμπί ΟΝ μία φορά και να λειτουργεί συνέχεια μια συσκευή.

Για να γίνει αυτό, χρησιμοποιείται μια μεταβλητή (π.χ. flag) που αρχικά έχει μία συγκεκριμένη τιμή (π.χ. 0) και όταν συμβεί ένα γεγονός, παίρνει μιαν άλλη τιμή (π.χ. 1).

Είναι σαν τον επόπτη γραμμών που σηκώνει την σημαία όταν η μπάλα έχει βγει εκτός γραμμής.

Προφανώς, το πάτημα του κουμπιού είναι στιγμιαίο, αλλά η τιμή της μεταβλητής μόνιμη.

Άρα, μπορούμε να πούμε ότι το flag θα παίρνει την τιμή 1 όταν πατηθεί το κουμπί. Αν πούμε ότι η LED θα ανάβει όσο η μεταβλητή flag έχει τιμή 1, τότε πετυχαίνουμε αυτή να ανάβει μόνιμα.

Ο κώδικας για να γίνει το παραπάνω σενάριο, δίνεται ακολούθως:


const int buttonPin = 2;     // the number of the pushbutton pin

const int ledPin =  3;      // the number of the LED pin



int buttonState = 0;   

int flag=0;      

void setup() {

  // put your setup code here, to run once:

 // initialize the LED pin as an output:

  pinMode(ledPin, OUTPUT);

  // initialize the pushbutton pin as an input:

  pinMode(buttonPin, INPUT);

}


void loop() {

  // put your main code here, to run repeatedly:

// read the state of the pushbutton value:

  buttonState = digitalRead(buttonPin);

  // check if the pushbutton is pressed. If it is, the buttonState is HIGH:

  if (buttonState == HIGH) {

    // turn LED on:

    flag=1;

       while (flag ==1) {

    digitalWrite(ledPin, HIGH);

          }}

  else {

    digitalWrite(ledPin, LOW);

     }

}

Το αποτέλεσμα φαίνεται εδώ:



Για να σβήνει η LED, πρέπει να προσθέσουμε νέο κουμπί OFF που, όταν πατηθεί, η τιμή  του flag θα γίνεται 0. Αυτό, προφανώς, θα συμβαίνει μέσα στο while.



Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου

Σημείωση: Μόνο ένα μέλος αυτού του ιστολογίου μπορεί να αναρτήσει σχόλιο.