Nota
Ciao, benvenuto nella SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community su Facebook! Approfondisci le tue conoscenze su Raspberry Pi, Arduino ed ESP32 insieme ad altri appassionati.
Perché unirti?
Supporto esperto: Risolvi problemi tecnici e post-vendita con l’aiuto della nostra community e del nostro team.
Impara e condividi: Scambia consigli e tutorial per migliorare le tue competenze.
Anteprime esclusive: Ottieni accesso anticipato ai nuovi annunci di prodotti e anteprime.
Sconti speciali: Approfitta di sconti esclusivi sui nostri prodotti più recenti.
Promozioni festive e omaggi: Partecipa a promozioni e omaggi durante le festività.
👉 Sei pronto a esplorare e creare con noi? Clicca su [Qui] e unisciti oggi!
5.3 Rilevamento del Cambio di Stato¶
Quando il pulsante controlla altri dispositivi, non solo può attivarli quando viene premuto, ma anche fermarli quando viene rilasciato. È inoltre possibile commutare lo stato operativo ogni volta che il pulsante viene premuto.
Per ottenere questo effetto, è necessario sapere come alternare lo stato di funzionamento tra acceso e spento quando il pulsante viene premuto, ovvero il «rilevamento del cambio di stato».
In questo progetto, utilizzeremo il pulsante per controllare il motore.
Componenti necessari
In questo progetto, ci servono i seguenti componenti.
È sicuramente conveniente acquistare un kit completo, ecco il link:
Nome |
ELEMENTI IN QUESTO KIT |
LINK |
|---|---|---|
3 in 1 Starter Kit |
380+ |
Puoi anche acquistarli separatamente dai link sottostanti.
INTRODUZIONE AI COMPONENTI |
LINK PER L’ACQUISTO |
|---|---|
- |
|
- |
Schema
Collegamenti
Codice
Nota
Apri il file
5.3.state_change_detection.inonel percorso3in1-kit\basic_project\5.3.state_change_detection.Oppure copia questo codice nell”Arduino IDE.
Oppure carica il codice tramite l”Arduino Web Editor.
Dopo aver caricato correttamente il codice, premi il pulsante e il motore si avvierà; fino a quando non premi nuovamente il pulsante, il motore si fermerà.
Come funziona?
Crea variabili e definisci i pin per il motore e il pulsante.
... int detectionState = 0; int buttonState = 0; int lastButtonState = 0;
detectionStateè una variabile che cambia il suo valore ogni volta che viene premuto il pulsante, ad esempio, 0 questa volta, 1 la prossima e così via alternativamente.buttonStateelastButtonStatevengono utilizzati per registrare lo stato del pulsante questa volta e l’ultima volta, per confrontare se il pulsante è stato premuto o rilasciato.
Inizializza ogni pin e imposta la velocità di trasmissione del monitor seriale.
void setup() { pinMode(buttonPin, INPUT); Serial.begin(9600); pinMode(B_1A, OUTPUT); pinMode(B_1B, OUTPUT); }
Leggi lo stato del pulsante e, se premuto, la variabile
detectionStatecambierà il suo valore da 0 a 1 o da 1 a 0. QuandodetectionStateè 1, il motore si avvierà. L’effetto sarà che questa volta il pulsante viene premuto, il motore gira, la prossima volta che viene premuto, il motore si fermerà, e così via alternativamente.void loop() { // Toggle the detectionState each time the button is pressed buttonState = digitalRead(buttonPin); if (buttonState != lastButtonState) { if (buttonState == HIGH) { detectionState=(detectionState+1)%2; Serial.print("The detection state is: "); Serial.println(detectionState); } delay(50); } lastButtonState = buttonState; // According to the detectionState, start the motor if(detectionState==1){ digitalWrite(B_1A,HIGH); digitalWrite(B_1B,LOW); }else{ digitalWrite(B_1A,LOW); digitalWrite(B_1B,LOW); } }
Il flusso di lavoro completo è il seguente.
Leggi il valore del pulsante.
buttonState = digitalRead(buttonPin);
Se
buttonStateelastButtonStatenon sono uguali, significa che lo stato del pulsante è cambiato, procedi con il successivo controllo, e memorizza lo stato del pulsante attuale nella variabilelastButtonState.delay(50)viene utilizzato per eliminare il rimbalzo.
if (buttonState != lastButtonState) { ... delay(50); } lastButtonState = buttonState;
Quando il pulsante è premuto, il suo valore è HIGH. Qui, quando il pulsante è premuto, il valore della variabile
detectionStatecambia, ad esempio, da 0 a 1 dopo un’operazione.
if (buttonState == HIGH) { detectionState=(detectionState+1)%2; Serial.print("The detection state is: "); Serial.println(detectionState); }
Quando la variabile
detectionStateè 1, fai ruotare il motore, altrimenti fermalo.
if(detectionState==1){ digitalWrite(B_1A,HIGH); digitalWrite(B_1B,LOW); }else{ digitalWrite(B_1A,LOW); digitalWrite(B_1B,LOW); }