// knop_dak.ino - de knop 'kasdak' ontdenderen in software // Knop tussen D22 en GND, met de interne pull-up: los = HIGH, ingedrukt = LOW. // (Met het RC-filter en de 74HC14 van het bedieningspaneel: INPUT en INGEDRUKT = HIGH.) const int KNOP = 22; const int INGEDRUKT = LOW; const unsigned long DENDER_MS = 20; // zo lang moet het signaal stil blijven int vorigeLezing = HIGH; // wat de pin de vorige keer gaf int stabiel = HIGH; // de aanvaarde toestand unsigned long laatsteWissel = 0; // wanneer de pin voor het laatst veranderde bool dakOpen = false; unsigned int keerGedrukt = 0; void setup() { pinMode(KNOP, INPUT_PULLUP); Serial.begin(9600); } void loop() { unsigned long nu = millis(); int lezing = digitalRead(KNOP); if (lezing != vorigeLezing) { // er verandert iets: echt of dender laatsteWissel = nu; // opnieuw beginnen met wachten vorigeLezing = lezing; } if (nu - laatsteWissel >= DENDER_MS && lezing != stabiel) { stabiel = lezing; // 20 ms rust: dit is de echte toestand if (stabiel == INGEDRUKT) { // alleen de flank 'net ingedrukt' telt keerGedrukt++; dakOpen = !dakOpen; // elke druk wisselt: open <-> dicht Serial.print("druk "); Serial.print(keerGedrukt); Serial.println(dakOpen ? ": kasdak openen" : ": kasdak sluiten"); } } // hier doet de lus ondertussen haar andere werk (pomp, vlotter, sensoren) }