Arduino Tweetmas träd * uppdaterad med kod * (5 / 6 steg)
Steg 5: Koden
Kodar för mig är en smärta!
Jag shearched på webben arbetande arduino skiss.
Massor av dem fungerar inte men jag hitta den här killen på youtube:
Han gör ett bra jobb och ge en bra fungerande kod på sin codebender:
Jag lagade hans kod med fler mönster som: Sockertopp, teater stil eller rainbow hjulet
Detta är min arbetande koden:
#include < SPI.h >
#include < Ethernet.h >
#include < Adafruit_NeoPixel.h >
Inställningar för lokalt nätverk
byte [mac] = {0xBC, 0x2D, 0x41, 0x70, 0x07, 0x98}; Måste vara unika på lokala nätverket
#define ljusstyrka 5 //Set ljusstyrka till 5/10 / / du kan justera ljusstyrka
#define full (255/ljusstyrka)
#define thingSpeakInterval 18000 / / tid intervall i millisekunder för att hämta data från ThingSpeak (antal sekunder * 1000 = intervall)
Variabelinställningar
lång lastConnectionTime = 0;
String lastCommandString = "black".
booleska lastConnected = false;
int failedCounter = 0;
Adafruit_NeoPixel strip = Adafruit_NeoPixel (167, 6, NEO_GRB + NEO_KHZ800); För mig 167 pixel på min remsa
Initiera Arduino Ethernet-klient
EthernetClient klient;
void setup() {
Delay(100);
Setup följetong
Serial.BEGIN(9600);
Delay(100);
Serial.flush();
Delay(100);
Strip.BEGIN();
Strip.show();
Starta Ethernet på Arduino
startEthernet();
}
void loop() {
Processen CheerLights kommandon
IF(client.available() > 0)
{
Delay(100);
Serial.println(client.available());
Sträng svar;
char Marcus;
göra {
Marcus = client.read(); läsa en röding från bufferten
svar += Marcus; Lägg det röding till sträng svaret
} medan (client.available() > 0);
Serial.println(Response.length());
Serial.println(Response);
om (svar == "vit" || svar == "varmvitt" || svar == "oldlace")
{
lastCommandString = "white";
theaterChaseRainbow(50);
}
annars om (svar == "svart" || svar == "off")
{
lastCommandString = "black".
theaterChase (remsa. Color(0,0,0),50);
}
annars om (svar == "red")
{
lastCommandString = "röd";
theaterChase (remsa. Color(255,0,0),50);
CandyCane(30,8,50);
}
annars om (svar == "grön")
{
lastCommandString = "grön";
theaterChase (remsa. Color(0, 255, 0), 50);
}
annars om (svar == "blå")
{
lastCommandString = "blå";
theaterChase (remsa. Color(0,0,255),50);
}
annars om (svar == "cyan")
{
lastCommandString = "cyan";
theaterChase (remsa. Color(0,255,255),50);
}
annars om (svar == "magenta")
{
lastCommandString = "magenta";
theaterChase (remsa. Color(255,0,255),50);
}
annars om (svar == "gul")
{
lastCommandString = "gula";
theaterChase (remsa. Color(255,255,0),50);
}
annars om (svar == "lila")
{
lastCommandString = "lila";
theaterChase (remsa. Color(102,51,204),50);
}
annars om (svar == "orange")
{
lastCommandString = "orange";
theaterChase (remsa. Color(255,153,0),50);
theaterChase (remsa. Color(0, 255, 0), 50);
}
annars om (svar == "rosa")
{
lastCommandString = "rosa";
theaterChase (remsa. Color(255,53,153),50);
}
Delay(200);
Serial.Print ("CheerLight kommando emot:");
Serial.println(lastCommandString);
Delay(200);
}
Koppla från ThingSpeak
om (! client.connected() & & lastConnected)
{
Serial.println("...Disconnected");
client.stop();
}
Prenumerera på ThingSpeak kanal och fält
IF(!client.Connected() & & (millis() - lastConnectionTime > thingSpeakInterval))
{subscribeToThingSpeak();
}
checkcolor(lastCommandString);
Delay(500);
Kontrollera om Arduino Ethernet måste startas
om (failedCounter > 3) {startEthernet();}
lastConnected = client.connected();
Delay(100);
} / / End loop
void subscribeToThingSpeak()
{
om (client.connect ("api.thingspeak.com", 80))
{
Serial.println ("ansluter till ThingSpeak...");
failedCounter = 0;
Serial.println ("Skicka förfrågan");
client.println ("GET /channels/1417/field/1/last.txt");
client.println();
lastConnectionTime = millis();
}
annat
{
failedCounter ++;
Serial.println ("anslutning till ThingSpeak misslyckades ("+ String(failedCounter, DEC) +")");
Serial.println();
lastConnectionTime = millis();
}
}
void startEthernet()
{
client.stop();
Serial.println ("ansluta Arduino att nätet...");
Serial.println();
Delay(1000);
Ansluta till nätverk amd en IP-adress med DHCP
om (Ethernet.begin(mac) == 0)
{
Serial.println ("DHCP misslyckades, Nollställ Arduino att försöka igen");
Serial.println();
}
annat
{
Serial.println ("Arduino ansluten till nätverket via DHCP");
Serial.println();
}
Delay(1000);
}
Fylla prickar en efter den andra med en färg
void colorWipe (uint32_t c, uint8_t vänta) {
för (uint16_t jag = 0; jag
}
Biosittning krypande lampor.
void theaterChase (uint32_t c, uint8_t vänta) {
för (int j = 0; j < 36; j ++) {//do 36 cykler för att jaga
för (int q = 0; d < 3; q ++) {
för (int jag = 0; jag < strip.numPixels(); i = i + 3) {
strip.setPixelColor (jag + q, c); aktivera varje tredje pixel
}
Strip.show();
Delay(Wait);
för (int jag = 0; jag < strip.numPixels(); i = i + 3) {
strip.setPixelColor (jag + q, 0); Inaktivera alla bildpunkter på tredje
}
}
}
}
Biosittning krypande lampor med regnbågseffekt
void theaterChaseRainbow (uint8_t vänta) {
för (int j = 0; j < 256; j ++) {/ / cykla alla 256 färger i hjulet
för (int q = 0; d < 3; q ++) {
för (int jag = 0; jag < strip.numPixels(); i = i + 3) {
strip.setPixelColor (i + q, rullar ((i + j) % 255)); aktivera varje tredje pixel
}
Strip.show();
Delay(Wait);
för (int jag = 0; jag < strip.numPixels(); i = i + 3) {
strip.setPixelColor (jag + q, 0); Inaktivera alla bildpunkter på tredje
}
}
}
}
Rainbow hjulet
void rainbowCycle (uint8_t vänta) {
int i, j.
för (j = 0; j < 256 * 5; j ++) {/ / 5 cykler av alla 25 färger i hjulet
för (jag = 0; jag < strip.numPixels(); i ++) {
strip.setPixelColor (i, hjulet (((i * 256/strip.numPixels()) + j) % 256));
}
Strip.show(); skriva alla pixlar
Delay(Wait);
}
}
{Ogiltig rainbow (uint8_t vänta)
int i, j.
för (j = 0; j < 256; j ++) {/ / 3 cykler av alla 256 färger i hjulet
för (jag = 0; jag < strip.numPixels(); i ++) {
strip.setPixelColor (i, hjulet ((i + j) % 255));
}
Strip.show(); skriva alla pixlar
Delay(Wait);
}
}
/ * Hjälpare funktioner * /
Skapa ett 24-bitars färgvärde av R, G, B
uint32_t färg (byte r, byte g, byte b)
{
uint32_t c;
c = r;
c << = 8;
c | = g;
c << = 8;
c | = b;
returnera c;
}
Ange ett värde 0 till 255 att få ett färgvärde.
Färgerna är en övergång r - g -b - tillbaka till r
uint32_t hjul (WheelPos byte)
{
om (WheelPos < 85) {
returnera färg (WheelPos * 3, 255 - WheelPos * 3, 0);
} else om (WheelPos < 170) {
WheelPos-= 85.
returnera färg (255 - WheelPos * 3, 0, WheelPos * 3);
} annat {
WheelPos-= 170;
returnera färg (0, WheelPos * 3, 255 - WheelPos * 3);
}
}
void checkcolor(String colors) {
om (färger == "vit")
{
theaterChaseRainbow(50);
}
annars om (färger == "black")
{
theaterChase (remsa. Color(0,0,0),50);
}
annars om (färger == "red")
{
theaterChase (remsa. Color(255,0,0),50);
CandyCane(30,8,50); 30 set, 8 pixlar bred, 50us dröjsmål
}
annars om (färger == "grön")
{
theaterChase (remsa. Color(0, 255, 0), 50);
}
annars om (färger == "blå")
{
theaterChase (remsa. Color(0,0,255),50);
}
annars om (färger == "cyan")
{
theaterChase (remsa. Color(0,255,255),50);
}
annars om (färger == "magenta")
{
theaterChase (remsa. Color(255,0,255),50);
}
annars om (färger == "gul")
{
theaterChase (remsa. Color(255,255,0),50);
}
annars om (färger == "lila")
{
theaterChase (remsa. Color(102,51,204),50);
}
annars om (färger == "orange")
{
theaterChase (remsa. Color(255,153,0),50);
theaterChase (remsa. Color(0, 255, 0), 50);
}
annars om (färger == "rosa")
{
theaterChase (remsa. Color(255,53,153),50);
}
}