Rainbow lyktor (4 / 5 steg)
Steg 4: Tråd och kod
Nu är dags att koppla allt upp för testning (alltid en bra idé att använda skydd, 120VAC är inte så vänliga).Jag hade en bänk multimeter kontrollera spänningsnivåer med mig också, som visat sig vara användbara vid några tillfällen.
Nedan är min kod, Känn dig fri att ändra det, dess inget märkvärdigt. Om du gör ett nytt mönster som du tycker är cool, vänligen dela det!
Koden cyklar slumpmässigt genom några mönster i matrisen. Jag använde stift 8-13 för att styra reläerna. Jag lämnade också debug uttalanden, eftersom de kan vara användbara när du testar.
Kod:
/*
Lykta Blink
Arduino koden för Rainbow lyktor
*/
int timer = 250; Ju högre siffra, desto långsammare tidpunkten.
char lampor [6] = {8,9,10,11,12,13}.
int PATTERN_COUNT = 5;
int RANDOM_COUNT = 4;
byte ptn [] [7] =
{
Mönster #0
{B100000,
B010000,
B001000,
B000100,
B000010,
B000001},
Mönster #1
{B101000,
B010100,
B001010,
B000101,
B001010,
B010100},
Mönster #2
{B100000,
B110000,
B011000,
B001100,
B000110,
B000011,
B000001},
Mönster #3
{B100001,
B010010,
B001100,
B010010}
};
int randCt = 0;
void setup() {
Serial.BEGIN(9600);
använda en for-loop att initiera varje stift som en utgång:
för (int thisPin = 0; thisPin < 6; thisPin ++) {
pinMode (ljus [thisPin], produktionen);
}
Initilize slumptalsfrö
om analog ingångsstift 0 är osammanhängande, slumpmässiga analog
buller gör anropet till randomSeed() att generera
olika utsäde nummer varje gång skissen körs.
randomSeed() kommer sedan shuffle funktionen random.
randomSeed(analogRead(0));
randomSeed(0);
}
void loop() {
Switch(Random(PATTERN_COUNT+1)-1)
{
fall -1:
{
Serial.Print ("aktivt mönster #-1");
Serial.Print (randCt = (random(RANDOM_COUNT)+5));
Serial.Print ("gånger...");
pattern_0(randCt,timer);
Serial.println("Done!");
bryta;
}
fall 0:
{
Serial.Print ("aktivt mönster #0");
Serial.Print (randCt = (random(RANDOM_COUNT)+5));
Serial.Print ("gånger...");
defaultPatternLoop(0,randCt,timer);
Serial.println("Done!");
bryta;
}
fall 1:
{
Serial.Print ("aktivt mönster #1");
Serial.Print (randCt = (random(RANDOM_COUNT)+5));
Serial.Print ("gånger...");
defaultPatternLoop(1,randCt,timer);
Serial.println("Done!");
bryta;
}
fall 2:
{
Serial.Print ("aktivt mönster #2");
Serial.Print (randCt = (random(RANDOM_COUNT)+5));
Serial.Print ("gånger...");
defaultPatternLoop(2,randCt,timer);
Serial.println("Done!");
bryta;
}
fall 3:
{
Serial.Print ("aktivt mönster #3");
Serial.Print (randCt = (random(RANDOM_COUNT)+5));
Serial.Print ("gånger...");
defaultPatternLoop(3,randCt,timer);
Serial.println("Done!");
bryta;
}
standard:
{
Serial.Print ("aktivt Standardmönstret");
Serial.Print (randCt = (random(RANDOM_COUNT)+5));
Serial.Print ("gånger...");
för (; randCt > 0; randCt--)
{
Serial.Print(randCt);
int arraySize = sizeof(ptn[1]) / sizeof(byte);
för (int thisPin = 0; thisPin < arraySize; thisPin + = 1)
{
WritePattern(ptn[1][thisPin]);
Delay(500);
WritePattern(ptn[1][thisPin]);
}
}
Serial.println("Done!");
}
}
}
void WritePattern (byte mönster) {
för (int jag = 5; jag > = 0; i--, mönster >> = 1) {
digitalWrite (ljus [i], mönster & 1? HÖG: LÅG);
}
}
void pattern_0 (int tider, int waitPeriod)
{
för (; tider > 0; gånger--)
{
Serial.Print(Times);
loop från lägsta PIN-koden till den högsta:
för (int thisPin = 0; thisPin < 6; thisPin ++) {
aktivera PIN-koden:
digitalWrite (ljus [thisPin], hög);
Delay(waitPeriod);
Inaktivera PIN-koden:
digitalWrite (ljus [thisPin], låg);
}
loop från det högsta stiftet till lägsta:
för (int thisPin = 5; thisPin > = 0, thisPin--) {
aktivera PIN-koden:
digitalWrite (ljus [thisPin], hög);
Delay(waitPeriod);
Inaktivera PIN-koden:
digitalWrite (ljus [thisPin], låg);
}
}
}
void defaultPatternLoop (int mönster, int gånger, int waitPeriod)
{
int arraySize = sizeof(ptn[pattern]) / sizeof(byte);
för (; tider > 0; gånger--)
{
Serial.Print(Times);
för (int thisPin = 0; thisPin < arraySize; thisPin + = 1)
{
om (ptn [mönster] [thisPin]! = 0) / / om det är inte tomma
{
WritePattern(ptn[pattern][thisPin]);
Delay(waitPeriod);
WritePattern(ptn[pattern][thisPin]);
}
}
}
}