Arduino Logic 101: Μάθημα 4.2: Συναρτήσεις (Functions) — Χωρίζοντας το πρόβλημα σε μικρά κομμάτια
Γεια σας, μελλοντικοί μηχανικοί της Unique Tech! 🚀
Στο προηγούμενο μάθημα γνωρίσαμε τη δύναμη της επανάληψης με τις loops. Σήμερα, θα μάθουμε πώς να οργανώνουμε τον κώδικά μας σαν επαγγελματίες software engineers.
Φανταστείτε ότι θέλετε να πείτε σε έναν φίλο σας να σας φτιάξει ένα τοστ.
Δεν του λέτε: "Πήγαινε στο ψυγείο, άνοιξε την πόρτα, πιάσε το τυρί, κλείσε την πόρτα, πάρε δύο φέτες ψωμί...". Του λέτε απλά: "Φτιάξε μου ένα τοστ".
Ο φίλος σας ξέρει ήδη τη "διαδικασία" (τη συνταγή) που κρύβεται πίσω από αυτή τη φράση.
Στον προγραμματισμό, αυτή η "συνταγή" ονομάζεται Συνάρτηση (Function). Είναι ένα αυτοτελές κομμάτι κώδικα που εκτελεί μια συγκεκριμένη εργασία, του δίνουμε ένα όνομα και μπορούμε να το "φωνάξουμε" (να το καλέσουμε) όποτε το χρειαζόμαστε, με μία μόνο γραμμή!
Γιατί χρειαζόμαστε τις Συναρτήσεις;
Όχι πια Copy-Paste: Αν χρειάζεται να αναβοσβήνουμε ένα LED σε 5 διαφορετικά σημεία του κώδικα, δεν αντιγράφουμε τις ίδιες 4 γραμμές παντού. Φτιάχνουμε μια συνάρτηση
blink()και την καλούμε.Καθαρός Κώδικας (Readability): Είναι πολύ πιο εύκολο να διαβάσεις ένα πρόγραμμα που λέει
readSensors();καιactivateAlarm();παρά εκατοντάδες γραμμές μπερδεμένου κώδικα hardware.Εύκολο Debugging: Αν υπάρχει ένα λάθος στον υπολογισμό της θερμοκρασίας, ξέρεις ακριβώς σε ποια συνάρτηση πρέπει να πας για να το διορθώσεις.
Η Ανατομία μιας Συνάρτησης
Μια συνάρτηση αποτελείται από 4 βασικά μέρη:
τύπος_επιστροφής όνομαΣυνάρτησης(παράμετροι) {
// Κώδικας που εκτελείται
return τιμή; // (Προαιρετικό, ανάλογα με τον τύπο επιστροφής)
}
Ας τα δούμε αναλυτικά:
Τύπος Επιστροφής (Return Type): Τι είδους δεδομένο μας "γυρίζει" πίσω η συνάρτηση όταν τελειώσει; Αν μας δίνει έναν αριθμό, μπορεί να είναι
intήfloat. Αν απλά κάνει μια ενέργεια (π.χ. ανάβει ένα LED) χωρίς να επιστρέφει πληροφορία, χρησιμοποιούμε τη λέξηvoid(κενό).Όνομα Συνάρτησης: Ένα περιγραφικό όνομα (συνήθως σε μορφή camelCase, π.χ.
readTemperature).Παράμετροι (Parameters / Inputs): Οι πληροφορίες που πρέπει να δώσουμε στη συνάρτηση για να κάνει τη δουλειά της (π.χ. ποιο Pin να ανάψει, πόσα δευτερόλεπτα να περιμένει).
Σώμα (Body): Ο κώδικας μέσα στις αγκύλες
{ }.
Παράδειγμα 1: Μια απλή συνάρτηση χωρίς επιστροφή (void)
Θέλουμε μια συνάρτηση που να αναβοσβήνει ένα LED. Θέλουμε όμως να της λέμε εμείς κάθε φορά σε ποιο Pin είναι το LED και για πόση ώρα (σε ms) θα μείνει αναμμένο.
// Ορισμός της συνάρτησης
void flashLED(int pinNumber, int duration) {
digitalWrite(pinNumber, HIGH);
delay(duration);
digitalWrite(pinNumber, LOW);
delay(duration);
}
void loop() {
// Καλούμε τη συνάρτηση για το LED στο Pin 13 για 500ms
flashLED(13, 500);
// Την ξανακαλούμε για ένα LED στο Pin 12 για 1000ms!
flashLED(12, 1000);
}
Παράδειγμα 2: Συνάρτηση που επιστρέφει τιμή
Θυμάστε τη Σπαζοκεφαλιά του Μηχανικού από το Μάθημα 4.1; Ζητήσαμε να βρείτε τον μέσο όρο από 10 μετρήσεις θερμοκρασίας.
Ας δούμε πώς θα μετατρέπαμε αυτόν τον αλγόριθμο σε μια πανέμορφη συνάρτηση που επιστρέφει έναν δεκαδικό αριθμό (float):
// Η συνάρτηση που διαβάζει 10 φορές και επιστρέφει τον μέσο όρο
float getAverageTemperature() {
float total_temp = 0.0;
for (int i = 0; i < 10; i++) {
total_temp = total_temp + analogRead(A0); // Διάβασμα αισθητήρα
delay(50); // Μικρή καθυστέρηση μεταξύ των μετρήσεων
}
float average = total_temp / 10.0;
return average; // Επιστροφή του αποτελέσματος!
}
void loop() {
// Καλούμε τη συνάρτηση και αποθηκεύουμε το αποτέλεσμα σε μια μεταβλητή
float current_room_temp = getAverageTemperature();
if (current_room_temp > 28.0) {
// Κάνε κάτι αν ζεσταθεί πολύ το δωμάτιο...
}
}
Βλέπετε πόσο πιο καθαρή έγινε η loop(); Δεν χρειάζεται να βλέπουμε εκεί μέσα τις λεπτομέρειες των 10 επαναλήψεων, παρά μόνο το τελικό αποτέλεσμα!
🛠️ Η Σπαζοκεφαλιά του Μηχανικού (Challenge)
Στο Bio-Robotic Project της Unique Tech 🌿, αναλύουμε τα επίπεδα CO2 στην τάξη.
Θέλουμε να γράψετε μια συνάρτηση με το όνομα getAirQualityStatus.
Οι προδιαγραφές:
Η συνάρτηση πρέπει να δέχεται ως παράμετρο (input) έναν ακέραιο αριθμό: τα επίπεδα CO2 σε ppm (π.χ.
int co2_value).Πρέπει να επιστρέφει έναν χαρακτήρα (
char):'G' (Green) αν το CO2 είναι κάτω από 800 ppm (Καθαρός αέρας).
'Y' (Yellow) αν το CO2 είναι μεταξύ 800 και 1200 ppm (Χρειάζεται προσοχή / αερισμός).
'R' (Red) αν το CO2 είναι πάνω από 1200 ppm (Επικίνδυνα επίπεδα!).
Hint (Βοήθεια):
Χρησιμοποιήστε τη δομή
if / else if / elseπου μάθαμε στην Ενότητα 3 μέσα στη συνάρτηση.Μην ξεχάσετε να δηλώσετε τον σωστό τύπο επιστροφής στην αρχή της συνάρτησης (
char) και να χρησιμοποιήσετε την εντολήreturn.
Γράψτε τον κώδικα και μοιραστείτε τον στα σχόλια ή στείλτε τον στην ομάδα μας για να τον συζητήσουμε!
Τι έρχεται στη συνέχεια;
Στο επόμενο μάθημα (Μάθημα 4.3: Setup & Loop - Ο κύκλος ζωής ενός προγράμματος), θα δούμε πού κολλάνε όλα αυτά που μάθαμε μέσα στις δύο βασικές "πύλες" του Arduino, ολοκληρώνοντας έτσι την Ενότητα 4!
Μέχρι τότε... Keep Coding & Keep Innovating! 🚀
#UniqueTech #ArduinoLogic101 #CodingLogic #STEMGreece #Functions #ProgrammingBasics #RoboticsForYouth #CleanCode
Σχόλια
Δημοσίευση σχολίου