Fading RGB tangentbord ljus (7 / 8 steg)
Steg 7: kodning!
Kodning är en av de roligaste delarna av hela projektet. Som nämnts tidigare, användes Arduino IDE för kodning, som förenklas avsevärt processen. När du har en programmerare ställa in och har din programvara, redo att gå, är du redo att få skriva! Eller kopiera och klistra in, som omständigheterna. :)
Detta kommer att bli lång, men jag hoppas det också hjälper och om inte annat, väcka ett intresse i kodning. Jag bifogade filen Arduino .ino, liksom PastBin länken med radnummer. Jag kommer även gå igenom oftast vad varje bit av koden gör.
Denna kod förutsätter att du använder den schematiska anges i steg 3.
Först linjerna ut, 1-11 uppsättning upp vissa variabler som används i hela programmet. Det är mest allmänna saker som vilka in-/ utgångar motsvarar vilka nummer, den ränta som regnbågen ska blekna och tröskeln som ljus-sensing bör reagera på. Jag ska få till linjer 8-11 i ett ögonblick.
Linje 13-18 helt enkelt ställa in alla stiften som resultat (ljussensor PIN-koden matas in som standard). Linje 17 ändrar färg för att vara helt avstängd, med hjälp av funktionen som beskrivs i nästa stycke.
Raderna 49-53, changeColor() funktionen, finns basen för detta program. I grund och botten funktionen använder ett värde 0-255 enskilda ljus värde för varje färg och sedan skriver ut det till rätt PIN-kod, med PWM signalen diskuterats. Men eftersom min LED är common-anod (gemensamma positiva), så värdet 0 (off/marken) innebär att färgen på full ljusstyrka. Således, för att skapa önskad effekt där 255 betyder full ljusstyrka, färgerna subtraheras från 255 att Invertera dem.
Gå tillbaka in programmet, börjar funktionen loop() på rad 20. Efter det anges 21-27 kontrollera för att se om det är mörkt med tröskelvärdet för operationsraderna i avsnittet variabler. Den if/else uttalande har ytterligare funktioner för att kontrollera om mörka variabeln redan är klar - om det är redan mörkt, då programmet kommer inte att ställa in den att bli mörk igen.
Linje 26 är en del av den mest komplicerade och awesome delen av detta program. Jag ville inte mitt tangentbord ljus bo hela natten (eftersom jag sällan upp klockan 3 på datorn), så jag bestämde mig att lägga till några pizazz med en automatisk avstängning funktion. Jag var tvungen att prova flera vinklar att närma sig problemet innan jag hittade något som fungerade. Förfluten tidsfunktioner verkar inte göra jobbet, och eftersom ATTiny inte har en realtidsklocka, jag bara inte kunde läsa tiden. Detta system fungerar genom att beräkna den tid det tar för att göra en regnbåge på linje 8. Sedan beräknas baserat på antalet timmar I-ingång som den tid som ljuset bör finnas kvar på, hur många regnbågar det bör slutföra när det blir mörkt. Om uttalande innan huvudsakliga ranbow (linje 28) kontrolleras om det är mörkt och kontrollerar att programmet fortfarande har mer regnbågar att köra. Linje 41 Justerar räknaren varje regnbåge. Och slutligen, rad 26 återställer räknaren rainbow cykel när det blir ljust.
Detta visar den otroliga kraften i koden. Genom att lägga till några rader med text till ett program, kan du lägga till fantastiska funktioner som skulle vara nästan omöjligt att göra med hårdvara. Detta är en av anledningarna till att jag älskar programmering så mycket. Det gör det möjligt för mig att sätta mina idéer till handling i en värld där det enda verkliga begränsar mig är min fantasi.
Att avsluta denna långvariga förklaring, linjer 29-40 cykel genom alla färger i regnbågen. I grund och botten rainbow koden fungerar genom att starta med en färg (röd till exempel) på full ljusstyrka. Då, den för loop gradvis flyttar röda värdet ned och flyttar det gröna värdet upp, tills gröna är vid full ljusstyrka. Processen upprepas tills blått tonar bort och röd är återigen den dominerande färgen. Den sista delen av programmet är annat uttalande i linjer 43-46 som stänger av ljuset om det inte är mörkt eller om det har varit på mer än 8 timmar (variabeln timeout_hours).