Nota

Ciao, benvenuto nella comunità di appassionati di SunFounder Raspberry Pi & Arduino & ESP32 su Facebook! Immergiti nel mondo affascinante di Raspberry Pi, Arduino ed ESP32 insieme ad altri appassionati.

Perché unirti a noi?

  • Supporto esperto: Risolvi problemi post-vendita e sfide tecniche con l’aiuto della nostra comunità e del nostro team.

  • Impara e condividi: Scambia consigli e tutorial per migliorare le tue competenze.

  • Anteprime esclusive: Ottieni accesso anticipato a nuovi annunci di prodotti e contenuti esclusivi.

  • Sconti speciali: Approfitta di sconti esclusivi sui nostri prodotti più recenti.

  • Promozioni festive e concorsi: Partecipa a concorsi e promozioni speciali durante le festività.

👉 Sei pronto a esplorare e creare con noi? Clicca su [Qui] e unisciti oggi!

1.10 Rilevamento del Cambio di Stato

Panoramica

Quando utilizzi un pulsante, non solo puoi premerlo per accendere il LED e rilasciarlo per spegnerlo, ma puoi anche alternare lo stato di funzionamento del LED ogni volta che viene premuto. Per ottenere questo effetto, è necessario rilevare quando lo stato del pulsante cambia da spento a acceso, un processo noto come «rilevamento del cambio di stato». In questa lezione, mostreremo i risultati del rilevamento del cambio di stato del pulsante nel monitor seriale.

Componenti Necessari

../_images/list_1.10.png

Circuito con Fritzing

In questo esempio, utilizziamo il pin 2 per leggere il segnale del pulsante.

../_images/image40.png

Schema del Circuito

../_images/image412.png

Codice

Nota

  • Puoi aprire direttamente il file 1.10_stateChangeDetection.ino che si trova nel percorso sunfounder_vincent_kit_for_arduino\code\1.10_stateChangeDetection.

  • Oppure copia questo codice nell’Arduino IDE.

Dopo aver caricato il codice sulla scheda Mega2560, il numero di uscita cambierà tra 0 e 1 ogni volta che premi il pulsante.

Analisi del Codice

Dichiara un pin collegato al pulsante.

const int  buttonPin = 2;

Dichiara una variabile chiamata 「detectionState」 per registrare ogni stato rilevato.

int detectionState = 0;

Dichiara due variabili per leggere lo stato del pulsante durante il rilevamento del cambio di stato.

int buttonState = 0;
int lastButtonState = 0;

In setup(), inizializza i pin e avvia il monitor seriale.

pinMode(buttonPin, INPUT);
Serial.begin(9600);

In loop(), leggi il valore di buttonPin e assegnalo alla variabile buttonState.

buttonState = digitalRead(buttonPin);

Confronta buttonState con lastButtonState; se non sono uguali, indica che lo stato è cambiato. È necessario un delay(50) per effettuare il debounce durante il rilevamento. Dopo il confronto, assegna buttonState a lastButtonState per la prossima valutazione.

if (buttonState != lastButtonState) {
...
    delay(50);
}
lastButtonState = buttonState;

Dopo aver rilevato un cambio di stato (buttonState != lastButtonState), esegui un ulteriore controllo per determinare la condizione 「Pulsante premuto」.

if (buttonState == HIGH) {
...
    }

In stato 「Pulsante premuto」, detectionState viene alternato tra 1 e 0. Contemporaneamente, il valore di detectionState viene stampato.

detectionState=(detectionState+1)%2;
Serial.print("The detection state is:");
Serial.println(detectionState);

Immagine del Fenomeno

../_images/image413.png