Verkeerslichtje

Toon hier Uw afgeronde projecten aan anderen.
Berichten: 5
Geregistreerd: 02 Sep 2015, 11:02
Woonplaats: Schiedam

Verkeerslichtje

Berichtdoor Elmar » 07 Sep 2015, 22:50

Zoals eerder gezegd, om een beetje te spelen en zelf wat te verzinnen dat niet direct uit het startersboek komt heb ik een verkeerslichtje gemaakt.
Autolicht, drukknop voor voetgangers en een voetgangerslicht. Het doet wat het moet doen maar kan vast makkelijker / beter / effectiever / ??. Ik ben nieuwsgierig wat ik niet (of misschien juist wel) goed heb gedaan.

Ik zie verder op het forum van die mooi weergegeven code, geen idee wat ik hier niet goed doe, maar bij mij wordt het het onderstaande blok.

Elmar

cpp code
const int AutoLEDRood = 13;
const int AutoLEDGeel = 12;
const int AutoLEDGroen = 11;

const int VoetLEDRood = 10;
const int VoetLEDGroen = 9;
const int VoetKnop = 8;

long DrukknopInterval = 3000;
long AutoInterval = 3000;
int KnipperAantal = 9;
long KnipperInterval = 2000;
int VoetgangerWacht = 0;
int VoetgangerSteektover = 0;
long VoetgangerTijd = 0;
long AutoGeelTijd = 0;
long AutoRoodTijd = 0;
long VoetGroenTijd = 0;
long VoetRoodTijd = 0;
long OversteekTijd = 10000;
long HuidigeTijd = 0;
long VorigeTijd = 0;
long Knipper = 0;

void setup() {
Serial.begin(9600);
Serial.println ("Verkeerslicht tprogramma opstarten");
Serial.println ("Auto's groen voetgangers Rood");
Serial.println ("***************************************************************************************************");
Serial.println ();
Serial.println ();
pinMode(AutoLEDRood, OUTPUT);
pinMode(AutoLEDGeel, OUTPUT);
pinMode(AutoLEDGroen, OUTPUT);
pinMode(VoetLEDRood, OUTPUT);
pinMode(VoetLEDGroen, OUTPUT);
pinMode(VoetKnop, INPUT);

digitalWrite (AutoLEDGroen, HIGH); //Auto's op Groen
digitalWrite (VoetLEDRood, HIGH); //Voetganger's naar Rood

}

void loop() {
if (VoetgangerWacht == 0 && digitalRead (VoetKnop) == HIGH){ //Alleen op drukknop reageren als het oversteken nog niet is gestart
VoetgangerWacht = 1; //Tijd registreren waarop voetganger op knop heeft gedrukt
VoetgangerTijd = millis();
Serial.println ("Voetganger heeft op knop gedrukt");
}

if (VoetgangerWacht == 1 && VoetgangerSteektover == 0 && VoetgangerTijd + DrukknopInterval <= millis()) {
Oversteken();
}

if (VoetgangerWacht == 1 && digitalRead (AutoLEDRood) == HIGH && AutoRoodTijd + OversteekTijd <= millis()) {
AutoDoorrijden();
}
}



void Oversteken() {
if (digitalRead (AutoLEDGroen) == HIGH){
AutoGeelTijd = millis(); //Tijd registreren dat auto's naar Geel gaan
digitalWrite (AutoLEDGroen, LOW); //Auto's laten verspringen naar Geel
digitalWrite (AutoLEDGeel, HIGH);
Serial.println ("Auto's krijgen Geel");
}

if (digitalRead (AutoLEDGeel) == HIGH && AutoGeelTijd + AutoInterval <= millis()){ //Testen of Geel al 2 seconde brand
AutoRoodTijd = millis(); //Tijd registreren dat auto's naar Rood gaan
digitalWrite (AutoLEDGeel, LOW); //Auto's laten verspringen naar Rood
digitalWrite (AutoLEDRood, HIGH);
Serial.println ("Auto's staan nu stil");
}

if (digitalRead (AutoLEDRood) == HIGH && AutoRoodTijd + AutoInterval <= millis()){ //Testen of Rood al 2 seconde brand
VoetGroenTijd = millis(); //Tijd registreren dat Voetgangers Groen krijgen
digitalWrite (VoetLEDRood, LOW); //Voetgangers Groen geven
digitalWrite (VoetLEDGroen, HIGH);
VoetgangerSteektover = 1;
Serial.println ("Voetgangers krijgen Groen");
}
}

void AutoDoorrijden() {
Serial.println ("Het is lang genoeg geweest"); //Groen laten knipperen
HuidigeTijd = millis();
while (Knipper < KnipperAantal) {
if (digitalRead(VoetLEDGroen) == HIGH){
digitalWrite(VoetLEDGroen, LOW);
}
else
{
digitalWrite(VoetLEDGroen, HIGH);
}
delay (500);
Knipper = Knipper + 1;
VoetRoodTijd = millis(); //Tijd registreren dat voetgangers weer rood krijgen
Serial.println (Knipper);
}

digitalWrite (VoetLEDGroen, LOW); //Voetgangers naar Rood
digitalWrite (VoetLEDRood, HIGH);

if (digitalRead (VoetLEDRood) == HIGH && VoetRoodTijd + AutoInterval <= millis()){ //Testen of Rood al 2 seconde brand
digitalWrite (AutoLEDRood, LOW);
digitalWrite (AutoLEDGroen, HIGH);
VoetgangerWacht = 0; //Voetgangersknop weer vrijgeven
VoetgangerSteektover = 0; //Reset Voetganger Steekt over
Knipper = 0; //Knipper counter terug naar 0 voor de volgende keer
}
}
Laatst gewijzigd door Elmar op 07 Sep 2015, 23:21, in totaal 1 keer gewijzigd.

Advertisement

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Verkeerslichtje

Berichtdoor nicoverduin » 07 Sep 2015, 23:16

Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 5
Geregistreerd: 02 Sep 2015, 11:02
Woonplaats: Schiedam

Re: Verkeerslichtje

Berichtdoor Elmar » 07 Sep 2015, 23:23

Aangepast, ziet er weer wat beter uit. :D

Elmar

Terug naar Afgeronde projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 9 gasten