Kimlorentz Skrevet 22. mai 2014 Del Skrevet 22. mai 2014 (endret) Jeg har startet å leke meg med arduino og programmering i c++. Mitt første prosjekt er trafikklys. Jeg har fått trafikk lyset til å gå slik som et trafikk lys i Norge går men vil nå legge til bryterer som brukes til å indikere at en person vil gå over et kryss. Har 2 kryss og de skal fungere uavhenging av hverandre. Se vedlagt bilde. Spørsmålet mitt er da hvordan jeg skal gå frem å få den til å gjøre slik som vist på bildet over. Noen som veit om hvordan jeg skal gå frem? Skal jeg bruke if, else if, if eller case? -- Arduino Mega 2560 -- // Pin Config //const int ButtonA = 2;const int ButtonB = 13;const int RedA = 12;const int YellowA = 11;const int GreenA = 10;const int WalkRedA = 9;const int WalkGreenA = 8;const int RedB = 7;const int YellowB = 6;const int GreenB = 5;const int WalkRedB = 4;const int WalkGreenB = 3;// Time interval // int Delayyellow = 4000; // 4 secondsint Delaygreen = 30000; // 30 secondsint Delayred = 30000; // 30 seconds int Delaywalkgreen = 20000; // 20 secondsint Delayblink = 500; // 0.5 seconds // Output/Input setup //void setup() {pinMode(ButtonA, INPUT);pinMode(ButtonB, INPUT);pinMode(RedA, OUTPUT);pinMode(YellowA, OUTPUT);pinMode(GreenA, OUTPUT);pinMode(WalkRedA, OUTPUT);pinMode(WalkGreenA, OUTPUT);pinMode(RedB, OUTPUT);pinMode(YellowB, OUTPUT);pinMode(GreenB, OUTPUT);pinMode(WalkRedB, OUTPUT);pinMode(WalkGreenB, OUTPUT);} Endret 23. mai 2014 av Kimlorentz Lenke til kommentar
Karl Skapeland Skrevet 22. mai 2014 Del Skrevet 22. mai 2014 Alt du kommer med er jo bare noen konstanter, og setup()-funksjonen din. Lenke til kommentar
Kimlorentz Skrevet 22. mai 2014 Forfatter Del Skrevet 22. mai 2014 Det er starten på koden, ikke fullført enda. Der jeg trenger hjelp Lenke til kommentar
Karl Skapeland Skrevet 22. mai 2014 Del Skrevet 22. mai 2014 (endret) Du skrev jo at "Jeg har fått trafikk lyset til å gå slik som et trafikk lys i Norge...", så da antok jeg at du hadde skrevet mer kode enn det du kom med i innlegget ditt. Og da ville det være vanskelig å komme med konkrete tips på hvordan du skulle gå videre for å løse oppgaven. Hvis så ikke er tilfelle, så vil jeg heller anbefale deg å sette deg inn i grunnleggende C-programmering, og se litt på de forskjellige eksemplene som kommer med Arduino-programvaren. Spørsmål om helt grunnleggende ting som valg av kontrollstrukturer sier meg at du først bør satse på å få en bedre forståelse for disse grunnleggende tingene, før du prøver deg på et prosjekt som dette. Du bør dessuten bruke code-taggen når du poster kode. Endret 22. mai 2014 av Karl Skapeland Lenke til kommentar
Kimlorentz Skrevet 23. mai 2014 Forfatter Del Skrevet 23. mai 2014 Skal få lagt ut mer av koden i kveld. satt litt i går å prøvde meg men glemte å legge ut. Lenke til kommentar
Kimlorentz Skrevet 23. mai 2014 Forfatter Del Skrevet 23. mai 2014 Her er hvordan jeg ser for meg de forskjellige resultatene som skal skje i normal drift og når en knapp blir trykket. Så var det å få pakket det inn i et loop system. // First Run Only //digitalWrite(RedA, HIGH);digitalWrite(WalkRedA, HIGH);digitalWrite(RedB, HIGH);digitalWrite(WalkRedB, HIGH);digitalWrite(YellowA, LOW);digitalWrite(GreenA, LOW);digitalWrite(WalkGreenA, LOW);digitalWrite(YellowB, LOW);digitalWrite(GreenB, LOW);digitalWrite(WalkGreenB, LOW);// Normal loop //delay(Delayyellow)digitalWrite(YellowA, HIGH);delay(Delayyellow)digitalWrite(YellowA, LOW);digitalWrite(GreenA, HIGH);delay(Delaygreen)digitalWrite(GreenA, Low);digitalWrite(YellowA, HIGH);delay(Delayyellow);digitalWrite(YellowA, LOW);digitalWrite(RedA, HIGH);delay(Delayyellow)digitalWrite(YellowB, HIGH);delay(Delayyellow);digitalWrite(YellowB, LOW);digitalWrite(GreenB, HIGH);delay(Delaygreen)digitalWrite(GreenB, LOW);digitalWrite(YellowB, HIGH);delay(Delayyellow)digitalWrite(YellowB, LOW);digitalWrite(RedB, HIGH);// Button A pressed //delay(Delayyellow);digitalWrite(YellowA, HIGH);digitalWrite(WalkGreenA, HIGH);delay(Delayyellow);digitalWrite(YellowA, LOW);digitalWrite(GreenA, HIGH);delay(Delaywalkgreen);digitalWrite(WalkGreenA, LOW);delay(Delayblink);digitalWrite(WalkGreenA, HIGH);delay(Delayblink);digitalWrite(WalkGreenA, LOW);delay(Delayblink);digitalWrite(WalkGreenA, HIGH);delay(Delayblink);digitalWrite(WalkGreenA, LOW);delay(Delayblink);digitalWrite(WalkGreenA, HIGH);delay(Delayblink);digitalWrite(WalkGreenA, LOW);delay(Delayblink);digitalWrite(WalkGreenA, HIGH);delay(Delayblink);digitalWrite(WalkGreenA, LOW);delay(Delayblink);digitalWrite(WalkGreenA, HIGH);delay(Delayblink); digitalWrite(WalkGreenA, LOW);delay(Delayblink);digitalWrite(WalkGreenA, HIGH);delay(Delayblink); digitalWrite(WalkGreenA, LOW);digitalWrite(WalkRedA, HIGH);delay(Delayblink);digitalWrite(GreenA, LOW);digitalWrite(YellowA, HIGH);delay(Delayyellow);digitalWrite(YellowA, LOW);digitalWrite(RedA, HIGH);// Button B pressed // delay(Delayyellow);digitalWrite(YellowB, HIGH);digitalWrite(WalkGreenB, HIGH);delay(Delayyellow);digitalWrite(YellowB, LOW);digitalWrite(GreenB, HIGH);delay(Delaywalkgreen);digitalWrite(WalkGreenB, LOW);delay(Delayblink);digitalWrite(WalkGreenB, HIGH);delay(Delayblink);digitalWrite(WalkGreenB, LOW);delay(Delayblink);digitalWrite(WalkGreenB, HIGH);delay(Delayblink);digitalWrite(WalkGreenB, LOW);delay(Delayblink);digitalWrite(WalkGreenB, HIGH);delay(Delayblink);digitalWrite(WalkGreenB, LOW);delay(Delayblink);digitalWrite(WalkGreenB, HIGH);delay(Delayblink);digitalWrite(WalkGreenB, LOW);delay(Delayblink);digitalWrite(WalkGreenB, HIGH);delay(Delayblink); digitalWrite(WalkGreenB, LOW);delay(Delayblink);digitalWrite(WalkGreenB, HIGH);delay(Delayblink); digitalWrite(WalkGreenB, LOW);digitalWrite(WalkRedB, HIGH);delay(Delayblink);digitalWrite(GreenB, LOW);digitalWrite(YellowB, HIGH);delay(Delayyellow);digitalWrite(YellowB, LOW);digitalWrite(RedB, HIGH); Lenke til kommentar
Karl Skapeland Skrevet 23. mai 2014 Del Skrevet 23. mai 2014 Den "normale" loopen din tar jo 4 minutter å kjøre. Det er ikke mulig å reagere på knapper i løpet av denne tiden. Du kunne jo "krydret" loopen med flere avlesninger av knapper, men det er heller ingen god løsning. Du bør sette deg inn i begrepet Finite State Machine (FSM), som er bedre egnet til problemer som dette. Du finner et trafikklys-eksempel som benytter FSM her: http://www.geekrant.org/2013/06/23/traffic-light-and-pedestrian-crossing-implemented-with-an-arduino/ 1 Lenke til kommentar
Kimlorentz Skrevet 26. mai 2014 Forfatter Del Skrevet 26. mai 2014 Det skal jeg ta en titt på. Takk skal du ha. skal legge ut full kode og video link når jeg har fått det til:) Vil nok ta noen uker med mitt nåværende kunnskaps nivå Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå