Paso 3: codificación
Pop Quiz: en el video, qué sección del código se ejecuta como se activa el interruptor. Pista, comienza con el interruptor en la posición uno y mueva el interruptor secuencialmente de 1 a 5 y luego recto detrás a 1 en el final. Sin embargo, las secciones de código no son secuenciales; IE: posición 1 no ejecuta el código en la sección etiquetado 1 en el bosquejo. Te voy a dar este uno - posición 1 = CA: en el bosquejo y CA: es la última sección en el bosquejo, no el primero como uno podría sospechar.
La forma tiene este trabajo es verificar los pines analógicos (2-6) para el voltaje del interruptor rotatorio. Yo no se molestó con cualquier suposición matemática o cualquier otra cosa aquí. Después de monitorear las clavijas de que vi que siempre registrados un número alrededor 20-30 excepto el pasador que del interruptor era actualmente voltaje a. Que la clavija sería alrededor de unos 500-600 (lo sentimos, no recuerdo el número exacto). Así que solo tengo la apariencia de código para un perno que > 200 y vuelva a ejecutar la correspondiente sección de código que quiero para esa posición.
Bosquejo de cuadro control para control de tráfico ARROWSTIK luz bar, escrito por Bradley S. Worthington-White
DEFINICIÓN DE CONSTANTES
Los relés de uso son normalmente cerrados, R_ON & R_OFF a continuación realizar el boceto un poco más fácil, escritura inversa R_ON R_OFF para relés normalmente abiertos
const int R_ON = bajo; Relé de encendido
const int R_OFF = alto; Relé apagado
definir números de pines para las luces en la barra de luces
const int rápido = 2; Flecha izquierda (una luz)
const int LCARGO = 3; Izquierda dos luces exteriores
const int centro = 4; Centro dos luces
const int RTwo = 5; Derecha dos luces exteriores
const int RArrow = 6; Flecha (una luz) derecha
DEFINICIÓN DE VARIABLES
la waittime(s) a continuación se cambia dentro de las secciones individuales del bosquejo según corresponda
waittime int; waittime
int waittime2; segundo waittime
int waittime3; y un tercer waittime
void setup()
{
asegurar que todas las luces están apagados en el inicio o reinicio
digitalWrite (RArrow, R_OFF);
digitalWrite (RTwo, R_OFF);
digitalWrite (centro, R_OFF);
digitalWrite (LCARGO, R_OFF);
digitalWrite (rápido, R_OFF);
configurar pin digital modos para la conmutación de los relés
pinMode (RArrow, salida);
pinMode (RTwo, salida);
pinMode (centro, salida);
pinMode (LCARGO, salida);
pinMode (rápido, salida);
configurar modos pin analógico de entrada desde el selector de 5 posiciones
pinMode (A1, entrada);
pinMode (A2, entrada);
pinMode (A3, entrada);
pinMode (A4, entrada);
pinMode (A5, entrada);
}
void loop()
{
Asegúrese de que el valor de todos los pines analógicos es cero (0) en el inicio o reinicio
analogWrite(A1,0);
analogWrite(A2,0);
analogWrite(A3,0);
analogWrite(A4,0);
analogWrite(A5,0);
Interruptor: / / Lee la posición del interruptor y va a la sección marcada en el dibujo que se aplica
Si (analogRead(A1) > 200) goto CA1;
else if (analogRead(A2) > 200) goto LA1;
else if (analogRead(A3) > 200) goto RA1;
else if (analogRead(A4) > 200) goto AL1;
else if (analogRead(A5) > 200) goto KR1;
KR1: //Knight Rider
definición de waittime(s) de esta secuencia
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 interruptor; cada sección siempre vuelve a cambiar para comprobar si ha cambiado la posición del interruptor
LA1: secuencia de dirección de //LEFT
waittime = (125); definición de waittime(s) de esta secuencia
waittime2 = (200);
waittime3 = (50);
digitalWrite (RTwo, R_ON); comienza encendiendo luces en secuencia de izquierda a derecha
Delay(waittime);
digitalWrite (centro, R_ON);
Delay(waittime);
digitalWrite (LCARGO, R_ON);
Delay(waittime);
digitalWrite (rápido, R_ON);
Delay(waittime);
digitalWrite (rápido, R_OFF); Después de todo, flecha izquierda parpadea luces en
Delay(waittime2);
digitalWrite (rápido, R_ON);
Delay(waittime2);
digitalWrite (rápido, R_OFF);
Delay(waittime2);
digitalWrite (rápido, R_ON);
Delay(waittime2);
digitalWrite (rápido, R_OFF);
luces de giro, de derecha a izquierda - rápidamente
digitalWrite (RTwo, R_OFF);
Delay(waittime3);
digitalWrite (centro, R_OFF);
Delay(waittime3);
digitalWrite (LCARGO, R_OFF);
Delay(waittime3);
Goto interruptor; Vuelva a verificar la posición del interruptor
RA1: / secuencia de la dirección a la derecha
waittime = (125); definición de waittime(s) de esta secuencia
waittime2 = (200);
waittime3 = (50);
comienza encendiendo luces en secuencia de izquierda a derecha
digitalWrite (LCARGO, R_ON);
Delay(waittime);
digitalWrite (centro, R_ON);
Delay(waittime);
digitalWrite (RTwo, R_ON);
Delay(waittime);
digitalWrite (RArrow, R_ON);
Delay(waittime);
Después de todo, flecha derecha parpadea luces en
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);
luces de giro, de izquierda a derecha - rápidamente
digitalWrite (LCARGO, R_OFF);
Delay(waittime3);
digitalWrite (centro, R_OFF);
Delay(waittime3);
digitalWrite (RTwo, R_OFF);
Delay(waittime3);
Goto interruptor; Vuelva a verificar la posición del interruptor
AL1: / / intermitente secuencia con luz de centro en constante y LCARGO y RTwo intermitente en ambos lados del centro de
waittime = (125); definición de waittime(s) de esta secuencia
waittime2 = (50);
Si (centro == LOW) goto cont; evita jugar con la luz de centro después de que sea
digitalWrite(Center,R_ON);
Cont:
digitalWrite (LCARGO, R_ON);
Delay(waittime);
digitalWrite (LCARGO, 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 interruptor; Vuelva a verificar la posición del interruptor
CA1: / / luces en constante (no intermitente), la flecha se enciende en cada estancia de fin de
waittime = (10); definición de waittime(s) de esta secuencia, inmediatamente para la estabilidad
digitalWrite (centro, R_ON);
Delay(waittime);
digitalWrite (LCARGO, R_ON);
Delay(waittime);
digitalWrite (RTwo, R_ON);
Delay(waittime);
Delay(1000); espera un segundo antes de verificar nuevamente la posición del interruptor
Goto interruptor; control de posición, pero usted sabía que por saber
} / / Final