Arduino Logic 101: Μάθημα 4.3: Setup & Loop — Ο κύκλος ζωής ενός προγράμματος
Γεια σας, μελλοντικοί μηχανικοί της Unique Tech! 🚀
Στα προηγούμενα μαθήματα μάθαμε πώς να αποθηκεύουμε δεδομένα, πώς να παίρνουμε αποφάσεις, πώς να επαναλαμβάνουμε εντολές και πώς να οργανώνουμε τον κώδικά μας σε συναρτήσεις.
Σήμερα ήρθε η ώρα να απαντήσουμε σε μια βασική ερώτηση: Πώς ξέρει το Arduino από πού να ξεκινήσει και πώς εκτελεί τον κώδικα που του γράφουμε;
Κάθε φορά που ανοίγετε ένα νέο αρχείο στο Arduino IDE, εμφανίζονται αυτόματα δύο "παράξενες" συναρτήσεις: η void setup() και η void loop(). Σε αυτό το μάθημα θα καταλάβουμε ακριβώς τι κάνουν, πότε εκτελούνται και πώς ελέγχουν τον "κύκλο ζωής" του ρομπότ μας.
Η Αναλογία της Καθημερινότητας: Πώς ξυπνάει ένα Ρομπότ;
Φανταστείτε τη δική σας καθημερινή ρουτίνα όταν ξυπνάτε το πρωί:
Η Προετοιμασία (Μία φορά): Ξυπνάτε, πλένετε το πρόσωπό σας, φοράτε τα ρούχα σας και παίρνετε την τσάντα σας. Αυτά τα κάνετε μόνο μία φορά στην αρχή της ημέρας.
Η Επανάληψη (Συνεχώς): Κατά τη διάρκεια της ημέρας, κάνετε πράγματα ξανά και ξανά: αναπνέετε, ανοιγοκλείνετε τα μάτια σας, ελέγχετε το κινητό σας, περπατάτε. Αυτές οι ενέργειες επαναλαμβάνονται συνεχώς μέχρι να κοιμηθείτε (ή να σας τελειώσει η... "μπαταρία"!).
Ακριβώς έτσι λειτουργεί και το Arduino!
1. void setup(): Η Προετοιμασία
Η setup() είναι η πρώτη πύλη εισόδου του προγράμματός μας. Εκτελείται ακριβώς μία φορά, αμέσως μόλις το Arduino τροφοδοτηθεί με ρεύμα ή κάθε φορά που πατάμε το κουμπί Reset.
Τι βάζουμε μέσα στη setup();
Ρυθμίσεις των Pins: Λέμε στο Arduino αν ένα pin θα είναι είσοδος (αισθητήρας) ή έξοδος (LED, μοτέρ) χρησιμοποιώντας την εντολή
pinMode().Εκκίνηση Επικοινωνίας: Ανοίγουμε τη γραμμή επικοινωνίας με τον υπολογιστή μας, συνήθως στα 9600 bps (Baud rate), με την εντολή
Serial.begin(9600).Αρχικοποίηση εξαρτημάτων: Ενεργοποιούμε οθόνες LCD, αισθητήρες ή κάρτες μνήμης.
void setup() {
// 1. Ρυθμίζουμε το Pin 13 ως έξοδο (για το LED)
pinMode(13, OUTPUT);
// 2. Ξεκινάμε τη σειριακή επικοινωνία με ταχύτητα 9600 bps
Serial.begin(9600);
// 3. Στέλνουμε ένα μήνυμα καλωσορίσματος στον υπολογιστή
Serial.println("System Initialized!");
}
2. void loop(): Η Καρδιά του Προγράμματος
Μόλις τελειώσει η εκτέλεση της setup(), το Arduino μπαίνει αυτόματα στη loop().
Η loop() εκτελεί τον κώδικα που κλείνει μέσα στις αγκύλες της από την πρώτη γραμμή μέχρι την τελευταία, και μόλις φτάσει στο τέλος... ξαναξεκινάει αμέσως από την αρχή! Αυτό συνεχίζεται για πάντα, όσο το Arduino έχει ρεύμα.
Τι βάζουμε μέσα στη loop();
Διάβασμα δεδομένων από αισθητήρες (π.χ. θερμοκρασία, CO2).
Λήψη αποφάσεων (π.χ. "Αν η θερμοκρασία είναι > 30.0°C, άναψε τον ανεμιστήρα").
Κλήση δικών μας συναρτήσεων (όπως αυτές που μάθαμε στο Μάθημα 4.2).
void loop() {
// 1. Άναψε το LED στο Pin 13
digitalWrite(13, HIGH);
delay(1000); // Περίμενε 1 δευτερόλεπτο (1000ms)
// 2. Σβήσε το LED
digitalWrite(13, LOW);
delay(1000); // Περίμενε άλλο 1 δευτερόλεπτο
// Μόλις φτάσει εδώ, το πρόγραμμα θα πάει ξανά στη γραμμή 1!
}
Ο Κύκλος Ζωής σε Διάγραμμα
Ας δούμε πώς ρέει ο κώδικας μέσα στον μικροελεγκτή:
[ Τροφοδοσία Ρεύματος / Reset ]
│
▼
┌─────────────────┐
│ void setup() │ ◄─── Εκτελείται ΜΟΝΟ 1 φορά
└─────────────────┘
│
▼
┌─────────────────┐
┌───► │ void loop() │ ◄─── Εκτελείται συνεχώς (Άπειρες φορές)
│ └─────────────────┘
│ │
└───────────────┘
Συνδέοντας όλα τα κομμάτια (Ολοκληρωμένο Παράδειγμα)
Ας δούμε πώς θα φαινόταν ο κώδικας για το Bio-Robotic Project μας 🌿, συνδυάζοντας μεταβλητές, setup(), loop() και μια δική μας συνάρτηση για τον έλεγχο της ποιότητας του αέρα!
// --- ΟΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ & ΣΤΑΘΕΡΩΝ (Global Scope) ---
const int SENSOR_PIN = A0; // Ο αισθητήρας CO2 είναι στο Pin A0
const int FAN_PIN = 12; // Ο ανεμιστήρας είναι στο Pin 12
// --- SETUP: Εκτελείται ΜΙΑ φορά στην αρχή ---
void setup() {
pinMode(FAN_PIN, OUTPUT); // Ο ανεμιστήρας είναι ΕΞΟΔΟΣ
Serial.begin(9600); // Εκκίνηση επικοινωνίας για debugging
Serial.println("Unique Tech Air Control System: Active!");
}
// --- ΔΙΚΕΣ ΜΑΣ ΣΥΝΑΡΤΗΣΕΙΣ ---
// Συνάρτηση που ελέγχει αν το CO2 είναι επικίνδυνο
bool isAirDangerous(int co2_value) {
if (co2_value > 1200) {
return true;
} else {
return false;
}
}
// --- LOOP: Εκτελείται συνεχώς ---
void loop() {
int current_co2 = analogRead(SENSOR_PIN); // Διάβασμα αισθητήρα
// Εκτύπωση της τιμής στην οθόνη του υπολογιστή
Serial.print("Current CO2 levels: ");
Serial.println(current_co2);
// Χρήση της συνάρτησης για λήψη απόφασης
if (isAirDangerous(current_co2) == true) {
digitalWrite(FAN_PIN, HIGH); // Άνοιξε τον ανεμιστήρα!
Serial.println("ALERT: Fan turned ON!");
} else {
digitalWrite(FAN_PIN, LOW); // Κράτα τον ανεμιστήρα κλειστό
}
delay(2000); // Περίμενε 2 δευτερόλεπτα πριν την επόμενη μέτρηση
}
🛠️ Η Σπαζοκεφαλιά του Μηχανικού (Challenge)
Για να ολοκληρώσουμε την Ενότητα 4, σας έχουμε μια πρόκληση που συνδυάζει τα πάντα!
Στο Bio-Robotic Project μας, θέλουμε να προσθέσουμε ένα έξυπνο σύστημα ποτίσματος για τα φυτά που φιλτράρουν τον αέρα της τάξης.
Οι προδιαγραφές του κώδικα:
Ορίστε μια σταθερά
PUMP_PIN = 8(η αντλία νερού) και μια σταθεράMOISTURE_PIN = A1(ο αισθητήρας υγρασίας εδάφους).Στη
setup(), ρυθμίστε τα pins σωστά (η αντλία είναιOUTPUTκαι ο αισθητήραςINPUT).Φτιάξτε μια δική σας συνάρτηση
needsWatering(int value)η οποία θα δέχεται την τιμή της υγρασίας και θα επιστρέφειtrueαν η υγρασία είναι κάτω από 400, αλλιώς θα επιστρέφειfalse.Στη
loop(), διαβάστε τον αισθητήρα υγρασίας, χρησιμοποιήστε τη συνάρτηση που φτιάξατε και αν το φυτό χρειάζεται πότισμα, ενεργοποιήστε την αντλία για 3 δευτερόλεπτα (3000 ms) και μετά κλείστε την.
Γράψτε τον κώδικα στο χαρτί ή στο Arduino IDE και στείλτε τον μας! Είστε έτοιμοι να γίνετε πραγματικοί μηχανικοί συστημάτων!
Τι έρχεται στη συνέχεια;
Συγχαρητήρια! Μόλις ολοκληρώσατε την Ενότητα 4! Πλέον ξέρετε πώς να γράφετε δομημένο, καθαρό και αποδοτικό κώδικα.
Στην επόμενη και τελευταία ενότητα (Ενότητα 5: Debugging & Error Handling), θα μάθουμε τι κάνουμε όταν ο κώδικας "σπάει", πώς χρησιμοποιούμε το Serial Monitor για να μιλάμε απευθείας με το Arduino και πώς να διορθώνουμε τα λάθη μας σαν επαγγελματίες!
Μέχρι τότε... Keep Coding & Keep Innovating! 🚀
#UniqueTech #ArduinoLogic101 #CodingLogic #STEMGreece #SetupAndLoop #ProgramLifecycle #RoboticsForYouth #CleanCode #FutureEngineers
Σχόλια
Δημοσίευση σχολίου