Etape 1: Le Code
Si c’est le code c’est très simple et fonctionne très bien il suffit de lire le code et à l’intérieur de la codification, il expliquera lui-même. Juste adapter le code pour ce que vous l’utilisez pour. Vous avez besoin du programme Arduino, que vous pouvez l’obtenir ici @ Arduino. (mise à jour): J’ai oublié de te dire pour que cela fonctionne vous devez ouvrir la renarde et modifiez les paramètres de port pour envoyer un en-tête de vixen pour arrêter le mode aléatoire et commencer votre séquence de Vixen. Il suffit de mettre ce ~ ! dans l’en-tête.
juste copier et coller ou télécharger
Cela a été écrit par Danlarocco. C’est pour 24SSRs et arduino Mega mais il peut être adapté à n’importe quel Arduino.
Pour adapter le code à votre cas, il suffit de changer cette partie supérieure, avec les lignes #define. Inclut la bibliothèque de timer chien de garde #include
Ceci définit le nombre de canaux renarde enverra. Peut être sur n’importe quel nombre de 1 à 48 pour Arduino Mega et 1 à 18 pour Arduino Uno.
#define CHANNEL_COUNT 24
Vitesse du port com pour parler avec vixen. De 9600 à 115200. Utilisez la même vitesse comme indiqué dans la renarde.
#define VIXEN_COM_SPEED 57600
Délai d’attente avant d’aller au mode de lecture aléatoire (en millisecondes) d’attente pour l’entrée série.
#define TIME_OUT 10000
Si les relais allumer et éteindre en face de la séquence de Vixen.
#define NOT_INVERTED 0
#define inversé 1
#define NOT_INVERTED de MODE
Quelles broches contrôlent quels canaux
Vous pouvez modifier ces affectation pour utiliser différentes broches. J’ai trouvé que la broche 13,20 et 21 ne fonctionnent pas sur mon méga. Ils semblent rester pour toujours.
N’utilisez pas de pings 0 et 1, comme ceux qui sont pour le port série parler à l’ordinateur.
#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
les canaux int [] = {CH01, CH02, CH03, CH04, CH05, CH06, CH07, CH08, CH09, CH10, CH11, CH12, CH13, CH14, CH15, C16, CH17, CH18, CH19, CH20, CH21, CH22, CH23, CH24} ;
int incomingByte [CHANNEL_COUNT] ;
int i = 0 ;
Boucle de compteur volatils unsigned long timer_a = 0 ;
nouvelle ligne
configurer les broches / entrées et sorties void setup() {}
activer le temporisateur avec un temps de 1 seconde. Si le jury se fige, il se remet en marche après 1 seconde. wdt_enable(WDTO_1S) ;
spécialement pour le sei() UNO ;
initialiser canaux PWM / Pins pour (i = 0; j’ai < CHANNEL_COUNT; i ++) {pinMode (canaux [i], sortie);}
tous les realys OFF d’abord si la valeur (MODE == NOT_INVERTED) {pour (i = 0; j’ai < CHANNEL_COUNT; i ++) {digitalWrite (canaux [i], LOW) ;
} }
d’autre {pour (i = 0; i < CHANNEL_COUNT; i ++) {digitalWrite (canaux [i], HIGH);}}
testSequence() ;
mettre en place la série selon la vitesse définie ci-dessus.
Serial.Begin(VIXEN_COM_SPEED) ; }
void loop() {si (Serial.available() > = (CHANNEL_COUNT + 2)) {wdt_reset() ;
réinitialise le chien de garde
timer_a = millis () ;
nouvelle ligne
uno int = Serial.read() ; Si (uno == 126) {int dos = Serial.read() ; if (dos == 33) {pour (i = 0; j’ai < CHANNEL_COUNT; i ++) {}
lire chaque octet
incomingByte [i] = Serial.read() ; } Si (MODE == NOT_INVERTED) {pour (j’ai = 0; j’ai < CHANNEL_COUNT; i ++) {int valeur = incomingByte [i]; if (valeur < = 127) {digitalWrite (canaux [i], LOW);} else {digitalWrite (canaux [i], HIGH);}}} else {pour (j’ai = 0; j’ai < CHANNEL_COUNT; i ++) {int valeur = incomingByte [i]; if (valeur < 127) {digitalWrite (canaux [i], HIGH);} else {digitalWrite (canaux [i], LOW);}}}
} } }
Code en mode aléatoire. Mode aléatoire démarre si aucune entrée de série n’a été reçue en TIME_OUT millisenconds else {wdt_reset() ;
réinitialise le chien de garde
unsigned long diff = millis() - timer_a ; Si (diff > = TIME_OUT) {timer_a = millis (); int random_a = 0; pour (i = 0; j’ai < CHANNEL_COUNT; i ++) {random_a = aléatoire (0, 2); if (random_a == 0) {digitalWrite (canaux [i], LOW);} else {digitalWrite (canaux [i], HIGH);}}}} }
void testSequence() {}
Si (MODE == NOT_INVERTED) {pour (i = 0; i < CHANNEL_COUNT; i ++) {wdt_reset() ;
réinitialise le chien de garde
digitalWrite (canaux [i], HIGH) ; retard (500) ; digitalWrite (canaux [i], LOW) ; } }
d’autre {pour (i = 0; j’ai < CHANNEL_COUNT; i ++) {wdt_reset(); / / réinitialise le chien de garde digitalWrite (canaux [i], LOW); retard (500); digitalWrite (canaux [i], HIGH);}}}