Hallo Zusammen..
Ich würde via Tastendruck gern eine Anlage kontrolliert ausschalten und ein "Versehen" des Bedieners ausschließen.
Das Gaze soll ungefähr so ablaufen:
Taste drücken & ca 5 Sek gedrückt halten.
Während des Tastendrucks soll im I2C-LCD Display der 5 Sek Timer / Ladebalken runter- bzw durchlaufen.
Wird die Taste losgelassen bevor die Zeit abgelaufen ist, soll dort die Meldung "abgebrochen" erscheinen kurz stehen bleiben und dann wieder in den normalen betrieb wechseln..
Wenn die Taste gedrückt bleibt und der Timer abgelaufen ist soll ein Pin auf LOW gesetzt werden, was die Anlage dann letztendlich ausschaltet...
Mein Ansatz dazu ist dieser hier:
void power_off()
{
int off_time_delay = 5000;
lcd.clear();
lcd.backlight();
// show message on Screen "Press and hold to power off"
// show loadbar on Screen while the bar is run to 100% in 5 Sec
// after the time (and button is still pressed) Show message on Screen "Powering off" otherwise show "abgebrochen"
// Wait another 2 Seconds and switch off Main_SSR
unsigned long off_cur_millis=millis();
if(digitalRead(ausschalten) == LOW && millis()-off_cur_millis <= off_time_delay)
{
lcd.setCursor(0,0);
lcd.print("Zum ausschalten");
lcd.setCursor(0,1);
lcd.print("taste ");
lcd.print(off_time_delay/1000);
lcd.print("s halten");
int prozent = map(millis(), off_cur_millis, off_time_delay+off_cur_millis, 0, 101);
draw_progressbar(prozent);
led_blink(ausschalten_led);
if(prozent == 100)
{
digitalWrite(Main_SSR, LOW);
}
else
{
lcd.setCursor(4,2);
lcd.print(" abgebrochen ");
}
//delay(2000);
}
//lcd.clear();
}
Aufgerufen wird die Funktion im Loop via
if(digitalRead(ausschalten) == LOW)
{
power_off();
}
Ach ja: der Taster ist mit INPUT_PULLUP definiert..
LG..