Knop en switch case
3 berichten
• Pagina 1 van 1
Knop en switch case
Goedendag allemaal,
Graag vraag ik om hulp voor mijn sketch.
De bedoeling is dat als de knop bijvoorbeeld 1 seconde wordt ingedrukt er een sequence gaat starten, nu bijvoorbeeld met een ledje die 2x aan en uit gaat met een interval van 2 seconden.
De sketch werkt, maar ik wil dat zolang de sequence bezig is er niet gereageerd wordt op de knop.
Pas als de sequence afgelopen is mag de knop weer werken.
Hoe is dat het beste toe te passen?
Alvast bedankt.
cpp code
Graag vraag ik om hulp voor mijn sketch.
De bedoeling is dat als de knop bijvoorbeeld 1 seconde wordt ingedrukt er een sequence gaat starten, nu bijvoorbeeld met een ledje die 2x aan en uit gaat met een interval van 2 seconden.
De sketch werkt, maar ik wil dat zolang de sequence bezig is er niet gereageerd wordt op de knop.
Pas als de sequence afgelopen is mag de knop weer werken.
Hoe is dat het beste toe te passen?
Alvast bedankt.
cpp code
//
// ARDUINO IDE: 1.8.9
// AUTHOR: Pexy
// VERSION: 1.0
// DESCRIPTION: Knop 1 sec. indrukken en dan sequence starten
// DATE: --/12/2019
//
const byte knopPin = 5;
const byte ledPin = 13;
// De staat van knop
int buttonState;
int prevButtonState;
// Variabelen voor knop
unsigned long previousMillis;
const unsigned long timeOut = 1000UL;
bool loopTijd = false;
// Variabelen voor switch case
bool actief = false;
int sequence = 1; // 1 is de eerste sequence variabel
unsigned long sequence_previousMillis;
const unsigned long interval_1 = 2000UL;
void setup()
{
Serial.begin(115200);
pinMode(knopPin, INPUT_PULLUP);
pinMode(ledPin, OUTPUT);
}
void loop()
{
buttonState = digitalRead (knopPin);
if (buttonState != prevButtonState)
{
// Wanneer de staat van knop laag is start de looptijd
if (buttonState == LOW)
{
loopTijd = true;
previousMillis = millis();
}
else
{
loopTijd = false;
}
}
prevButtonState = buttonState;
// Wanneer de looptijd voorbij is start functie "actief" met daarin de sequence (case 1)
if (loopTijd)
{
if (millis() - previousMillis >= timeOut)
{
loopTijd = false;
sequence = 1;
actief = true;
}
}
if (actief)
{
switch (sequence)
{
case 1:
if (millis() - sequence_previousMillis >= interval_1)
{
sequence_previousMillis = millis();
{
sequence = 2;
}
}
break;
case 2:
digitalWrite(ledPin, HIGH);
if (millis() - sequence_previousMillis >= interval_1)
{
sequence_previousMillis = millis();
{
sequence = 3;
}
}
break;
case 3:
digitalWrite(ledPin, LOW);
if (millis() - sequence_previousMillis >= interval_1)
{
sequence_previousMillis = millis();
{
sequence = 4;
}
}
break;
case 4:
digitalWrite(ledPin, HIGH);
if (millis() - sequence_previousMillis >= interval_1)
{
sequence_previousMillis = millis();
{
sequence = 5;
}
}
break;
case 5:
digitalWrite(ledPin, LOW);
if (millis() - sequence_previousMillis >= interval_1)
{
sequence_previousMillis = millis();
{
actief = false;
}
}
break;
}
}
}
Advertisement
Re: Knop en switch case
als de sequence start dan zet je een vlag aan bijvoorbeeld bezig=true;
als het gedaan is dan zet je die vlag weer uit zoals bezig=false; mag ook zijn !true trouwens.
maar dat doe jij al met actief dus wellicht staat het op verkeerde plaats maar dat kun je zelf uitzoeken
je mag schrijven if (actief &&!bezig) {}
als het gedaan is dan zet je die vlag weer uit zoals bezig=false; mag ook zijn !true trouwens.
maar dat doe jij al met actief dus wellicht staat het op verkeerde plaats maar dat kun je zelf uitzoeken
je mag schrijven if (actief &&!bezig) {}
paul deelen
shooter@home.nl
shooter@home.nl
Re: Knop en switch case
maar dat doe jij al met actief dus wellicht staat het op verkeerde plaats
Heb het inderdaad kunnen oplossen met het aanpassen van dit stukje:
cpp code
if (buttonState == LOW)
{
if (!actief)
{
loopTijd = true;
previousMillis = millis();
}
}
Nu wordt de knop genegeerd totdat de sequence afgelopen is.
3 berichten
• Pagina 1 van 1
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 4 gasten