Arduino kontrollerad RGB LED strip för vardagsrummet (5 / 6 steg)
Steg 5: Arduino kod
Initiering
Endast WDT (WatchDogTimer) och RFM biblioteken ingår. WDT används om Arduino hänger någonstans och med WDT det skulle återställa av sig själv. Men med denna box, Arduino aldrig förlorade sig förrän nu.
Koden är kopplad och bör vara mer eller mindre begripliga. Det förutsätts att du vet att saker åtminstone till hälften läsa den. Arduino koden kanske bekant ut som det har kopierat från olika källor, ändrat och sätta ihop.
Inte får alltför kräsen på NodeID; hålla det 2 siffror eftersom du förmodligen inte kommer att ha mer än 90 noder i ditt hus. Inte ändra antalet siffror eller du kommer att behöva ändra det praktiskt taget överallt senare.
Definiera frekvensbandet som ges av modulen du köpt. ChannelFreq kan behöva justeras till standard där du bor; numret är i Hertz.
RFM69
#define NODEID 21 //unique för varje nod på samma nätverk golv & rum & nod #= X och XX & X
#define NETWORKID 666 //the samma på alla noder som pratar med varandra
#define GATEWAYID 1
#define frekvens RF69_433MHZ
#define ENCRYPTKEY "1234567890ABCDEF" //exactly de samma 16 tecken/byte på alla noder!
#define ChannelFreq 434520000
Meddelandestruktur måste vara samma i hela nätverket
TypeDef struct {/ / Radio paketformat
int nodeID; nod-ID
int devID; enhets-ID
int cmd; Läs eller skriv
lång intVal; heltal nyttolast
float fltVal; flytande nyttolast
char nyttolast [32]; sträng nyttolast
}-Meddelande.
En enhet har definierats för LightSequence, dim växeln och fadespeed
#define LEDDev 75
#define LEDDimmDev 76
#define LEDFadeDev 77
Jag tycker det är lättare att skicka kommandon till.
Setup
Inget speciellt nämna. Digitalwrite och den färgen light-up vid slutet av installationen är ett enkelt sätt att se Arduino startat korrekt. Det också ett snabbt sätt att se om alla anslutningar (särskilt till marken) var lödda ok.
Loop
Kontrollerar om vissa data togs emot via FM (mer om detta nedan).
Om uppgifterna säger att byta till en fördefinierad färg, anges att en.
Singel-blink koderna är fördefinierade för. Det finns 7 enda färger gå högt och lågt i upprepade uppsättningar. Repetitioner, pauser mellan blinkar och färger går inte att ändra från openHAB. LED-lampan på full effekt.
Vara medveten om när du testar och belysning med lysdioder i din syn kommer definitivt att leda till huvudvärk!
Dual-blink är mycket lik den enda-blink. Det innehåller bara en "om loop mer".
Både single och dual-blinkar är inte riktigt optimalt för humör som du kanske galen. Så bättre använda dem som alarm lyser (rött för brand, blå för vatten, röd-blå för PIR när ingen hem, etc.), eller interface openHAB med FritzBox och har blinka gult när telefonen ringer, och så vidare.
Den färg våg eller andas ljus är idealisk för stämningen. Dock bara "rena färger" (R, G, B, och 3 mixar + vit) är fint att. Annars måste du göra allvarliga beräkningar på Arduino och färgerna kommer fortfarande inte vara trevligt. För ex. R255, G50, kan inte B100 vara nedtonade fint ner till 0 eftersom siffrorna inte är alla 0 eller 255. Om du börja testa att, du vet vad jag menar.
Den stora vågen med ColorSet = 80 är en modifierad kod av det föregående steget länk. Det har ändrats för att köras i en loop och "samtidigt" (mellan dim-steg mellan fade-fart intervallerna) lyssna på instruktioner från openHAB skickas via FM.
Tolka kommandot
Beroende på vilka värden fick i datapaketet FM, vidtas olika åtgärder.
Enheten 80 är AC relän. Jag är faktiskt inte säker på om det verkligen behövs eftersom om färgen 0.0.0 skickas, lampan förblir mörka. Jag antar att strömförsörjningen använder fortfarande lite makt, och jag känner mig mer rädda att veta AC är avstängd.
Enheten 77 definieras som den FadeSpeed som används i färg vågor. Helt enkelt uppdaterar den variabeln som används då i nästa slinga cykel.
Enheten 76 används för ljusreglering. Det uppdaterar också helt enkelt variabeln som används då i nästa slinga cykel.
Enheten 75 används för att ange LightSequence. Anledningen till att göra det på så sätt var att lätta sekvensen kan väljas med ett 2 siffrigt nummer, medan att välja en färg via color-code skulle bli ganska komplicerat om du sedan vill färger att blekna. Heltäckande färger och blinkar inte ska vara så svårt ändå.
Beroende på ColorSet, är olika variabler som annorlunda.
Att göra i nästa version av Arduino koden:
- ta bort alla förseningar och ersätta dem med samma logik för intervallen mellan RFM skicka.
- öka förvalet FadeSpeed till 200 eller så, vilket är en mindre nervös lätt att titta på...