Hoi . Ik wil voor halloween een paar relais schakelen met een paar drukplaaten . Maar nou moet eer een instelbaare delay zijn tussen het indrukken van de plaat en de volgende keer dat hij weer reageert op het indrukken. De props stoppen namelijk als je de schakelaar weer indrukt als hij nog bezig is .
Hoop dat dit duidelijk genoeg is .
Wie kan mij helpen aan een simpele sketch?
Hi . I want to switch a couple of relays with a couple of pressure plates for Halloween. But there must be an adjustable delay between pressing the plate and the next time it reacts to pressing. The props will stop if you press the switch again while it is still active.
Hope this is clear enough.
Who can help me with a simple sketch?
de bedoeling is dat de knoppen niet reageren binnen de aangegeven tijd (debounceDelay = 5000;).
//Decleration Section
int buttonPin2 = 2; // the number of the pushbutton pin
int buttonPin3 = 3; // the number of the pushbutton pin
// the following variables are unsigned long's because the time, measured in miliseconds,
// will quickly become a bigger number than can be stored in an int.
unsigned long lastDebounceTime = 0; // the last time the output pin was toggled
unsigned long debounceDelay = 5000; // the debounce time increase if you want longer pause between actions
void setup() {
pinMode(buttonPin2, INPUT_PULLUP);
pinMode(buttonPin3, INPUT_PULLUP);
pinMode(13, OUTPUT); // sets the digital pin 13 as output
pinMode(12, OUTPUT); // sets the digital pin 12 as output
}
void loop() {
// read the state of the switch into a local variable:
int reading2 = digitalRead(buttonPin2);
// Serial.println(reading);
if(reading2==LOW)
{
/*
* Here we check that enough time has passed between button presses e.g. that this isn't electric
* noice or mechanical Interference
*/
if ((millis() - lastDebounceTime) > debounceDelay) {
lastDebounceTime=millis();
action2();
}
}
}
void action2(){
digitalWrite(12, HIGH); // sets the digital pin 12 on
delay(200); // waits for a second
digitalWrite(12, LOW); // sets the digital pin 12 off
}
Alle begin wordt moeilijk geacht, dus enig geduld is wel een goede eigenschap.
Sterretje heeft een aantal trefwoorden genoemd, en jij bent aan de slag gegaan met 1 daarvan: millis.
Alleen ben je daar niet consequent in geweest, want ik zie nog delays in jouw code.
Verder is volgens mij jouw probleemstelling niet juist.
Het maakt volgens mij niet zoveel uit (*hier kom ik nog op terug) wat je van je knop binnenkrijgt, maar wel wat je daar mee doet.
Dus wanneer de knopdruk eenmaal is geregistreerd, moet je maar 1 maal wat doen en dan gedurende 5 seconden die handeling niet weer opnieuw starten.
Hierbij heb je dan nog niet de instelbaarheid gerealiseerd, maar ik mag aannemen dat jij daar later nog mee aan de slag zal gaan.
1 van de punten die sterretje noemde, is "state change detection".
Daar zie ik nog niets van in jouw sketch.
Je wil niet alleen weten of de knop is ingedrukt, maar ook of die in de tussentijd al eens is "uitgedrukt".
Door daar naar te kijken, kun je dus zien of die eerste persoon nog op de plaat staat, of dat er inmiddels een ander persoon op staat.
Jouw "prop" moet natuurlijk niet telkens aan de gang blijven als blijkt dat op de 6e seconde dezelfde persoon nog steeds op de plaat staat.
Dit is tevens het stukje waar ik nog op terug zou komen.
Verder moet je er wel voor zorgen dat wanneer je commentaren plaatst (of overneemt), dat die commentaren wel kloppen.
Ik zie commentaar over een seconde terwijl daar maar 1/5e van een seconde verwerkt wordt.