Buonasera,
mi piacerebbe essere certo della fattibilità di quello che ho in testa di fare, di seguito lo sketch (va adattato all'ESP32) col quale vorrei comandare diversi punti luce in casa (24VDC) tramite pulsanti fisici, questo sketch fa accendi spegni con un click, poi, solo da luce accesa tenendo premuto avvia il fade che si ferma al rilascio del pulsante.
int PINpb1 = 2;
int LED1 = 3;
bool StatoPB1 = LOW;
bool onClick1 = LOW;
bool StatoPB1old = LOW;
volatile int Step1 =0;
int lumin1 = 0;
int increm = 2;
unsigned long Tpress1 = 0;
void setup() {
Serial.begin(9600);
pinMode(PINpb1, INPUT);
pinMode(LED1, OUTPUT);
}
void loop() {
Serial.print ("Click= ");
Serial.print (onClick1);
Serial.print ("/ Step1= ");
Serial.println (Step1);
StatoPB1 = digitalRead (PINpb1);
analogWrite(LED1, lumin1);
switch (Step1){
case 0: Spento1(); break;
case 1: Acceso1(); break;
}
if ((StatoPB1 == HIGH) && (StatoPB1old == LOW)) {
unsigned long tempoH = millis();
StatoPB1old = StatoPB1;
Tpress1 = tempoH;}
else if ((StatoPB1 == LOW) && (StatoPB1old == HIGH)) {
unsigned long tempoL = millis();
StatoPB1old = StatoPB1;
Serial.print ("Tempo on ");
Serial.println (tempoL - Tpress1);
if ((tempoL - Tpress1) <= 2000) {
onClick1 = HIGH;
Serial.print ("/ onClick1= ");
Serial.println (onClick1);
Tpress1 = tempoL;}
}
}
void Spento1() {
if (onClick1) {
Step1 = 1;
lumin1 = 200;
onClick1 = LOW;
}
}
void Acceso1() {
if (onClick1) {
Step1 = 0;
lumin1 = 0;
onClick1 = LOW;
}
else if (StatoPB1 && (millis() - Tpress1 > 2000)) {
Fade();
}
}
void Fade() {
bool fadePause;
int t1 = 0;
Serial.println ("/ FADING ");
if (StatoPB1) {
if (!fadePause) {
lumin1 = lumin1 + increm;
if (lumin1 <= 0 || lumin1 >= 255) {
increm = -increm;
fadePause =1;
t1 = millis();
}
}
if (fadePause && (millis()-t1 > 50)) {
fadePause = 0;
}
}
}
Tramite Webbino vorrei mettere in parallelo ai pulsanti fisici quelli sul browser solo però con la funzione accendi/spegni (no fade).
Vorrei capire se ho scelto una strada praticabile (da me) o se è meglio usare Blink, probabilmente più alla mia portata (in tempi ragionevoli).
Ho allegato anche la pagina html (modificando l'estensione in txt per poterlo allegare) dove ho inserito alcuni pulsanti e sto tentando di capire come rendere dinamico il colore di fondo della cella attorno al pulsante in funzione delle variabili di stato dei led(GET) .
Se avete anche suggerimenti per semplificare il lavoro sono benaccetti