Paso 1: El código
Así que el código es muy simple y funciona muy bien acabo de leer a través del código y dentro de la codificación lo explica sí mismo. A adaptar el código para lo que usted está utilizando para. Se necesita el programa de Arduino que puede conseguirlo aquí @ Arduino. (actualización): me olvide de decirte para que funcione con zorra necesita abrir vixen y cambie la configuración de puerto para enviar un encabezado de vixen para detener modo aleatorio e iniciar la secuencia. sólo hay que poner esto ~! en la cabecera.
solo copiar y pegar o descargar
Esto fue escrito por Danlarocco. Esto es para 24SSRs y arduino Mega pero puede ser adaptado a cualquier Arduino.
Para adaptar el código a tu caso, solo tienes que cambiar esta parte superior, con las líneas #define. Incluye el watchdog timer biblioteca #include
Esto establece los canales vixen enviará. Puede ajustarse a cualquier número de 1 a 48 para Arduino Mega y 1 a 18 para Arduino Uno.
#define CHANNEL_COUNT 24
velocidad del puerto com para hablar con vixen. De 9600 a 115200. Usa la misma velocidad como conjunto en Vixen.
#define VIXEN_COM_SPEED 57600
Tiempo de espera de entrada en serie antes de pasar al modo aleatorio (en milisegundos) de espera.
#define para TIME_OUT 10000
Si los relés de encender y apagar frente a secuencia de Vixen.
#define NOT_INVERTED 0
#define invertido 1
#define modo NOT_INVERTED
que los pernos que canales de control
Puede cambiar estas asignación para utilizar clavijas diferentes. Encontré que eso perno 13.20 y 21 no funcionan en mi mega. Parece que encendida para siempre.
No utilice ping 0 y 1, como los son para que el puerto serie hablar con el ordenador.
#define CH01 2
#define CH02 3
#define CH03 4
#define CH04 5
#define CH05 6
#define CH06 7
#define CH07 8
#define CH08 9
#define CH09 10
#define CH10 11
#define CH11 12
#define CH12 32
#define CH13 33
#define CH14 34
#define CH15 22
#define CH16 23
#define CH17 24
#define CH18 25
#define CH19 26
#define CH20 27
#define CH21 28
#define CH22 29
#define CH23 30
#define CH24 31
canales de int [] = {CH01, CH02, CH03, CH04, CH05, CH06, CH07, CH08, CH09, CH10, CH11, CH12, CH13, CH14, CH15, CH16, CH17, CH18, CH19, CH20, CH21, CH22, CH23, CH24};
int incomingByte [CHANNEL_COUNT];
int i = 0;
Lazo Contador volátil sin firmar largo timer_a = 0;
nueva línea de
configurar los pines / entradas y salidas de void setup() {}
activar al temporizador de vigilante con un tiempo de 1 segundo. Si la Junta se congela, se se restablecerá después de 1 segundo. wdt_enable(WDTO_1S);
específicamente para la ONU sei();
initalize canales de PWM / Pins para (i = 0; i < CHANNEL_COUNT; i ++) {pinMode (salida canales [i]);}
configurar todos los equipos en off para comenzar con si (modo == NOT_INVERTED) {para (i = 0; i < CHANNEL_COUNT; i ++) {digitalWrite (canales [i], LOW);
} }
otro {para (i = 0; i < CHANNEL_COUNT; i ++) {digitalWrite (canales [i], HIGH);}}
testSequence();
establecer la serie según la velocidad definida anteriormente.
Serial.Begin(VIXEN_COM_SPEED); }
void loop() {si (Serial.available() > = (CHANNEL_COUNT + 2)) {wdt_reset();
restablece el dispositivo de vigilancia
timer_a = millis ();
nueva línea de
int uno = Serial.read(); Si (uno == 126) {int dos = Serial.read(); if (dos == 33) {para (i = 0; i < CHANNEL_COUNT; i ++) {}
leer cada byte
incomingByte [i] = Serial.read(); } Si (modo == NOT_INVERTED) {para (me = 0; i < CHANNEL_COUNT; i ++) {int valor = incomingByte [i]; si (valor < = 127) {digitalWrite (canales [i], LOW);} else {digitalWrite (canales [i], HIGH);}}} más {para (me = 0; me < CHANNEL_COUNT; i ++) {int valor = incomingByte [i]; si (valor < 127) {digitalWrite (canales [i], HIGH);} else {digitalWrite (canales [i], LOW);}}}
} } }
Código de modo aleatorio. Comienza el modo al azar si no hay entrada en serie ha sido recibida en para TIME_OUT millisenconds else {wdt_reset();
restablece el dispositivo de vigilancia
sin firmar largo diff = millis() - timer_a; Si (diff > = para TIME_OUT) {timer_a = millis (); int random_a = 0; para (i = 0; i < CHANNEL_COUNT; i ++) {random_a = random (0, 2); si (random_a == 0) {digitalWrite (canales [i], LOW);} else {digitalWrite (canales [i], HIGH);}}}} }
void testSequence() {}
Si (modo == NOT_INVERTED) {para (i = 0; i < CHANNEL_COUNT; i ++) {wdt_reset();
restablece el dispositivo de vigilancia
digitalWrite (canales [i], HIGH); Delay (500); digitalWrite (canales [i], LOW); } }
otro {para (i = 0; i < CHANNEL_COUNT; i ++) {wdt_reset(); / / restablece el vigilante digitalWrite (canales [i], LOW); delay (500); digitalWrite (canales [i], HIGH);}}}