To LED και το Push Button

Στο σημερινό μάθημα θα δούμε πως μπορούμε να ανάβουμε το LED με ένα button.

Υλικά που θα χρειαστούμ

Το Arduino UNO,  το λαμπάκι led, breadboard για να φτιάξουμε το κύκλωμα μας, button, καλώδια, μία αντίσταση 330Ωμ για το led, μία αντίσταση 1ΚΩ για το button  και το λογισμικό για τον υπολογιστή Arduino IDE.

Η συναρμολόγηση του κυκλώματος

Στο παρακάτω κύκλωμα χρησιμοποιούμε την συνδεσμολογία με το pull-downr resistor. Αυτό είναι απαραίτητο για να αποφύγουμε ψευδείς ενδείξεις διότι οι ψηφιακοί είσοδοι είναι εξαιρετικά ευαίσθητοι. Αλλιώς το κύκλωμα θα βρισκόταν σε κατάσταση που ονομάζουμε floating (επίπλευση).

Σε κατάσταση ηρεμίας του button η τάση στην επαφή 3 του Arduino UNO είναι 0V. Όταν πατηθεί το button η επαφή 3 (είσοδος) θα διαβάσει την τάση 5V. Η επαφή 4 σύμφωνα με τον κώδικα μας θα δώσει τάση 5V (έξοδος) στο led το οποίο μέσω αντίστασης που μειώνει το ρεύμα στο ρεύμα λειτουργίας του led και θα ανάψει το led όσο είναι πατημένο το button.

Γράφουμε τον κώδικα

Αφού ανοίξουμε το Arduino IDE και κάνουμε τις απαραίτητες ρυθμίσεις όπως κάναμε στο προηγούμενο μάθημα φορτώνουμε τον παρακάτω κώδικα.


// Ορισμός των ακίδων (pins) του Arduino
int buttonPin = 3; // Το κουμπί συνδέεται στην ψηφιακή ακίδα 3
int ledPin = 4;    // Το LED συνδέεται στην ψηφιακή ακίδα 4

void setup() {
// Ρύθμιση της λειτουργίας των ακίδων
pinMode(buttonPin, INPUT);  // Η ακίδα του κουμπιού ορίζεται ως Είσοδος  pinMode(ledPin, OUTPUT);    // Η ακίδα του LED ορίζεται ως Έξοδος
}

void loop() {
bool buttonStatus; // Μεταβλητή για την αποθήκευση της κατάστασης του κουμπιού (true/false)

// Έλεγχος αν το κουμπί είναι πατημένο (HIGH)
if(digitalRead(buttonPin) == HIGH) {
buttonStatus = 1; // Αν πατηθεί, δώσε τιμή 1 (on) 
}
else {
buttonStatus = 0; // Αν δεν πατηθεί, δώσε τιμή 0 (off)
}

// Ενεργοποίηση ή απενεργοποίηση του LED ανάλογα με τη μεταβλητή buttonStatus
digitalWrite(ledPin, buttonStatus);
// Μικρή καθυστέρηση 10ms για σταθερότητα
delay(10);
}

Τι κάνει η κάθε εντολή

  • Ορισμός Μεταβλητών (int): Οι εντολές int buttonPin = 3; και int ledPin = 4; λένε στο Arduino ότι θα χρησιμοποιήσουμε την ψηφιακή θύρα 3 για το κουμπί και τη θύρα 4 για το LED.
  • Αρχικοποίηση (setup & pinMode): Η pinMode(buttonPin, INPUT) ρυθμίζει τη θύρα του κουμπιού να “ακούει” σήματα (είσοδος), ενώ η pinMode(ledPin, OUTPUT) τη ρυθμίζει να στέλνει ρεύμα (έξοδος).
  • Ανάγνωση Κατάστασης (digitalRead): Η εντολή digitalRead(buttonPin) ελέγχει αν περνάει ρεύμα από το κουμπί (αν είναι πατημένο) και η δομή if…else αποθηκεύει αυτή την πληροφορία στη μεταβλητή buttonStatus.
  • Έλεγχος LED (digitalWrite): Η digitalWrite(ledPin, buttonStatus) δίνει εντολή στο LED να ανάψει αν η μεταβλητή είναι 1 (HIGH) ή να σβήσει αν είναι 0 (LOW).
  • Επανάληψη και Καθυστέρηση (loop & delay): Η loop αναγκάζει το πρόγραμμα να τρέχει συνέχεια, ενώ η delay(10) σταματά την εκτέλεση για 10 χιλιοστά του δευτερολέπτου για να αποφευχθούν σφάλματα από “θόρυβο” στο πάτημα του κουμπιού.

Αν τώρα θέλουμε το led μόλις πατηθεί το button να ανάψει και να παραμείνει αναμμένο και όταν ξαναπατηθεί να σβήνει θα τροποποιήσουμε τον κώδικα μας ως εξής:


int buttonPin = 3;
int ledPin = 4;

bool ledStatus = LOW;      // Η τρέχουσα κατάσταση του LED (ξεκινάει σβηστό)
bool lastButtonState = LOW; // Η κατάσταση που είχε το κουμπί στον προηγούμενο έλεγχο

void setup() {

pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);

}

void loop() {

bool currentButtonState = digitalRead(buttonPin);   //Διάβασε την τρέχουσα κατάσταση του κουμπιού

// Έλεγχος αν το κουμπί ΜΟΛΙΣ πατήθηκε
// (δηλαδή τώρα είναι HIGH ενώ πριν ήταν LOW)

if (currentButtonState == HIGH && lastButtonState == LOW) {

ledStatus = !ledStatus;  // Αντιστροφή κατάστασης (αν ήταν 0 γίνεται 1 και αντίστροφα)
delay(50);                         // Μικρή καθυστέρηση για την αποφυγή "θορύβου" (debouncing)

}

//  Ενημέρωση της προηγούμενης κατάστασης για την επόμενη επανάληψη

lastButtonState = currentButtonState;

// Εφαρμογή της κατάστασης στο LED
digitalWrite(ledPin, ledStatus);
}