Stap 1: De Code
Dus zal dit is de code het is heel eenvoudig en werkt geweldig net gelezen door de code en binnen de codering het uitleggen zelf. Net passen de code voor wat u gebruikt voor. Heb je de Arduino-programma die kunt u het hier @ Arduino. (update): ik vergat te vertellen u om dit te laten werken met de "Vixen" u moet "Vixen" openen en wijzigen van de instellingen van de poort voor het verzenden van een header van de "Vixen" stoppen van willekeurige modus en starten uw reeks. uitsluitend premieaffaires te ontvangen dit ~! in de kop.
gewoon kopiëren en plakken of downloaden
Dit werd geschreven door Danlarocco. Dit is voor 24SSRs en arduino Mega maar het kan worden aangepast aan een Arduino.
Aan te passen de code aan uw geval, verander gewoon deze bovengedeelte, met de #define lijnen. De watchdog timer bibliotheek #include bevat
Hiermee wordt ingesteld hoeveel kanalen zal "Vixen" sturen. Kan worden ingesteld op een getal van 1 tot en met 48 voor Arduino Mega en 1 tot en met 18 voor Arduino Uno.
#define CHANNEL_COUNT 24
snelheid voor de com-poort voor het gesprek met de "Vixen". Van 9600 tot 115200. Gebruik dezelfde snelheid als bedoeld in de "Vixen".
#define VIXEN_COM_SPEED 57600
Timeout wachten voor seriële input voordat u naar willekeurige modus (in milliseconden).
#define TIME_OUT 10000
Als het Relais aan en uit tegenover de "Vixen" reeks zetten.
#define NOT_INVERTED 0
#define omgekeerde 1
#define modus NOT_INVERTED
welke pinnen bepalen welke kanalen
U kunt deze toewijzing voor het gebruik van verschillende pennen wijzigen. Ik vond dat pin 13,20 en 21 niet werken op mijn mega. Ze lijken te blijven voor altijd.
Gebruik geen pings 0 en 1, zoals die zijn voor de seriële poort om te praten met de computer.
#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
int kanalen [] = {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;
Lus teller vluchtige unsigned long timer_a = 0;
nieuwe lijn
opstelling van de pinnen / ingangen & uitgangen void setup {}
inschakelen van de watchdog-timer met een tijd van 1 seconde. Als de Raad van bestuur bevriest, wordt het gereset zelf na 1 seconde. wdt_enable(WDTO_1S);
speciaal voor de UNO sei();
initialiseren PWM kanalen / Pins voor (ik = 0; ik < CHANNEL_COUNT; i ++) {pinMode (kanalen [i], OUTPUT);}
Stel alle Interbuild op uit om mee te beginnen als (modus == NOT_INVERTED) {voor (ik = 0; ik < CHANNEL_COUNT; i ++) {digitalWrite (kanalen [i], laag);
} }
else {voor (ik = 0; ik < CHANNEL_COUNT; i ++) {digitalWrite (kanalen [i], hoge);}}
testSequence();
Serial instellen volgens de snelheid hierboven omschreven.
Serial.begin(VIXEN_COM_SPEED); }
void loop {als (Serial.available() > = (CHANNEL_COUNT + 2)) {wdt_reset();
Hiermee stelt u de watchdog
timer_a = millis ();
nieuwe lijn
int uno = Serial.read(); Als (uno == 126) {dos int Serial.read(); = als (dos == 33) {voor (ik = 0; ik < CHANNEL_COUNT; i ++) {}
Lees elke byte
incomingByte [i] = Serial.read(); } Als (modus == NOT_INVERTED) {voor (ik = 0; ik < CHANNEL_COUNT; i ++) {int waarde = incomingByte [i]; if (waarde < = 127) {digitalWrite (kanalen [i], laag);} else {digitalWrite (kanalen [i], hoge);}}} anders {voor (ik = 0; ik < CHANNEL_COUNT; i ++) {int waarde = incomingByte [i]; if (waarde < 127) {digitalWrite (kanalen [i], hoge);} else {digitalWrite (kanalen [i], laag);}}}
} } }
De code van de Random mode. Willekeurige modus wordt gestart als geen seriële input heeft ontvangen in TIME_OUT millisenconds anders {wdt_reset();
Hiermee stelt u de watchdog
niet-ondertekende lange diff = millis() - timer_a; Als (diff > = TIME_OUT) {timer_a = millis (); int random_a = 0; voor (ik = 0; ik < CHANNEL_COUNT; i ++) {random_a = willekeurige (0, 2), als (random_a == 0) {digitalWrite (kanalen [i], laag);} else {digitalWrite (kanalen [i], hoge);}}}} }
ongeldig testSequence() {}
Als (modus == NOT_INVERTED) {voor (ik = 0; ik < CHANNEL_COUNT; i ++) {wdt_reset();
Hiermee stelt u de watchdog
digitalWrite (kanalen [i], hoge); vertraging (500); digitalWrite (kanalen [i], laag); } }
else {voor (ik = 0; ik < CHANNEL_COUNT; i ++) {wdt_reset(); / / Hiermee stelt u de watchdog digitalWrite (kanalen [i], LOW), vertraging (500); digitalWrite (kanalen [i], hoge);}}}