een drukknop 4 keer drukken dan led aan
15 berichten
• Pagina 2 van 2 • 1, 2
- Gij Kieken
- Berichten: 631
- Geregistreerd: 15 Nov 2015, 11:54
Re: een drukknop 4 keer drukken dan led aan
Het opzuiveren van de code en meerdere voorwaarden inbouwen laat ik aan jouw over.
Anders is de pret eraf .
Het is zeker niet de beste code maar vele wegen leiden naar Rome.
Experimenteer ermee en probeer nog voorwaarden in te bouwen (8 keer drukken modulo.....)
Anders is de pret eraf .
Het is zeker niet de beste code maar vele wegen leiden naar Rome.
Experimenteer ermee en probeer nog voorwaarden in te bouwen (8 keer drukken modulo.....)
- Code: Alles selecteren
/*
State change detection (edge detection)
Often, you don't need to know the state of a digital input all the time, but
you just need to know when the input changes from one state to another.
For example, you want to know when a button goes from OFF to ON. This is called
state change detection, or edge detection.
This example shows how to detect when a button or button changes from off to on
and on to off.
The circuit:
- pushbutton attached to pin 2 from +5V
- 10 kilohm resistor attached to pin 2 from ground
- LED attached from pin 13 to ground (or use the built-in LED on most
Arduino boards)
created 27 Sep 2005
modified 30 Aug 2011
by Tom Igoe
This example code is in the public domain.
http://www.arduino.cc/en/Tutorial/ButtonStateChange
*/
// ---------------------------------------------------------
// De code is wat aangepast om een puls te geven na modulo 4
// keer drukken op een knop
// ---------------------------------------------------------
// Als alles naar je zin verloopt commentarieer dan de volgende regel
#define DEBUG
// Variabelen en constanten nodig voor de sequentie
unsigned long previousMillis;
const unsigned long sequenceTime = 2000UL; // 2 seconden
bool startSequence = false; // De tijd waarin je moet drukken
const int pulsTime = 500; // Zorgt voor een puls van 1/2seconde
// this constant won't change:
const int buttonPin = 2; // the pin that the pushbutton is attached to
// Variables will change:
int buttonPushCounter = 0; // counter for the number of button presses
int buttonState = 0; // current state of the button
int lastButtonState = 0; // previous state of the button
void setup() {
// initialize the button pin as a input:
pinMode(buttonPin, INPUT);
// initialize the LED as an output:
pinMode( LED_BUILTIN, OUTPUT);
// initialize serial communication:
#ifdef DEBUG
Serial.begin(9600);
#endif
}
void loop() {
unsigned long currentMillis = millis(); // Houd te tijd bij
// read the pushbutton input pin:
buttonState = digitalRead(buttonPin);
// compare the buttonState to its previous state
if (buttonState != lastButtonState) {
// if the state has changed, increment the counter
if (buttonState == HIGH) {
// if the current state is HIGH then the button went from off to on:
buttonPushCounter++;
#ifdef DEBUG
Serial.print("number of button pushes: ");
Serial.println(buttonPushCounter);
#endif
if ( !startSequence) { // Start de looptijd
previousMillis = currentMillis; // remember this time
startSequence = true; // enable the timer
#ifdef DEBUG
Serial.println( "De Knop is ingedrukt en de tijd loopt.");
#endif
}
}
// Delay a little bit to avoid bouncing
delay(50);
}
// save the current state as the last state, for next time through the loop
lastButtonState = buttonState;
// Kijk of je binnen de tijd 4 keer gedrukt heb
if (startSequence) { // loopt de tijd ?
if ( currentMillis - previousMillis >= sequenceTime) {
startSequence = false; // zet terug af, 1-keer doorlopen
// Turns on the LED every four button pushes by checking the modulo of the
// button push counter. The modulo function gives you the remainder of the
// division of two numbers:
// Hier kun je nog meer voorwaarden defineren
if (buttonPushCounter % 4 == 0) {
digitalWrite(LED_BUILTIN, HIGH);
}
buttonPushCounter = 0; // Reset de teller
#ifdef DEBUG
Serial.println( "De 2 seconden zijn voorbij.");
#endif
// Hier blijft de code hangen,maar in dit geval maakt het niet uit
delay (pulsTime); // Wacht tot de pulstijd voorbij is
digitalWrite(LED_BUILTIN, LOW); // Schakel de Led of relais uit
}
}
}
Advertisement
Re: een drukknop 4 keer drukken dan led aan
@britting, je bent goed op weg, maar een zetje van Gij Kieken was wel nodig.
Sketch van britting:
Kun je voortaan de code tags gebruiken ? Er is een knop "Code" en als je de code tussen code tags zet, dan ziet het er beter uit.
Het denderen tegen gaan en dat te scheiden van de rest met een aparte functie "debounce()" is heel goed.
Die functie debounce() geeft altijd iets terug. Als de ingang nog flink staat te denderen, en het nog niet mogelijk is te zeggen wat het wordt, dan zou zo'n functie eigenlijk terug moeten melden: "ik weet het nog niet".
Nederlandse namen voor de variabelen is geen enkel probleem.
Als je een zelfde soort stukje code steeds herhaalt, dan kun je aanvoelen dat het eenvoudiger kan. Ik bedoel die "if(teller == 1), if(teller==2)", enzovoorts.
De variable "boolean" is iets van Arduino. In de C++ taal heet zo'n variabele een "bool".
Stel dat ik een timer met millis() voor het gemak een "kookwekker" noem. Als de kookwekker afloopt, dan moet opnieuw begonnen worden. Kun je vertellen wat je wilt ?
1) Vanaf het eerste moment dat een knop wordt ingedrukt de kookwekker starten. Dan wil je dus eigenlijk dat de laatste vier binnen de tijd zijn. Bijvoorbeeld 4 keer drukken binnen 1 seconde.
2) Bij iedere keer dat de knop wordt ingedrukt de kookwekker starten (dat is eenvoudiger). Bijvoorbeeld de pauze tussen de knoppen indrukken niet langer dan 300ms (dan wordt het totaal 1.2 seconden).
Sketch van Gij Kieken:
Ik zie dat je het StateChangeDetection voorbeeld ( https://www.arduino.cc/en/Tutorial/StateChangeDetection ) hebt uitgebreid.
Het commentaar kun je beter in laten springen, in lijn met de code. De DEBUG maakt het nog wat lastiger om te lezen.
Wanneer iemand vier keer op de knop drukt, dan doe je nog niets. Er wordt gewacht totdat de tijd verloopt en dan pas kijk je over er 4 of 8 of 12 keer gedrukt is. Dat kan beter
Sketch van britting:
Kun je voortaan de code tags gebruiken ? Er is een knop "Code" en als je de code tussen code tags zet, dan ziet het er beter uit.
Het denderen tegen gaan en dat te scheiden van de rest met een aparte functie "debounce()" is heel goed.
Die functie debounce() geeft altijd iets terug. Als de ingang nog flink staat te denderen, en het nog niet mogelijk is te zeggen wat het wordt, dan zou zo'n functie eigenlijk terug moeten melden: "ik weet het nog niet".
Nederlandse namen voor de variabelen is geen enkel probleem.
Als je een zelfde soort stukje code steeds herhaalt, dan kun je aanvoelen dat het eenvoudiger kan. Ik bedoel die "if(teller == 1), if(teller==2)", enzovoorts.
De variable "boolean" is iets van Arduino. In de C++ taal heet zo'n variabele een "bool".
Stel dat ik een timer met millis() voor het gemak een "kookwekker" noem. Als de kookwekker afloopt, dan moet opnieuw begonnen worden. Kun je vertellen wat je wilt ?
1) Vanaf het eerste moment dat een knop wordt ingedrukt de kookwekker starten. Dan wil je dus eigenlijk dat de laatste vier binnen de tijd zijn. Bijvoorbeeld 4 keer drukken binnen 1 seconde.
2) Bij iedere keer dat de knop wordt ingedrukt de kookwekker starten (dat is eenvoudiger). Bijvoorbeeld de pauze tussen de knoppen indrukken niet langer dan 300ms (dan wordt het totaal 1.2 seconden).
Sketch van Gij Kieken:
Ik zie dat je het StateChangeDetection voorbeeld ( https://www.arduino.cc/en/Tutorial/StateChangeDetection ) hebt uitgebreid.
Het commentaar kun je beter in laten springen, in lijn met de code. De DEBUG maakt het nog wat lastiger om te lezen.
Wanneer iemand vier keer op de knop drukt, dan doe je nog niets. Er wordt gewacht totdat de tijd verloopt en dan pas kijk je over er 4 of 8 of 12 keer gedrukt is. Dat kan beter
- Gij Kieken
- Berichten: 631
- Geregistreerd: 15 Nov 2015, 11:54
Re: een drukknop 4 keer drukken dan led aan
Hey,Koepel
Leuk opgemerkt, de bedoeling is dat Britting zelf eens goed nadenkt en het wat opschoont.
Het wachten deed ik met opzet.
Het trukje met Debug mag er gerust uit zeker voor zo een kort stukje code,dat was even een geintje en nogmaals een aanzet om Britting tot denken aan te zetten.
Leuk opgemerkt, de bedoeling is dat Britting zelf eens goed nadenkt en het wat opschoont.
Het wachten deed ik met opzet.
Het trukje met Debug mag er gerust uit zeker voor zo een kort stukje code,dat was even een geintje en nogmaals een aanzet om Britting tot denken aan te zetten.
Re: een drukknop 4 keer drukken dan led aan
bedankt voor de hulp, fantastisch.
nu snap ik het, het is goed gekomen .
als ik iets vraag dan ben ik eerst al uren bezig geweest ,
ik ben er pas mee begonnen met programmeren .
bedankt voor jullie tijd .
nu snap ik het, het is goed gekomen .
als ik iets vraag dan ben ik eerst al uren bezig geweest ,
ik ben er pas mee begonnen met programmeren .
bedankt voor jullie tijd .
- Gij Kieken
- Berichten: 631
- Geregistreerd: 15 Nov 2015, 11:54
Re: een drukknop 4 keer drukken dan led aan
Is altijd prettig als er feedback komt.
Het is de bedoeling zoals reeds eerder vermeld om de code wat op te zuiveren.
Inspringingen voorzien waar nodig en eventueel het commentaar wijzigen in een voor jouw verstaanbare tekst.
Een opdrachtje zou kunnen zijn de vaste modulo 4 te wijzigen in een variable en een paar testjes uitvoeren.
Een button klik toevoegen zo dat je hoort als je de drukknop indrukt.
Een melodietje afspelen bij juiste code ingave.
Een peut toon bij foutieve ingave.
etc...
Het is de bedoeling zoals reeds eerder vermeld om de code wat op te zuiveren.
Inspringingen voorzien waar nodig en eventueel het commentaar wijzigen in een voor jouw verstaanbare tekst.
Een opdrachtje zou kunnen zijn de vaste modulo 4 te wijzigen in een variable en een paar testjes uitvoeren.
Een button klik toevoegen zo dat je hoort als je de drukknop indrukt.
Een melodietje afspelen bij juiste code ingave.
Een peut toon bij foutieve ingave.
etc...
15 berichten
• Pagina 2 van 2 • 1, 2
Wie is er online?
Gebruikers in dit forum: osoihasig en 42 gasten