Stap 3: codering
Pop Quiz: In de video, welke sectie van code wordt uitgevoerd als de schakelaar is ingeschakeld. Aanwijzing, het begint met de schakelaar in positie en ik Verplaats de schakeloptie opeenvolgend van 1 naar 5 en vervolgens rechtstreeks terug naar 1 aan het eind. De delen van de code zijn echter niet opeenvolgende; IE: positie 1 voert de code onder de 1e gelabelde sectie in de schets schakelaar. Ik geef je deze een - positie 1 schakelaar = CA: in de schets, en CA: is de laatste sectie in de schets, niet de eerste als een mogelijk vermoeden.
De manier waarop ik dit werkend heb is het controleren van de analoge pinnen (2-6) voor de spanning van de roterende schakelaar. Ik heb niet de moeite met een fancy math of iets hier. Na controle van de pinnen zag ik dat ze altijd een aantal rond geregistreerd voedingsspanning 20-30 met uitzondering van de pin die de schakeloptie was momenteel aan. Die pincode zou rond iets als 500-600 (sorry, weet niet het exacte aantal). Dus ik heb net de code zoekt een pin thats > 200 en voer de bijbehorende sectie met code die ik wil voor die positie schakelaar.
Controle vak schets voor ARROWSTIK verkeersgeleiding lichte bar, geschreven door Bradley S. Worthington-White
DEFINIËREN VAN CONSTANTEN
Het Relais in gebruik zijn normaal gesloten, R_ON & R_OFF hieronder maken het schrijven van de schets een beetje makkelijker, omgekeerde R_ON en R_OFF voor normaal open relays
Const int R_ON = laag; Relay ON
Const int R_OFF = hoog; Relais uit
definiëren van pincodes voor de lichten in de lichte bar
Const int LArrow = 2; Pijl-links (een licht)
Const int LTwo = 3; Links van de twee buitenste lichten
Const int Center = 4; Twee lichten centreren
Const int RTwo = 5; Rechts van de twee buitenste lichten
Const int RArrow = 6; (Een licht) pijl-rechts
VARIABELEN DEFINIËREN
de waittime(s) hieronder worden gewijzigd binnen de afzonderlijke secties van de schets als passende
int waittime; waitTime
int waittime2; tweede waittime
int waittime3; en een derde waittime
VOID Setup
{
houden alle lichten uit bij het opstarten of reset
digitalWrite (RArrow, R_OFF);
digitalWrite (RTwo, R_OFF);
digitalWrite (Center, R_OFF);
digitalWrite (LTwo, R_OFF);
digitalWrite (LArrow, R_OFF);
digitale pin modi voor het schakelen van de Relais
pinMode (RArrow, uitvoer);
pinMode (RTwo, uitvoer);
pinMode (Center, uitvoer);
pinMode (LTwo, uitvoer);
pinMode (LArrow, uitvoer);
analoge pin modi voor ingang van de draaischakelaar 5 positie
pinMode (A1, INPUT);
pinMode (A2, INPUT);
pinMode (A3, INPUT);
pinMode (A4, INPUT);
pinMode (A5, INPUT);
}
void loop
{
zorgen dat de waarde van alle analoge pinnen is nul (0) bij het opstarten of op beginstand zetten
analogWrite(A1,0);
analogWrite(A2,0);
analogWrite(A3,0);
analogWrite(A4,0);
analogWrite(A5,0);
Schakelaar: / / de positie schakelaar leest en gaat naar de gelabelde sectie in de schets die van toepassing is
Als (analogRead(A1) > 200) goto CA1;
anders als (analogRead(A2) > 200) goto LA1;
anders als (analogRead(A3) > 200) goto RA1;
anders als (analogRead(A4) > 200) goto AL1;
anders als (analogRead(A5) > 200) goto KR1;
KR1: //Knight Rider
waittime(s) voor deze volgorde definiëren
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);
goto Switch; elke sectie retourneert altijd om over te schakelen om te controleren of de positie van de switch is gewijzigd
LA1: //LEFT richting volgorde
waitTime = (125); waittime(s) voor deze volgorde definiëren
waittime2 = (200);
waittime3 = (50);
digitalWrite (RTwo, R_ON); begint door te schakelen verlichting in volgorde van links naar rechts
delay(waitTime);
digitalWrite (Center, R_ON);
delay(waitTime);
digitalWrite (LTwo, R_ON);
delay(waitTime);
digitalWrite (LArrow, R_ON);
delay(waitTime);
digitalWrite (LArrow, R_OFF); Pijl-links-flitsers licht immers op
delay(waittime2);
digitalWrite (LArrow, R_ON);
delay(waittime2);
digitalWrite (LArrow, R_OFF);
delay(waittime2);
digitalWrite (LArrow, R_ON);
delay(waittime2);
digitalWrite (LArrow, R_OFF);
draaien lichten uit, van rechts naar links - snel
digitalWrite (RTwo, R_OFF);
delay(waittime3);
digitalWrite (Center, R_OFF);
delay(waittime3);
digitalWrite (LTwo, R_OFF);
delay(waittime3);
goto Switch; gecontroleerd of er switch positie
RA1: / / rechts richting volgorde
waitTime = (125); waittime(s) voor deze volgorde definiëren
waittime2 = (200);
waittime3 = (50);
begint door te schakelen verlichting in volgorde van links naar rechts
digitalWrite (LTwo, R_ON);
delay(waitTime);
digitalWrite (Center, R_ON);
delay(waitTime);
digitalWrite (RTwo, R_ON);
delay(waitTime);
digitalWrite (RArrow, R_ON);
delay(waitTime);
Pijl-rechts flitsen immers licht op
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);
draaien lichten uit, van links naar rechts - snel
digitalWrite (LTwo, R_OFF);
delay(waittime3);
digitalWrite (Center, R_OFF);
delay(waittime3);
digitalWrite (RTwo, R_OFF);
delay(waittime3);
goto Switch; gecontroleerd of er switch positie
AL1: / / knipperen opeenvolging met Center licht op stabiele en LTwo en RTwo knippert aan beide zijden van het Center
waitTime = (125); waittime(s) voor deze volgorde definiëren
waittime2 = (50);
Als (Center == LOW) goto cont; vermijdt spelen met het center licht na het brandt
digitalWrite(Center,R_ON);
CONT:
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);
goto Switch; gecontroleerd of er switch positie
CA1: / / licht op stationaire (niet knippert), de pijl licht op elk einde verblijf af
waitTime = (10); definiëren van de waittime(s) voor deze reeks, slechts een korte vertraging voor stabiliteit
digitalWrite (Center, R_ON);
delay(waitTime);
digitalWrite (LTwo, R_ON);
delay(waitTime);
digitalWrite (RTwo, R_ON);
delay(waitTime);
delay(1000); wacht een seconde voordat de switch positie opnieuw te controleren
goto Switch; controle van de switch positie, maar u wist dat door weet
} / / Het einde