Meerdere knoppen tegelijk een opdracht met timer geven

Arduino specifieke Software
Berichten: 7
Geregistreerd: 30 Okt 2013, 13:05

Meerdere knoppen tegelijk een opdracht met timer geven

Berichtdoor Arduinonieuw » 26 Sep 2023, 16:29

Hallo,

Ik zou graag b.v. 4 drukknoppen maken die ieder apart een led of motor aansturen voor een bepaalde tijd. Echter als ik een knop indruk dan gaat er een led branden voor een bepaalde tijd in de void loop. Maar dan moet ik wachten totdat die timer afloopt wil ik een andere knop indrukken. Maar ik wil graag, als de eerste timer loopt, ook andere knoppen activeren. En dat ook met een timer. Maar het lukt me maar niet. Wie kan helpen? Ik scan nu de knoppen die ingedrukt worden en stuur dan in de void loop de Arduino naar een void gemaakt voor een led of motor. Maar zoals gezegd wacht Arduino eerst op dat de eerste timer klaar is voordat hij terugkeert naar de void loop waar hij weer gaat scannen naar ingedrukte knoppen. Alvast bedankt.

Groet, Emil Bakker

Advertisement

Berichten: 180
Geregistreerd: 26 Aug 2015, 11:57

Re: Meerdere knoppen tegelijk een opdracht met timer geven

Berichtdoor Frits1956 » 26 Sep 2023, 17:17

Kijk eens naar blink without delay in de voorbeelden.
je hoeft niet in een loop te wachten tot iets klaar is, je hoeft alleen maar te kijken of de tijd al is verstreken. is de tijd verstreken dan de procedure uitvoeren om de led uit te zetten.

Berichten: 80
Geregistreerd: 02 Nov 2022, 13:03

Re: Meerdere knoppen tegelijk een opdracht met timer geven

Berichtdoor ThHe » 26 Sep 2023, 20:14

Waarschijnlijk zie je programma er nu zo uit. (schematisch)

void loop()
{
if (<Lees button voor led1>)
{
// Led1 gaat aan
..........
delay(3000);
// led1 gaat uit
......
}
}

Verwijderen van het delay statement lost het probleem op:

#define WAIT_TIME_LED_1 3000 // Tijd dat led1 aan is.
long stopTimeLed1 = 0;

void loop()
{
if (<Lees button voor led1>)
{
// actie led1 gaat aan
.........
// Eind tijd voor led1 wordt vastgelegd
stopTimeLed1 = millis() + WAIT_TIME_LED_1;
}
// Tijd voor Led1 is verlopen.
if (stopTimeLed1 < millis() && stopTimeLed1 != 0)
{
// led1 gaat uit
................
stopTimeLed1 = 0;
}
}

Berichten: 7
Geregistreerd: 30 Okt 2013, 13:05

Re: Meerdere knoppen tegelijk een opdracht met timer geven

Berichtdoor Arduinonieuw » 27 Sep 2023, 16:22

Dank jullie voor de snelle reactie. Ik ga het uitproberen.

Berichten: 7
Geregistreerd: 30 Okt 2013, 13:05

Re: Meerdere knoppen tegelijk een opdracht met timer geven

Berichtdoor Arduinonieuw » 27 Sep 2023, 19:15

Hallo,

Code ingevoerd, maar met onderstaand programma gaat de led meteen aan en blijft aan. Waarschijnlijk doe ik iets fout.

const int button1Pin = 2;
const int button2Pin = 3;
const int led1Pin = 4;
const int led2Pin = 5;


#define WAIT_TIME_LED_1 3000 // Tijd dat led1 aan is.
long stopTimeLed1 = 0;

void setup() {
pinMode(button1Pin, INPUT);
pinMode(button2Pin, INPUT);
pinMode(led1Pin, OUTPUT);
pinMode(led1Pin, OUTPUT);
}
void loop()
{
if (digitalRead(button1Pin) == HIGH)
{
// actie led1 gaat aan
digitalWrite (led1Pin , HIGH);
// Eind tijd voor led1 wordt vastgelegd
stopTimeLed1 = millis() + WAIT_TIME_LED_1;
}
//Tijd voor Led1 is verlopen.

if (stopTimeLed1 < millis() && stopTimeLed1 != 0)
{
// led1 gaat uit
digitalWrite(led1Pin, LOW);
stopTimeLed1 = 0;
}
}


Wat kan dit zijn?

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

Re: Meerdere knoppen tegelijk een opdracht met timer geven

Berichtdoor shooter » 29 Sep 2023, 10:43

bij de if een paar haakjes plaatsen want de if werkt alleen maar met booleans dus if ( tijd <millis)&&(led==aan)
etc
en define kijken hoe je aan kunt definieren als HIGH want relais zijn vaak aan als ze juist LOW zijn.
paul deelen
shooter@home.nl

Berichten: 80
Geregistreerd: 02 Nov 2022, 13:03

Re: Meerdere knoppen tegelijk een opdracht met timer geven

Berichtdoor ThHe » 29 Sep 2023, 20:58

Het if statement uitbreiden met stopTimeLed1 == 0.

if (digitalRead(button1Pin) == HIGH && stopTimeLed1 == 0)

Testen met het uitbreiden van print resultaten:

Code: Alles selecteren
void setup() {
.....
Serial.begin(9600);
}
void loop()
{
if (digitalRead(button1Pin) == HIGH && stopTimeLed1 == 0)
{
Serial.println("ON");
....
}
//Tijd voor Led1 is verlopen.

if (stopTimeLed1 < millis() && stopTimeLed1 != 0)
{
Serial.println("OFF");
.....
}
}


Bij het testen zal dan na 3 sec de OFF worden geprint en als dan direct weer ON aan gaat dan zit de fout
gedeelte van digitalRead(button1Pin) == HIGH
kan wijzen op misschien fout aangesloten!!

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 77 gasten