Stap 7: codering!
Codering is een van de leukste onderdelen van dit hele project. Zoals eerder vermeld, werd de Arduino IDE gebruikt voor het coderen, die sterk vereenvoudigd het proces. Als u eenmaal een programmeur instellen en uw software klaar om te gaan hebben, bent u klaar om het te krijgen typen! Of kopiëren en plakken, zoals het geval kan zijn. :)
Dit is lang, maar ik hoop dat het zal ook helpen, en als er niets anders, vonk een interesse in het coderen. Ik aangesloten de Arduino Ino bestand, alsook de PastBin link met regelnummers. Ik zal ook doorlopen over het algemeen wat elke bit van de code doet.
Deze code wordt ervan uitgegaan dat u het schema aangelegd in stap 3.
Eerst lijnen af, 1-11 aantal variabelen die worden gebruikt in het programma instellen. Het is meestal algemene spullen zoals die in-/ uitgangen komen met welke nummers overeen, het tarief waartegen de regenboog moet verdwijnen en de drempel die de licht-sensing moet reageren op. Ik krijg te lijnen 8-11 in een moment.
Lijnen 13-18 gewoon instellen alle de pinnen als uitgang (de lichtsensor pin is standaard input). Regel 17 wijzigt de kleur om volledig af, met behulp van de functie beschreven in de volgende paragraaf.
Regels 49-53, de changeColor() functie, vormen de basis voor dit programma. Kortom, de functie neemt een waarde 0 tot en met 255 voor de individuele lichtwaarde voor elke kleur en schrijft het vervolgens naar de juiste pin, met behulp van het PWM-signaal eerder besproken. Aangezien mijn LED is common-anode (gemeenschappelijk positief), dus een waarde van 0 (uit/grond) betekent echter dat de kleur op volle sterkte zal zijn. Dus, als u wilt maken de gewenste effect waar 255 geeft aan volledige helderheid, de kleuren afgetrokken zijn van 255 omkeren van hen.
Het programma terug te gaan, begint de loop-functie bij lijn 20. Daarna, regel 21-27 controleren om te zien of het donker met behulp van de drempelwaarde is ingesteld in de sectie variabelen. De if/else statement heeft de toegevoegde functionaliteit om te controleren of de donkere variabele al is ingesteld - als het al donker is, dan het programma niet te donker worden opnieuw ingesteld.
Regel 26 behoort tot de meest ingewikkelde en ontzagwekkend deel van dit programma. Ik wilde niet mijn toetsenbord licht om te verblijven op de hele nacht (want ik zelden omhoog om 3 uur op de computer ben), dus heb ik besloten om toe te voegen sommige pizazz met een automatische uitschakelvoorziening. Mij had voor uitproberen van verschillende hoeken benaderen het probleem vooraleer mij men stichten welk gehanteerd. De functies van de verstreken tijd leek niet om het werk te doen, en als de ATTiny niet een real-time klok hoeft, ik kon niet lees net de tijd. Dit systeem werkt door het berekenen van de tijd die nodig is om te doen een regenboog in lijn 8. Gebaseerd op het aantal uren die ik invoer als de tijd die het licht moet blijven, het berekent hoeveel regenbogen na het donker moeten worden voltooid. De als verklaring voordat het belangrijkste ranbow programma (regel 28) controleert of het is donker en ook controleert of het programma is nog steeds meer regenbogen uit te voeren. Lijn 41 verhoogt de teller van elke regenboog. En tot slot in lijn 26 de regenboog cyclus teller worden ingesteld wanneer het licht wordt.
Hieruit blijkt dat de ongelooflijke kracht van code. Door simpelweg het toevoegen van een paar lijnen van tekst naar een ander programma, kunt u geweldige functionaliteit dat zou onmogelijk te maken met hardware toevoegen. Dit is een van de redenen waarom dat ik hou zo veel programmeren. Het maakt me om mijn ideeën in actie in een wereld waar de enige echte ding beperken mij mijn verbeelding.
Om omhoog te verpakken deze lenghty uitleg, lijnen 29-40 doorlopen van alle kleuren van de regenboog. Kortom, de regenboog code werkt door te starten met één kleur (bijvoorbeeld rood) bij volledige helderheid. Dan, de voor lus geleidelijk de rode waarde omlaag en omhoog de groenwaarde, tot groen is bij volledige helderheid. Het proces wordt herhaald totdat blauw verdwijnt en rood eens te meer de overheersende kleur is. Het laatste deel van het programma is de instructie else in lijnen 43-46, die het licht uitgeschakeld als het niet donker of als het is al op meer dan 8 uur (de timeout_hours variabele).