Arduino Logic 101: Μάθημα 4.1: Loops (For & While) — Η τέχνη της επανάληψης
Γεια σας, μελλοντικοί μηχανικοί της Unique Tech! 🚀
Φτάσαμε στην Ενότητα 4! Μέχρι τώρα μάθαμε πώς να αποθηκεύουμε πληροφορίες (μεταβλητές) και πώς να παίρνουμε αποφάσεις (if/else). Τώρα ήρθε η ώρα να ξεκλειδώσουμε μια από τις μεγαλύτερες υπερδυνάμεις των υπολογιστών: την ταχύτητα και την υπομονή στην επανάληψη.
Φανταστείτε ότι σας ζητούν να γράψετε έναν κώδικα που αναβοσβήνει ένα LED
digitalWrite(LED_PIN, HIGH);
delay(500);
digitalWrite(LED_PIN, LOW);
delay(500);
// ... και να το αντιγράψετε άλλες 9 φορές! 😫
Αν όμως σας ζητούσαν να το κάνετε
Εδώ έρχονται οι Βρόχοι Επανάληψης (Loops). Οι loops λένε στο Arduino: "Κάνε αυτή την εργασία
Ας δούμε τα δύο βασικά είδη loops που χρησιμοποιούμε: τη For και τη While.
1. Η επανάληψη For (The Counting Loop)
Χρησιμοποιούμε τη for όταν γνωρίζουμε εκ των προτέρων πόσες ακριβώς φορές θέλουμε να επαναλάβουμε μια ενέργεια (π.χ.
Η ανατομία της for
Η συντακτική δομή της for μοιάζει με "συνταγή" 3 βημάτων:
for (αρχικοποίηση; συνθήκη; βήμα) {
// Κώδικας που εκτελείται επαναληπτικά
}
Ας το δούμε με ένα πρακτικό παράδειγμα. Θέλουμε να αναβοσβήσουμε ένα LED ακριβώς
for (int i = 0; i < 5; i++) {
digitalWrite(LED_PIN, HIGH);
delay(500);
digitalWrite(LED_PIN, LOW);
delay(500);
}
Πώς το μεταφράζει το Arduino:
Αρχικοποίηση (
int i = 0): Δημιουργούμε μια μεταβλητή-μετρητή (τον "counter"), συνήθως με το όνομαi (από τη λέξη index ή iterator), και της δίνουμε την αρχική τιμή0 .Συνθήκη (
i < 5): Πριν από κάθε επανάληψη, το Arduino ρωτάει: "Είναι τοi μικρότερο από5 ;". Αν ναι, εκτελεί τον κώδικα μέσα στις αγκύλες{ }. Αν όχι, σταματάει τη loop και συνεχίζει παρακάτω.Βήμα (
i++): Μόλις τελειώσει ο κώδικας μέσα στις αγκύλες, το Arduino αυξάνει τοi κατά1 (τοi++είναι συντομογραφία τουi = i + 1 ).
Η ροή της μνήμης:
1ος κύκλος:
i = 0 (Το0 < 5 ισχύει-> LED On/Off -> Τοi γίνεται1 )2ος κύκλος:
i = 1 (Το1 < 5 ισχύει -> LED On/Off-> Τοi γίνεται 2)...
5ος κύκλος:
i = 4 (Το4 < 5 ισχύει -> LED On/Off -> Τοi γίνεται5 )6ος κύκλος:
i = 5 (Το5 < 5 ΔΕΝ ισχύει -> Η loop τερματίζεται!)
2. Η επανάληψη While (The Condition Loop)
Χρησιμοποιούμε τη while όταν δεν ξέρουμε πόσες φορές θα χρειαστεί να γίνει η επανάληψη. Ξέρουμε μόνο ότι πρέπει να συνεχίσουμε να το κάνουμε όσο (while) ισχύει μια συγκεκριμένη συνθήκη.
Η ανατομία της while
while (συνθήκη) {
// Κώδικας που εκτελείται όσο η συνθήκη είναι TRUE
}
Παράδειγμα από το Bio-Robotic Project μας 🌿
Στο βραβευμένο μας σύστημα ελέγχου αέρα, θέλουμε ο ανεμιστήρας μας (FAN_PIN) να λειτουργεί συνεχώς όσο τα επίπεδα
int co2_level = readCO2(); // Διάβασμα αισθητήρα
while (co2_level > 1000) {
digitalWrite(FAN_PIN, HIGH); // Άνοιξε τον ανεμιστήρα
delay(2000); // Περίμενε 2 δευτερόλεπτα
co2_level = readCO2(); // Ξαναδιάβασε τον αισθητήρα!
}
digitalWrite(FAN_PIN, LOW); // Κλείσε τον ανεμιστήρα όταν πέσει το CO2
⚠️ Προσοχή - Η παγίδα της While!
Αν ξεχάσετε τη γραμμή co2_level = readCO2(); μέσα στη loop, η μεταβλητή co2_level δεν θα αλλάξει ποτέ τιμή. Αν ξεκινήσει πάνω από
For vs While: Πότε χρησιμοποιώ τι;
Χαρακτηριστικό |
|
|
|---|---|---|
Πότε τη χρησιμοποιούμε; | Όταν ξέρουμε τον ακριβή αριθμό επαναλήψεων. | Όταν περιμένουμε ένα γεγονός ή μια αλλαγή σε αισθητήρα. |
Παράδειγμα | "Αναβόσβησε το LED 10 φορές." | "Κράτα την ειδοποίηση ανοιχτή μέχρι ο χρήστης να πατήσει το κουμπί." |
Κίνδυνος κολλήματος | Πολύ σπάνιος. | Συχνός (αν ξεχάσουμε να ενημερώσουμε τη συνθήκη μέσα στη loop). |
🛠️ Η Σπαζοκεφαλιά του Μηχανικού (Challenge)
Για να σιγουρευτούμε ότι κατανοήσατε τη δύναμη των loops, σας έχουμε μια πρόκληση!
Το σενάριο:
Θέλουμε να πάρουμε
Γράψτε σε ένα χαρτί ή στο Arduino IDE τον αλγόριθμο χρησιμοποιώντας μια for loop.
Hint (Βοήθεια):
Δημιουργήστε μια μεταβλητή
total_temp = 0.0έξω από τη loop.Χρησιμοποιήστε μια
forπου τρέχει10 φορές.Σε κάθε επανάληψη, διαβάστε τη θερμοκρασία και προσθέστε τη στο
total_temp.Στο τέλος (έξω από τη loop), διαιρέστε το
total_tempμε το10.0 για να βρείτε τον μέσο όρο.
Μοιραστείτε τον κώδικά σας στα σχόλια από κάτω ή στείλτε τον μας στη σελίδα επικοινωνίας για να τον ελέγξουμε μαζί!
Τι έρχεται στη συνέχεια;
Στο επόμενο μάθημα (Μάθημα 4.2: Συναρτήσεις - Functions), θα δούμε πώς μπορούμε να πακετάρουμε όμορφους κώδικες όπως αυτόν της θερμοκρασίας ή του
Μέχρι τότε... Keep Coding & Keep Innovating! 🚀
#UniqueTech #ArduinoLogic101 #CodingLogic #STEMGreece #Loops #ForLoop #WhileLoop #FutureEngineers
Σχόλια
Δημοσίευση σχολίου