4 leds state machine

ik heb een probleem met mijn arduino project i probeer een state machine te maken met 4 leds en 1 knop
knop op pin 12 leds 6,9,10,11 maar ik vind er geen beginnen aan kan iemand helpen iedere keer ik op de knop druk zou hij de volgende led moeten laten aan gaan

Schoolopdracht?

Na 2 jaar schoolopdrachten zou dit toch al wel een aardig eind onder controle moeten zijn, hoop ik.

Maar goed, een tipje dan maar.
De omschrijving van je probleem lijkt me niet zo heel moeilijk op te lossen, maar ik vermoed dat je door de bomen het bos niet meer ziet.
State machine betekent dat je veel moet onthouden.
Bekijk daarom eens goed wat je in je code allemaal doet en wat je dus bij moet houden.

In dit geval hoef je maar één ding te “onthouden”, en dat is de “state”. Deel je code (in function loop() ) op in twee delen, lees in het eerste deel de button uit en zet de “state”, en lees in het tweede deel de “state” en schakel de juiste led’s aan resp. uit. Ik neem aan dat je de functie setup() zelf kunt invullen?

Dat is niet juist, tenzij jij precies weet hoe vraagsteller de hard;- en software nu al heeft gebouwd (en dat met je opmerking overeenstemt).

We zullen zien... :wink:

Op dit moment weten we inderdaad niet genoeg om TDSgame verder te kunnen helpen, het is nu aan hem/haar om dat duidelijk te maken.

ik heb nu al dit programma maar het probreem is nu als je de knop indrukt en blijft inhouden pinkt hij supper snel oplossingen

const int BLUELEDBUITEN = 6;
const int WHITELEDBUITEN = 9;
const int BLUELED = 10;
const int WHITELED = 11;

define BUTTONPIN 13

int huidigeToestand;
int BUTTON;
int tijdTeller = 0 ;
int wachttijd = 3000 ;

enum { ALLES_UIT , ALLES_AAN , FADE , DISCO , BLUE_AAN , WIT_AAN};
/* ALLES UIT
ALLES AAN
FADE
DISCO
BLUE AAN WIT AAN
WIT AAN BLUE AAN
*/

void setup() {

pinMode(BLUELEDBUITEN, OUTPUT);
pinMode(WHITELEDBUITEN, OUTPUT);
pinMode(BLUELED, OUTPUT);
pinMode(WHITELED, OUTPUT);
pinMode(BUTTONPIN, INPUT);
Serial.begin(9600);
huidigeToestand = ALLES_UIT;
}

void loop() {

Do_States();
delay(50);
BUTTON = !digitalRead(BUTTONPIN);
tijdTeller--;
}

void Do_States(void)
{
switch (huidigeToestand)
{
case ALLES_UIT:

digitalWrite(BLUELEDBUITEN, LOW);
digitalWrite(WHITELEDBUITEN, LOW);
digitalWrite(WHITELED, LOW);
digitalWrite(BLUELED, LOW);

if (BUTTON == HIGH)
{
huidigeToestand = ALLES_AAN;
}

break;

case ALLES_AAN:
digitalWrite(BLUELEDBUITEN, HIGH);
digitalWrite(WHITELEDBUITEN, HIGH);
digitalWrite(WHITELED, HIGH);
digitalWrite(BLUELED, HIGH);

if (BUTTON == HIGH)
{
huidigeToestand = ALLES_UIT;
}

break;

default:
huidigeToestand = ALLES_UIT;
break;
}
}

het begint al ergens op te lijken.
als de state verandert is dan pas kijken als de drukknop losgelaten is en weer opnieuw ingedrukt.
bijvoorbeeld kijk eens op bounce
en dat kun je oplossen met delay maar beter is om de timer te gebruiken als in millis() dat is een automatische teller die elke millis oploopt.
delay is zoiets maar dan stopt je prgramma, en dat wordt straks een probleem als er meer moet gebeuren.

ok bedankt