Progetto 13 Mini Lampada

1. Descrizione

In questo progetto, controlleremo una lampada tramite Arduino UNO e un pulsante. Quando premiamo il pulsante, lo stato della lampada cambierà (ACCESA o SPENTA).

2. Principio di Funzionamento

Quando il pulsante è rilasciato, una tensione VCC che passa attraverso R29 fornisce un livello alto al terminale S. Quando viene premuto, i pin 1 e 3, pin 2 e 4 sono collegati e la tensione su S1 arriva a GND come livello basso. In questo momento, R29 evita un cortocircuito tra VCC e GND.

3. Schema di Collegamento

4. Codice di Test

/*
  keyestudio ESP32 Inventor Learning Kit 
  Project 13.1 Mini Lamp
  http://www.keyestudio.com
*/
int button = 15;
int value = 0;

void setup() 
{
  Serial.begin(9600); //Imposta la velocità di trasmissione seriale a 9600 
  pinMode(button, INPUT);  //Collega il pin del pulsante alla porta digitale 8 e impostalo in modalità input.
}

void loop() 
{
  value = digitalRead(button);//Legge il valore del pulsante 
  Serial.print("Key status:"); //Stampa "Key status:" sulla porta seriale 
  Serial.println(value); //Stampa la variabile del pulsante sulla porta seriale e va a capo
}

5. Risultato del Test

Dopo aver collegato i fili e caricato il codice, apri il monitor seriale e imposta la velocità a 9600.
Quando premiamo il pulsante, la porta seriale stampa “Key status: 0”; quando lo rilasciamo, la porta seriale stampa “Key status: 1”.

6. Espansione della Conoscenza

Successivamente, controlleremo il LED tramite lo stato del pulsante.

  • Diagramma di Flusso:

  • Schema di Collegamento:

  • Codice

/*
  keyestudio ESP32 Inventor Learning Kit 
  Project 13.2 Mini Lamp
  http://www.keyestudio.com
*/
#define led	   4
#define button 15
bool ledState = false;

void setup() 
{
  // inizializza il pin digitale PIN_LED come output.
  pinMode(led, OUTPUT);
  pinMode(button, INPUT);
}

// la funzione loop viene eseguita ripetutamente all'infinito
void loop() 
{
  if (digitalRead(button) == LOW) {    //Quando il valore del pulsante è 0 per la prima volta, si attiva il rimbalzo del pulsante, quindi si ritarda di 20ms per verificare se il pulsante è ancora a 0. 
    delay(20);                              //Ritardo di 20ms
    if (digitalRead(button) == LOW) {   //verifica se il valore del pulsante è 0
      ledState = !ledState;                 //ledState diventa l'inverso del suo valore originale, utile per accendere e spegnere il LED 
      digitalWrite(led, ledState);
    }
    while (digitalRead(button) == LOW);     //mantiene il ciclo while finché il pulsante è premuto, esce quando viene rilasciato
  }
}
  • Risultato del Test

Puoi controllare l’accensione e lo spegnimento del LED rosso tramite il pulsante rosso.