Christmas Light Show (1 / 4 steg)
Steg 1: Koden
Så förklarar detta är koden det är mycket enkelt och fungerar bra bara läsa igenom koden och inuti kodning det sig själv. Bara anpassa koden för vad du använder den för. Du behöver programmet Arduino kan du få det här @ Arduino. (update): jag glömde att säga att för att få detta att fungera med vixen måste du öppna vixen och ändra portinställningarna för att skicka en rubrik från vixen stoppa slumpmässigt läge och starta din sekvens. bara sätta detta ~! i huvudet.
bara kopiera och klistra in eller ladda ner
Detta var skrivet av Danlarocco. Detta är för 24SSRs och arduino Mega men det kan anpassas till eventuella Arduino.
För att anpassa koden till ditt fall, bara byta denna övre delen, med #define rader. Inkluderar watchdog timer biblioteket #include
Detta anger hur många kanaler kommer vixen att skicka. Kan ställas in till alla nummer från 1 till 48 för Arduino Mega, och 1-18 för Arduino Uno.
#define CHANNEL_COUNT 24
hastigheten för den com-porten för att prata med vixen. Från 9600 till 115200. Använd samma hastighet som i Vixen.
#define VIXEN_COM_SPEED 57600
Timeout väntar seriell in innan du går till slumpmässigt läge (i millisekunder).
#define TIME_OUT 10000
Om reläerna slå på och av motsatt Vixen sekvens.
#define NOT_INVERTED 0
#define INVERTERAD 1
#define läge NOT_INVERTED
vilket stift styra vilka kanaler
Du kan ändra dessa tilldelningar om du vill använda olika pins. Jag hittade det klämmer fast 13,20 och 21 inte fungerar på min mega. De verkar bo för evigt.
Använd inte ping 0 och 1, eftersom de är för den seriella porten till tala till datorn.
#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 kanaler [] = {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 jag = 0;
Loop counter flyktiga osignerade långa timer_a = 0;
ny rad
setup stiften / ingångar och utgångar void setup() {
Aktivera watchdog timer med en tid på 1 sekund. Om styrelsen fryser, kommer det att återställa sig efter 1 sekund. wdt_enable(WDTO_1S);
speciellt för UNO sei();
initialisera PWM kanaler / stift för (jag = 0; jag < CHANNEL_COUNT; i ++) {pinMode (kanaler [i], produktionen);}
ställa in alla realys till bort till att börja med om (läge == NOT_INVERTED) {för (jag = 0; jag < CHANNEL_COUNT; i ++) {digitalWrite (kanaler [i], låg);
} }
annat {för (jag = 0; jag < CHANNEL_COUNT; i ++) {digitalWrite (kanaler [i], hög);}}
testSequence();
Ställ in följetong efter den hastighet som definieras ovan.
Serial.BEGIN(VIXEN_COM_SPEED); }
void loop() {om (Serial.available() > = (CHANNEL_COUNT + 2)) {wdt_reset();
återställer watchdog
timer_a = millis ();
ny rad
int uno = Serial.read(); om (uno == 126) {int dos = Serial.read(); om (dos == 33) {för (jag = 0; jag < CHANNEL_COUNT; i ++) {
Läs varje byte
incomingByte [i] = Serial.read(); } om (läge == NOT_INVERTED) {för (jag = 0; jag < CHANNEL_COUNT; i ++) {int värde = incomingByte [i]; om (värdet < = 127) {digitalWrite (kanaler [i], låg);} annat {digitalWrite (kanaler [i], hög);}}} annat {för (jag = 0; jag < CHANNEL_COUNT; i ++) {int värde = incomingByte [i]; om (värde < 127) {digitalWrite (kanaler [i], hög);} annat {digitalWrite (kanaler [i], låg);}}}
} } }
Slumpmässigt läge kod. Slumpmässigt läge startar om inga seriell in har tagits emot i TIME_OUT millisenconds annat {wdt_reset();
återställer watchdog
osignerade långa diff = millis() - timer_a; om (diff > = TIME_OUT) {timer_a = millis (); int random_a = 0; för (jag = 0; jag < CHANNEL_COUNT; i ++) {random_a = random (0, 2), om (random_a == 0) {digitalWrite (kanaler [i], låg);} annat {digitalWrite (kanaler [i], hög);}}}} }
void testSequence() {
om (läge == NOT_INVERTED) {för (jag = 0; jag < CHANNEL_COUNT; i ++) {wdt_reset();
återställer watchdog
digitalWrite (kanaler [i], hög); fördröjning (500). digitalWrite (kanaler [i], låg); } }
annat {för (jag = 0; jag < CHANNEL_COUNT; i ++) {wdt_reset(); / / återställer vakthund digitalWrite (kanaler [i], låg), fördröjning (500), digitalWrite (kanaler [i], hög);}}}