Animatör Gadget för NeoPixels (3 / 6 steg)
Steg 3: kod
Detta projekt använder "Flikar" för att organisera kod inuti Arduino IDE. Detta är verkligen bara ovanliga kodning praxis i hela projektet. Flikarna är inte använt mycket, eller kanske jag bara lärt mig om dem. Men de påminner mig om tekniker och system som används i mer avancerad programmering miljöer.
Jag använder dem mer som bokmärken i detta projekt. Deras huvudsakliga funktion här är att bryta koden i bitar så att jag kan navigera enkelt utan så mycket rullning. Detta har ett viktigt mervärde. Jag är en väldigt lata programmerare, och om jag inte tror att alla kommer att se min kod, då jag kommer att undvika rullning och kommer slap kodstycken i slumpmässiga ställen tills hela programmet blir en oläsbar röra. Det kör bra, men om jag kommer tillbaka en månad senare jag kan inte ens läsa min egen kod, mycket mindre att ändra. Med hjälp av flikar, stannar min kod vanligtvis mer lättläst eftersom jag kan snabbt komma till fliken som innehåller relaterade kodstycken. Så stannar hela programmet bättre organiserade. Flikar tvinga nästan mig att tänka mer modulärt.
Detta hjälper också när jag behöver ändra programmet för användning med andra komponenter. I detta projekt är all kod för att köra displayen i ett par flikar. Det var lätt när jag portat det en SPI skärm. Jag visste att där alla relaterade koden var, och det var lätt för mig att ersätta den nya koden i programmet utan att spåra det i en enda spaghetti härva av koden.
Flikar kan skapas med hjälp av små nedåtpilen på den övre högra hörnet i IDE-gränssnittet. Observera att inläsningsordningen för flikarna är viktigt, precis som ett i GÅSMARSCH program.
Hur man använder
Hämta alla exempelfiler och lägga dem i en katalog inom dig Arduino mapp. Kalla den nya mapp/katalogen "Loop_Trainer" så att den matchar namnet på din huvudsakliga .ino fil. Ladda Loop_Trainer filen, sedan kompilera och ladda upp till din hårdvara.
Koden är väl kommenterade (vissa skulle säga över kommenterade), så förhoppningsvis även nybörjare ska kunna förstå hur det fungerar.
Sammanfattning
I grund och botten koden läser värden från potentiometrar, kartor värdena om behövs, sedan skickar värdet till en animering funktion. Värdena visas också på skärmen. Enkel, rätt? Jo det är, låt inte det tabbade formatet blandar ihop saker.
Innehållet på fliken
- Loop_Trainer: Denna huvudfilen. Den har alla de vanliga initieringen, inställning och huvudloop. Koden anger pin-koder och variabel namn, laddar NeoPixel biblioteket och börjar den seriell kommunikationen. Stora slingan är mycket enkelt, det kräver bara en funktion för att läsa värdena på potentiometrar och köra på menyn.
- LCD_baseCommands: LCD-skärmen används i detta projekt använder starta och stoppa koder att passera den kommandon. Det är enkelt att förstå, men upprepa koderna blir långtråkig och blåser filen. Så jag skapade en serie av funktioner så koderna kan kallas helt enkelt. Kolla in Adafruit's guide för en fullständig lista över kommandon.
- LCD_setup: Nu när alla bas kommandon har förvandlats till funktioner, kan vi använda dem att ställa in skärmen för användning. Du kommer att behöva ändra på den här fliken och fliken LCD_baseCommand om du använder en annan display.
- Menu_functions: Detta är en enkel case-sats. Beroende på vad det mappade värdet på menyn potten är, anropa vi en funktion (i fliken NeoPixel_Functions) om du vill animera NeoPixels. Jag har lämnat några tomma platser för dig att fylla med din egen animationer.
- NeoPixel_Functions: Detta är roligt delen. Denna fil innehåller faktiska animation. Dessa animationer är funktioner anropade från inom fliken Menu_functions. Animeringarna skaffa RGB och variabelvärden från datauppsättningen genom fliken Read_pots. Animeringarna också skicka data till fönstret med hjälp av funktionerna på fliken LCD_baseCommands. När du skapar din egen nya animationer, bara kalla dem på fliken Menu_functions. Dessa grundläggande animeringar, men jag har lämnat en två-kompanjon och ett par andra oddball rutiner för dig att spela med.
- Read_Pots: Dessa funktioner läsa potentiometrar och kartlägga deras värden för att passa deras standard syfte. Till exempel behöver menyn bara 10-20 steg, så vi mappa till detta värde. RGB-värdet måste vara 0-255. Men den "variabelindata" används i så många olika sätt att skicka raw värdet och mappa det nuvarande behovet av inuti anropsfunktionen. Du kan alltid göra en direkt analogRead om du vill enkät ett värde olikt.
VIKTIG anmärkning: någonstans. på något sätt, jag kommer att ha kvar "stubbar" av övergivna experiment och andra fel i denna exempelkod. Koden körs, men om du hittar återvändsgränder, de är förmodligen kvar från portar till olika skärmar eller från "banker" av animationer som inte är avsedda att ges i exempelkoden.