Kontrollera lamporna på julgran via Arduino, Android och Bluetooth! (3 / 8 steg)
Steg 3: Koden
Jag måste verkligen tacka bwrussell för hans hjälp med detta projekt. Jag frågade honom flera kodning frågor och han svarade dem alla i detalj så jag kunde förstå dem. Han vet mycket mer om Arduino och kodning än jag gör, och jag skulle inte ha kunnat göra det utan honom. Han har varit en fantastisk resurs och bara en trevlig Karl Instructable-maker.
Här är koden jag använde...
/ * Detta är för min Arduino/Bluetooth/Android controller. En Android ansökan kommer att skicka en särskild "byte" data Algoritm: 4 stift deklareras, pinA - pinD. Detta är stift 4-7 på Arduino. Kommandot är den data-byten som koden CONST int pinA = 4;
till denna kod, växeln... Case-sats tar emot den "byten" och vänder pins på eller av beroende på vad det tar emot.
tar emot. rHigh och rLow används för minimi- och slumpmässig fördröjning värden. Inställningarna anger pinA - pinD som resultat
och sätter dem alla som av. Det börjar därefter seriell överföring, om en byte tas emot, den är inställd som kommando. I slingan
fall 1-4 helt enkelt aktivera eller inaktivera pinA - pinD. Fall 5 anger alla stift som slumpmässigt. Fall 6 aktiverar alla stift. Ärende 7 vänder
alla stift off. Ärende 8 startar ett blinkande mönster. */
CONST int pinB = 5;
CONST int pinC = 6;
CONST int pinD = 7.
byte kommando = 0;
CONST int rHigh = 555;
CONST int rLow = 100;
int randomPin;
void pinDo (int pin);
void allOn();
void allOff();
void randomStart();
void flashThrough();
void setup()
{
pinMode (pinA, produktionen); ställa in reläer stiftet som en utgång
pinMode (pinB, produktionen); //
pinMode (pinC, produktionen); //
pinMode (pinD, produktionen); //
allOff(); se till att alla stift är av att starta
Serial.BEGIN(9600);
om (Serial.available() > 0) / / Start seriell överföring
{
kommandot = Serial.read(); SET-kommandot till lika seriella data
}
}
void loop()
{
om (Serial.available() > 0)
{
kommandot = Serial.read();
Switch (kommando)
{
fall 1: / / relä 1
pinDo (pinA);
bryta;
fall 2: / / relä 2
pinDo (pinB);
bryta;
fall 3: / / relä 3
pinDo (pinC);
bryta;
fall 4: / / relä 4
pinDo (pinD);
bryta;
fall 5: / / random funktionen
randomStart();
bryta;
mål 6: / / slå alla stift på
allOn();
bryta;
fall 7: / / stänga alla stift av
allOff();
bryta;
mål 8: / / Start blinkande mönster
samtidigt (kommandot! = 6 & & kommando! = 7)
{
flashOn();
kommandot = Serial.read(); Kontrollera om det finns nya seriella data
}
}
}
}
void pinDo(int pin)
{
om (digitalRead(pin) == låg)
{
digitalWrite (pin, hög);
}
annat
{
digitalWrite (pin, låg);
}
}
void randomStart)
{
samtidigt (kommandot! = 6 & & kommando! = 7)
{
randomPin = random (pinA, pinD + 1);
om (digitalRead(randomPin) == låg)
{
digitalWrite (randomPin, hög);
fördröjning (random (rLow, rHigh));
}
annat
{
digitalWrite (randomPin, låg);
fördröjning (random (rLow, rHigh));
kommandot = Serial.read(); Kontrollera nya seriella data, om så är fallet, avsluta slumpmässigt blinkande
/ * Dessa 2 om uttalanden förekommer i 5: e fallet eftersom jag ville stiften att omedelbart
Aktivera eller inaktivera beroende på kommandot tas emot i den slumpmässiga delen av code.* /
om (kommandot == 6)
{
allOn();
}
om (kommandot == 7)
{
allOff();
}
}
}
}
void flashOn)
{
digitalWrite (pinA, hög); alla på
Delay(150);
digitalWrite (pinB, hög);
Delay(150);
digitalWrite (pinC, hög);
Delay(150);
digitalWrite (pinD, hög);
Delay(400);
allOff();
allOn();
allOff();
allOn();
allOff();
flashThrough();
flashThrough();
flashBack();
flashBack();
}
void allOn)
{
digitalWrite (pinA, hög);
digitalWrite (pinB, hög);
digitalWrite (pinC, hög);
digitalWrite (pinD, hög);
Delay(300);
}
void allOff)
{
digitalWrite (pinA, låg); nästa fas
digitalWrite (pinB, låg);
digitalWrite (pinC, låg);
digitalWrite (pinD, låg);
Delay(350);
}
void flashThrough)
{
digitalWrite (pinA, hög); nästa fas
Delay(200);
digitalWrite (pinA, låg);
digitalWrite (pinB, hög);
Delay(200);
digitalWrite (pinB, låg);
digitalWrite (pinC, hög);
Delay(200);
digitalWrite (pinC, låg);
digitalWrite (pinD, hög);
Delay(200);
digitalWrite (pinD, låg);
}
void flashBack)
{
digitalWrite (pinD, hög); nästa fas
Delay(200);
digitalWrite (pinD, låg);
digitalWrite (pinC, hög);
Delay(200);
digitalWrite (pinC, låg);
digitalWrite (pinB, hög);
Delay(200);
digitalWrite (pinB, låg);
digitalWrite (pinA, hög);
Delay(200);
digitalWrite (pinA, låg);
}