Lightstik Light bar Controller (3 / 4 steg)
Steg 3: kodning
Pop Quiz: I videon, vilken del av koden körs som brytaren vrids. Ledtråd, det börjar med växeln i position och jag flytta växeln sekventiellt från 1 till 5 och sedan rakt tillbaka till 1 i slutet. Delar av koden är dock inte sekventiell; IE: växla läge 1 körs inte koden under avsnittet 1 märkt i skissen. Jag ger dig här en - växla läge 1 = CA: i skiss och CA: är sista avsnittet i skissen, kanske inte först som en misstänkt.
Hur jag få detta arbetar är att kontrollera de analoga stift (2-6) för spänningen från rotary switch. Jag brydde mig inte med några fancy matematik eller något här. När du har övervakat stiften såg jag att de alltid registrerade flera runt matarspänning 20-30 utom stiftet växeln var för närvarande till. Det klämmer fast skulle vara runt ungefär 500-600 (tyvärr, minns inte exakt hur många). Så jag har bara den kod leta efter en nål som är > 200 och sedan köra den motsvarande del av koden jag vill ha för att byta position.
Control box skiss för ARROWSTIK trafikkontroll ljus bar, skriven av Bradley S. Worthington-White
DEFINIERAR KONSTANTER
Reläer används är normalt stängda, R_ON & R_OFF nedan gör skriva skissa lite lättare, omvänd R_ON och R_OFF för normalt öppen reläer
CONST int R_ON = låg; Relä på
CONST int R_OFF = hög; Relä OFF
definiera pin-koder för ljus i light bar
CONST int LArrow = 2; Vänsterpil (en ljus)
CONST int LTwo = 3; Lämnat två yttre lampor
CONST int Center = 4; Centrera två lampor
CONST int RTwo = 5; Just två yttre lampor
CONST int RArrow = 6; Högerpil (en ljus)
DEFINIERA VARIABLER
waittime(s) nedan ändras inom de enskilda delarna av skissen som lämpliga
int waittime; waitTime
int waittime2; andra waittime
int waittime3; och en tredje waittime
void setup()
{
se till att alla lampor är släckta vid start eller Återställ
digitalWrite (RArrow, R_OFF);
digitalWrite (RTwo, R_OFF);
digitalWrite (Center, R_OFF);
digitalWrite (LTwo, R_OFF);
digitalWrite (LArrow, R_OFF);
ställa in digital pin lägen för att växla reläer
pinMode (RArrow, OUTPUT);
pinMode (RTwo, OUTPUT);
pinMode (Center, OUTPUT);
pinMode (LTwo, OUTPUT);
pinMode (LArrow, OUTPUT);
ställa in analoga pin lägen för input från 5 position rotary switch
pinMode (A1, indata);
pinMode (A2, indata);
pinMode (A3, indata);
pinMode (A4, indata);
pinMode (A5, indata);
}
void loop()
{
se till att alla analoga stift värdet noll (0) vid start eller återställa
analogWrite(A1,0);
analogWrite(A2,0);
analogWrite(A3,0);
analogWrite(A4,0);
analogWrite(A5,0);
Växel: / / läser switch position och går till avsnittet märkt i skiss som gäller
om (analogRead(A1) > 200) goto CA1;
annars om (analogRead(A2) > 200) goto LA1;
annars om (analogRead(A3) > 200) goto RA1;
annars om (analogRead(A4) > 200) goto AL1;
annars om (analogRead(A5) > 200) goto KR1;
KR1: //Knight Rider
definiera waittime(s) för denna sekvens
waitTime = 75.
waittime2 = 25;
digitalWrite(LArrow,R_ON);
Delay(waitTime);
digitalWrite(LTwo,R_ON);
Delay(waittime2);
digitalWrite(LArrow,R_OFF);
Delay(waitTime);
digitalWrite(Center,R_ON);
Delay(waittime2);
digitalWrite(LTwo,R_OFF);
Delay(waitTime);
digitalWrite(RTwo,R_ON);
Delay(waittime2);
digitalWrite(Center,R_OFF);
Delay(waitTime);
digitalWrite(RArrow,R_ON);
Delay(waittime2);
digitalWrite(RTwo,R_OFF);
Delay(waitTime);
digitalWrite(RTwo,R_ON);
Delay(waittime2);
digitalWrite(RArrow,R_OFF);
Delay(waitTime);
digitalWrite(Center,R_ON);
Delay(waittime2);
digitalWrite(RTwo,R_OFF);
Delay(waitTime);
digitalWrite(LTwo,R_ON);
Delay(waittime2);
digitalWrite(Center,R_OFF);
Delay(waitTime);
digitalWrite(LArrow,R_ON);
Delay(waittime2);
digitalWrite(LTwo,R_OFF);
Delay(waitTime);
digitalWrite(LArrow,R_OFF);
gå till Switch; varje avsnitt returnerar alltid växla för att kontrollera om switch ställning har förändrats
LA1: //LEFT riktning sekvens
waitTime = (125); definiera waittime(s) för denna sekvens
waittime2 = (200);
waittime3 = (50);
digitalWrite (RTwo, R_ON); börjar genom att aktivera lampor i följd från vänster till höger
Delay(waitTime);
digitalWrite (Center, R_ON);
Delay(waitTime);
digitalWrite (LTwo, R_ON);
Delay(waitTime);
digitalWrite (LArrow, R_ON);
Delay(waitTime);
digitalWrite (LArrow, R_OFF); Vänsterpil blinkar ju lights på
Delay(waittime2);
digitalWrite (LArrow, R_ON);
Delay(waittime2);
digitalWrite (LArrow, R_OFF);
Delay(waittime2);
digitalWrite (LArrow, R_ON);
Delay(waittime2);
digitalWrite (LArrow, R_OFF);
roterande ljus, från höger till vänster - snabbt
digitalWrite (RTwo, R_OFF);
Delay(waittime3);
digitalWrite (Center, R_OFF);
Delay(waittime3);
digitalWrite (LTwo, R_OFF);
Delay(waittime3);
gå till Switch; Kontrollera växeln position
RA1: / / höger riktning sekvens
waitTime = (125); definiera waittime(s) för denna sekvens
waittime2 = (200);
waittime3 = (50);
börjar genom att aktivera lampor i följd från vänster till höger
digitalWrite (LTwo, R_ON);
Delay(waitTime);
digitalWrite (Center, R_ON);
Delay(waitTime);
digitalWrite (RTwo, R_ON);
Delay(waitTime);
digitalWrite (RArrow, R_ON);
Delay(waitTime);
HÖGERPIL blinkar ju lights på
digitalWrite (RArrow, R_OFF);
Delay(waittime2);
digitalWrite (RArrow, R_ON);
Delay(waittime2);
digitalWrite (RArrow, R_OFF);
Delay(waittime2);
digitalWrite (RArrow, R_ON);
Delay(waittime2);
digitalWrite (RArrow, R_OFF);
roterande ljus, från vänster till höger - snabbt
digitalWrite (LTwo, R_OFF);
Delay(waittime3);
digitalWrite (Center, R_OFF);
Delay(waittime3);
digitalWrite (RTwo, R_OFF);
Delay(waittime3);
gå till Switch; Kontrollera växeln position
AL1: / / blinkande sekvens med Center ljus på stadig och LTwo och RTwo blinkar på båda sidor av Center
waitTime = (125); definiera waittime(s) för denna sekvens
waittime2 = (50);
om (Center == låg) gå till cont; undviker spelar med center ljuset efter det är på
digitalWrite(Center,R_ON);
Forts:
digitalWrite (LTwo, R_ON);
Delay(waitTime);
digitalWrite (LTwo, R_OFF);
Delay(waittime2);
digitalWrite(LTwo,R_ON);
Delay(waitTime);
digitalWrite(LTwo,R_OFF);
Delay(waittime2);
digitalWrite (RTwo, R_ON);
Delay(waitTime);
digitalWrite (RTwo, R_OFF);
Delay(waittime2);
digitalWrite (RTwo, R_ON);
Delay(waitTime);
digitalWrite (RTwo, R_OFF);
Delay(waittime2);
gå till Switch; Kontrollera växeln position
CA1: / / belysning på steady (ingen blinkar), pil lamporna på varje slutet vistelse utanför
waitTime = (10); definiera waittime(s) för denna sekvens, bara en kort fördröjning för stabilitet
digitalWrite (Center, R_ON);
Delay(waitTime);
digitalWrite (LTwo, R_ON);
Delay(waitTime);
digitalWrite (RTwo, R_ON);
Delay(waitTime);
Delay(1000); väntar en sekund innan kontrollera switch position igen
gå till Switch; Kontrollera växeln position, men du visste att av vet
} / / Slutet