In un progetto recente, sto lavorando con il dimmer della luce.
Mi spiego con un esempio di ventilatore. Nel quadro elettrico, abbiamo un interruttore della ventola che può in grado di ACCENDERE / SPEGNERE il nostro REGOLATORE DI VENTOLA & che varia la velocità del nostro ventilatore. Ora, quando il nostro interruttore si accende, la nostra ventola si avvia e quindi con l'aiuto del regolatore possiamo variare la velocità della ventola. E quando spegniamo la nostra ventola si ferma e non possiamo fare nulla significa non variare la velocità della ventola. Le stesse cose che voglio nel mio dimmer. Un pulsante premuto una volta, quindi è solo avviare il mio dimmer della luce e viceversa. E quando il pulsante viene premuto di nuovo, interrompe il mio dimmer.
Ecco il mio codice completo.
int kPinPWM = 9; // Questo pin fornisce valori PWMint kPinSW1 = 6; // PUSH BUTTON // Questo pin utilizzato per aumentare i valori PWMint kPinSW2 = 7; // PUSH BUTTON // Questo pin utilizzato per diminuire i valori PWMint kPinSw = 10; // PUSH BUTTON // Questo pin utilizzato per il pin PWM ON / OFF significa pin ON / OFF 9int i = 0; int temp = 0; // Flagvoid setup () {pinMode (kPinPWM, OUTPUT); pinMode (kPinSW1, INPUT); pinMode (kPinSW2, INPUT); digitalWrite (kPinSW1, HIGH); digitalWrite (kPinSW2, HIGH); pinMode (kPinSw, INPUT); digitalWrite (kPinSw, HIGH);} void loop () {if (digitalRead (kPinSw) == LOW && temp == 0) // Se ho premuto PUSH BUTTOPN (PIN 10) e temp = 0 {temp = 1; // Cambia il valore in 1 // temp = 1 digitalWrite (kPinPWM, HIGH); // Attiva il pin PWM (PIN 9) if (digitalRead (kPinSW1) == LOW) // Premi il PULSANTE per aumentare il valore PWM {i ++; se (i > 4) {i = 4; } while (digitalRead (kPinSW1) == LOW); // Fino a quando il PUSH BUTTON non viene premuto} if (digitalRead (kPinSW2) == LOW) // Pressed PUSH BUTTON per diminuire il valore PWM {i--; se (i < 0) {i = 0; } while (digitalRead (kPinSW2) == LOW); // Fino a quando non viene premuto il PUSH BUTTON} interruttore (i) {caso 0: analogWrite (kPinPWM, 0); // Quando il pulsante premuto non premuto invia 0 interruzione del valore;
caso 1: analogWrite (kPinPWM, 64); // Quando viene premuto il pulsante e i = 1 invia 64 interruzioni di valore; caso 2: analogWrite (kPinPWM, 128); // Quando viene premuto il pulsante e i = 2 invia 128 interruzioni di valore; caso 3: analogWrite (kPinPWM, 192); // Quando viene premuto il pulsante e i = 3 invia 192 interruzioni di valore; caso 4: analogWrite (kPinPWM, 255); // Quando viene premuto il pulsante e i = 4 invia 255 interruzioni di valore; }} if (digitalRead (kPinSw) == LOW && temp == 1) // Se ho premuto PUSH BUTTOPN (PIN 10) e temp = 1 {temp = 0; // Cambia il valore in 0 // temp = 0 digitalWrite (kPinPWM, LOW); Disattiva il pin PWM (PIN 9)}}