Hallo,
das fehlen des Sketches hätte beinahe diplomatische Verwirrungen gestiftet.
Jetzt muss ich aber ernst werden.
Was macht das globale i? Zudem signed. Für die loop Abfrage nicht sinnvoll.
Du weißt wie schnell die loop durchlaufen wird und damit i inkrementiert?
Das würde deine vorherige Frage erklären.
Lass das i weg.
Habe das Offentsichtliche korrigiert, aber ungetestet.
Edit: noch die überflüssige for in setup entfernt
#include <Bounce2.h>
const byte Taster_Heizung = 9; // Taster an Pin 6 gegen Masse
const byte Heizung_Pin = 10; // Schaltpin Heizung ein/aus
const unsigned int Heizungeinschaltdauer = 4000; // maximale Pumpenlaufzeit
Bounce debouncer2 = Bounce(); // Instantiate a Bounce object Nr.2 ( Taster Heizung )
void setup()
{
digitalWrite(Heizung_Pin, LOW); // Schaltpin Heizung aus
pinMode(Heizung_Pin, OUTPUT); // Schaltpin Heizung Ausgang
// digitalen Eingang mit PullUp aktivieren
pinMode(Taster_Heizung, INPUT); // setzt Taster Pin als Eingang
digitalWrite(Taster_Heizung, HIGH); // und aktiviert dessen PullUp Widerstand
pinMode(Heizung_Pin, INPUT_PULLUP);
debouncer2.attach(Taster_Heizung);
debouncer2.interval(30); // Entprellzeit 30ms für den Taster
} // Ende setup
void loop(void)
{
Heizung_schalten(); // Heizung ein- oder ausschalten mittels Taster
} // Ende loop
/* ------------------------------------------------------------------------------------------------ */
void Heizung_schalten ()
{
bool stateChanged_2 = debouncer2.update();
static bool state_Heizung = LOW;
static unsigned long millis_now = 0;
bool state_2 = debouncer2.read();
// wenn LOW Signal vom Taster erkannt, schalte Heizung ein bzw. mit nächsten HIGH wieder aus
if ( stateChanged_2 && state_2 == HIGH )
{
if ( state_Heizung == HIGH )
{
state_Heizung = LOW; // Tasterdruck, Heizung einschalten
millis_now = millis() + Heizungeinschaltdauer; // maximale Einschaltdauer setzen
}
else
{
state_Heizung = LOW; // erneuter Tasterdruck, Heizung ausschalten
}
digitalWrite(Heizung_Pin, state_Heizung);
}
// wenn Heizung läuft, dann nach eingestellter Zeit selbst wieder ausschalten
if (millis() > millis_now)
{
digitalWrite(Heizung_Pin, HIGH); // ausschalten nach x sec.
state_Heizung = HIGH;
}
}