Beginner vraag: Knop niet inhouden
9 berichten
• Pagina 1 van 1
Beginner vraag: Knop niet inhouden
Hallo, ik ben met een project bezig waar ik dmv 4 ledjes een binair getal laat zien, en dit getal moet je raden door het juiste aantal keren op een knop te drukken. Het aantal keer dat je op de knop hebt gedrukt print ik uit op de seriele monitor ter controle. Het grootste gedeelte van dit project werkt, op één ding na: als ik de knop inhoud blijft hij doorgaan met tellen, dit wil ik niet. Hier is de code van de knop.
int buttonTellerMethode (int randomGetal) {
tijdslimiet = 2000L;
for (startTijd = millis(); (millis() - startTijd) < tijdslimiet; ) {
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) {
buttonPushCounter++;
tijdslimiet = 2000L;
Serial.println(buttonPushCounter);
delay(300);
buttonTellerMethode(randomGetal);
}
}
Hoe los ik dit op?
int buttonTellerMethode (int randomGetal) {
tijdslimiet = 2000L;
for (startTijd = millis(); (millis() - startTijd) < tijdslimiet; ) {
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) {
buttonPushCounter++;
tijdslimiet = 2000L;
Serial.println(buttonPushCounter);
delay(300);
buttonTellerMethode(randomGetal);
}
}
Hoe los ik dit op?
Advertisement
Re: Beginner vraag: Knop niet inhouden
Die vraag en dat project heb ik eerder gezien op dit forum
Je kijkt nu of de knop is ingedrukt. Als iemand de knop ingedrukt houdt, dan zie je steeds dat hij ingedrukt is.
Het gaat echter om het moment dat de knop van niet-ingedrukt naar wel-ingedrukt gaat. Dus om een wijziging van de 'state' van de knop. Daar is de StateChangeDetection voor : https://www.arduino.cc/en/Tutorial/StateChangeDetection.
Het komt er op neer dat je de vorige 'state' onthoudt, en als die anders is dan de huidige 'state', dan is er iets met de knop veranderd.
De Bounce2 library om het bouncen van een schakelaar er uit te filteren heeft de StateChangeDetection mogelijkheid ook, met de functions .rose() en .fell() : https://github.com/thomasfredericks/Bounce2.
Je kijkt nu of de knop is ingedrukt. Als iemand de knop ingedrukt houdt, dan zie je steeds dat hij ingedrukt is.
Het gaat echter om het moment dat de knop van niet-ingedrukt naar wel-ingedrukt gaat. Dus om een wijziging van de 'state' van de knop. Daar is de StateChangeDetection voor : https://www.arduino.cc/en/Tutorial/StateChangeDetection.
Het komt er op neer dat je de vorige 'state' onthoudt, en als die anders is dan de huidige 'state', dan is er iets met de knop veranderd.
De Bounce2 library om het bouncen van een schakelaar er uit te filteren heeft de StateChangeDetection mogelijkheid ook, met de functions .rose() en .fell() : https://github.com/thomasfredericks/Bounce2.
Re: Beginner vraag: Knop niet inhouden
if buttonstate== HIGH en de vorige scan LOW dan doe je truuk.
paul deelen
shooter@home.nl
shooter@home.nl
Re: Beginner vraag: Knop niet inhouden
Ik heb nu dit gedaan, maar het werkt nog steeds niet.
//method button clicks
int buttonClicks(int nick){
uint32_t periode = 2000L; // periode heeft een lengte van 2 seconde
for( uint32_t tStart = millis(); (millis()-tStart) < periode; ){ // berekent de start, deze moet kleiner zijn dan de periode die verstreken is (2 seconde)}
knopStatus = digitalRead(BUTTON);
if (knopStatus == HIGH) {
if (knopStatus != lastButtonState) {
buttonCounter++;
uint32_t period = 2000L; // 2 sec
Serial.println(knopStatus); // tekst + aantal keer geklik
lastButtonState = knopStatus;
buttonClicks(nick);
delay(50);
}
}
}
Kan iemand mij hier mee helpen?
//method button clicks
int buttonClicks(int nick){
uint32_t periode = 2000L; // periode heeft een lengte van 2 seconde
for( uint32_t tStart = millis(); (millis()-tStart) < periode; ){ // berekent de start, deze moet kleiner zijn dan de periode die verstreken is (2 seconde)}
knopStatus = digitalRead(BUTTON);
if (knopStatus == HIGH) {
if (knopStatus != lastButtonState) {
buttonCounter++;
uint32_t period = 2000L; // 2 sec
Serial.println(knopStatus); // tekst + aantal keer geklik
lastButtonState = knopStatus;
buttonClicks(nick);
delay(50);
}
}
}
Kan iemand mij hier mee helpen?
Re: Beginner vraag: Knop niet inhouden
De bedoeling van de StateChangeDetection is om eerst een verandering van de knop te detecteren, en pas daarna te kijken of de knop van HIGH naar LOW ging of van LOW naar HIGH.
- Code: Alles selecteren
buttonState = digitalRead(buttonPin);
if( buttonState != lastButtonState)
{
if (buttonState == HIGH)
{
...
}
lastButtonState = buttonState;
}
Re: Beginner vraag: Knop niet inhouden
die twee if moet je bij elkaar zetten zoals ik bedoelde met die twee haakjes.
paul deelen
shooter@home.nl
shooter@home.nl
Re: Beginner vraag: Knop niet inhouden
shooter schreef:die twee if moet je bij elkaar zetten zoals ik bedoelde met die twee haakjes.
Ik snap het niet helemaal shooter, zou je kunnen laten zien wat je bedoeld?
Re: Beginner vraag: Knop niet inhouden
cpp code
zoek een cheatsheet en print die uit, en leg die naast het toetsenbord.
if(( buttonState != lastButtonState) && (buttonState == HIGH))
zoek een cheatsheet en print die uit, en leg die naast het toetsenbord.
paul deelen
shooter@home.nl
shooter@home.nl
Re: Beginner vraag: Knop niet inhouden
Weet iemand toevallig hoe ik zelfmoord programmeer in Arduino?
Ik heb nu deze code
[code2=]
if (life == true) {
killSelfMethod();
}[/code2]
Eigenlijk is het gewoon dat als ik leef, moet het zelfmoord methode worden uitgevoerd. Ik heb al rondgevraagd op stackoverflow, maar deze code is iets te ingewikkeld voor ze helaas.
Graag zou ik jullie hulp willen,
Canceroff
Ik heb nu deze code
[code2=]
if (life == true) {
killSelfMethod();
}[/code2]
Eigenlijk is het gewoon dat als ik leef, moet het zelfmoord methode worden uitgevoerd. Ik heb al rondgevraagd op stackoverflow, maar deze code is iets te ingewikkeld voor ze helaas.
Graag zou ik jullie hulp willen,
Canceroff
9 berichten
• Pagina 1 van 1
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 15 gasten