.. note:: 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 [|link_sf_facebook|] e unisciti oggi! .. _ar_state_change: 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 ------------------------ .. image:: img/list_1.10.png * :ref:`cpn_mega2560` * :ref:`cpn_breadboard` * :ref:`cpn_wires` * :ref:`cpn_button` * :ref:`cpn_resistor` Circuito con Fritzing ------------------------ In questo esempio, utilizziamo il pin 2 per leggere il segnale del pulsante. .. image:: img/image40.png Schema del Circuito ----------------------- .. image:: img/image412.png Codice -------- .. note:: * 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. .. raw:: html 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. .. code-block:: arduino const int buttonPin = 2; Dichiara una variabile chiamata 「detectionState」 per registrare ogni stato rilevato. .. code-block:: arduino int detectionState = 0; Dichiara due variabili per leggere lo stato del pulsante durante il rilevamento del cambio di stato. .. code-block:: arduino int buttonState = 0; int lastButtonState = 0; In setup(), inizializza i pin e avvia il monitor seriale. .. code-block:: arduino pinMode(buttonPin, INPUT); Serial.begin(9600); In loop(), leggi il valore di buttonPin e assegnalo alla variabile buttonState. .. code-block:: arduino 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. .. code-block:: arduino 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」. .. code-block:: arduino if (buttonState == HIGH) { ... } In stato 「Pulsante premuto」, detectionState viene alternato tra 1 e 0. Contemporaneamente, il valore di detectionState viene stampato. .. code-block:: arduino detectionState=(detectionState+1)%2; Serial.print("The detection state is:"); Serial.println(detectionState); Immagine del Fenomeno ------------------------- .. image:: img/image413.png