Beginner vraag: Knop niet inhouden

Projecten die niet passen in bovenstaande onderwerpen
Berichten: 2
Geregistreerd: 14 Dec 2016, 17:33

Beginner vraag: Knop niet inhouden

Berichtdoor sanserof » 15 Dec 2016, 15:23

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?

Advertisement

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Beginner vraag: Knop niet inhouden

Berichtdoor Koepel » 15 Dec 2016, 15:34

Die vraag en dat project heb ik eerder gezien op dit forum :o

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.

Berichten: 4067
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Beginner vraag: Knop niet inhouden

Berichtdoor shooter » 15 Dec 2016, 21:09

if buttonstate== HIGH en de vorige scan LOW dan doe je truuk.
paul deelen
shooter@home.nl

Berichten: 2
Geregistreerd: 14 Dec 2016, 17:33

Re: Beginner vraag: Knop niet inhouden

Berichtdoor sanserof » 16 Dec 2016, 09:38

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?

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Beginner vraag: Knop niet inhouden

Berichtdoor Koepel » 16 Dec 2016, 11:15

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;
  }
Ik heb de "lastButtonState = buttonState;" binnen de if-statement gezet, omdat ik dat mooier vind, maar het mag ook er buiten.

Berichten: 4067
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Beginner vraag: Knop niet inhouden

Berichtdoor shooter » 16 Dec 2016, 13:19

die twee if moet je bij elkaar zetten zoals ik bedoelde met die twee haakjes.
paul deelen
shooter@home.nl

Berichten: 1
Geregistreerd: 17 Dec 2016, 01:26

Re: Beginner vraag: Knop niet inhouden

Berichtdoor Coldhatez » 17 Dec 2016, 01:28

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?

Berichten: 4067
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Beginner vraag: Knop niet inhouden

Berichtdoor shooter » 18 Dec 2016, 13:10

cpp code
if(( buttonState != lastButtonState) && (buttonState == HIGH))

zoek een cheatsheet en print die uit, en leg die naast het toetsenbord.
paul deelen
shooter@home.nl

Berichten: 2
Geregistreerd: 16 Dec 2016, 12:04

Re: Beginner vraag: Knop niet inhouden

Berichtdoor sanseroff » 19 Dec 2016, 12:12

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

Terug naar Overige projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 22 gasten