lichtspel met cyclus probleempje

Projecten die niet passen in bovenstaande onderwerpen
Berichten: 3
Geregistreerd: 21 Mei 2015, 12:08

lichtspel met cyclus probleempje

Berichtdoor michael » 21 Mei 2015, 16:34

Hallo, ik ben een elektrotechnieker met wat kennis van PLC prog. maar arduino is nog nieuw 2 projecten voor fotografie werken prima.
Nu maak ik soort lichtspel met 4 led's en het loopt goed tot op het einde. Ik vraag om de cyclus te stoppen na alle combinaties en dit lukt ook.
Maar ik wil op het einde alles opnieuw doorlopen en net hier zit ik vast. Voor een kenner zal dit wel een koud kunstje zijn denk ik.

int pauze = 1000; //vaste pauze
int time1 = 500; //timer 1
int time2 = 200; //timer 2
int time3 = 100; //timer 3
int time4 = 100; //timer 4
int time5 = 50; //timer 5
int time6 = 50; //timer 6
int var1;
int var2;
int var3;
int var4;
int var5;
int var6;

void setup() {

pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
//pinker met 4 led's samen aan en uit

//alles aan en uit
while (var1 < 5) { //
digitalWrite(2, HIGH); //
digitalWrite(3, HIGH); //
digitalWrite(4, HIGH); //
digitalWrite(5, HIGH); //
delay(time1); //
digitalWrite(2, LOW); //
digitalWrite(3, LOW); //
digitalWrite(4, LOW); //
digitalWrite(5, LOW); //
delay(pauze); //
var1 ++;
}

//wissel pinker
while (var2 < 5) { //
digitalWrite(2, HIGH); //
digitalWrite(4, HIGH); //
delay(time2); //
digitalWrite(2, LOW); //
digitalWrite(4, LOW); //
digitalWrite(3, HIGH); //
digitalWrite(5, HIGH); //
delay(time2); //
digitalWrite(3, LOW); //
digitalWrite(5, LOW); //
delay(pauze); //
var2 ++;
}

//johnson R
while (var3 < 5) { //
digitalWrite(2, HIGH); //
delay(time3); //
digitalWrite(3, HIGH); //
delay(time3); //
digitalWrite(4, HIGH); //
delay(time3); //
digitalWrite(5, HIGH); //
delay(time3); //
digitalWrite(2, LOW); //
delay(time3); //
digitalWrite(3, LOW); //
delay(time3); //
digitalWrite(4, LOW); //
delay(time3); //
digitalWrite(5, LOW); //
delay(pauze);
var3 ++;
}

//johnson L
while (var4 < 5) { //
digitalWrite(5, HIGH); //
delay(time4); //
digitalWrite(4, HIGH); //
delay(time4);
digitalWrite(3, HIGH); //
delay(time4);
digitalWrite(2, HIGH); //
delay(time4);
digitalWrite(5, LOW); //
delay(time4);
digitalWrite(4, LOW); //
delay(time4);
digitalWrite(3, LOW); //
delay(time4);
digitalWrite(2, LOW); //
delay(pauze);
var4 ++;
}

//een L schuiven
while (var5 < 5) { //
digitalWrite(5, HIGH); //
delay(time5);
digitalWrite(5, LOW); //
digitalWrite(4, HIGH); //
delay(time5);
digitalWrite(4, LOW); //
digitalWrite(3, HIGH); //
delay(time5);
digitalWrite(3, LOW); //
digitalWrite(2, HIGH); //
delay(time5);
digitalWrite(2, LOW); //
delay(pauze);
var5 ++;
}

//een R schuiven
while (var6 < 5) { //
digitalWrite(2, HIGH); //
delay(time6);
digitalWrite(2, LOW); //
digitalWrite(3, HIGH); //
delay(time6);
digitalWrite(3, LOW); //
digitalWrite(4, HIGH); //
delay(time6);
digitalWrite(4, LOW); //
digitalWrite(5, HIGH); //
delay(time6);
digitalWrite(5, LOW); //
delay(pauze);
var6 ++;
}
{
// detectie van einde cyclus (doel om te herstarten vanaf begin) maar hoe?
if (var6==5) //detectie einde cyclus //dit is OK
digitalWrite(2, HIGH);////////// HIER MOET IETS ANDERS KOMEN DAT IK WEER VAN IN HET BEGIN START ( oneindig)
delay(10);
}
}

Advertisement

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

Re: lichtspel met cyclus probleempje

Berichtdoor shooter » 21 Mei 2015, 22:50

ja leuk probleem,
vraagje wat is bijvoorbeeld var6 aan het einde van de cyclus, jij zegt 5 klopt ook, maar wat is var1 eigenlijk nu? die is nog steeds 5 en dus gaat je programma gelijk door naar var2 en zie je niks meer want alleen 2 wordt nog high gemaakt en telkens 0.01 sec gewacht en dan weer gewacht en ewacht.
oplossing:
maak de var1..6 eerst maar weer 0 aan het einde van je loop.
alv ast 2 opmerkingen, zet al deze stukjes routine in een functies, dan kun je ze telkens aanroepen in je loop.
de volgende opmerking is om niet delay te gebruiken, maar millis() dan kun je nog heel veel andere dingen tegelijk doen.
paul deelen
shooter@home.nl

Berichten: 3
Geregistreerd: 21 Mei 2015, 12:08

Re: lichtspel met cyclus probleempje

Berichtdoor michael » 22 Mei 2015, 09:09

Dank voor de juiste aanzet.
Heb op het einde volgende gezet en heb nu wat ik wilde.{
//variabele teller op einde opnieuw op NUL zetten zodat cyclus van op beging herstart
var1 = 0;
var2 = 0;
var3 = 0;
var4 = 0;
var5 = 0;
var6 = 0;
var7 = 0;
delay(10);
}
}
Het probleem was dat ik niet juist wist hoe dit te doen, een mens doet dan van alles en dan komen er meer en meer fouten.
De millis staan ook al een tijdje op de to do lijst juist omdat je er meer kan doen.
Met die functie bedoel je waarschijnlijk voor elk stukje een void loop met een andere naam aan maken, daar werk ik nu aan.
Dank
Michael

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

Re: lichtspel met cyclus probleempje

Berichtdoor shooter » 22 Mei 2015, 09:22

heel mooi dat het werkt, simpel he.
en ja met die functie bedoel ik inderdaad dat je van elke soort licht een functie maakt en die aanroept.
eigenlijk overal waar een delay staat knippen en in een functie zetten.
dan heb je alleen nog die millis in de loop staan. en dan gaat ineens je loop wel heel erg snel, maar dat is de bedoeling.
geef je pinnen namen , dan kun je herdefinieren, ofwel snel uitbreiden en modulair werken.
Je idee is overigens een prima leerobject en gewoon lekker doorgaan.
paul deelen
shooter@home.nl

Terug naar Overige projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 49 gasten