Stap 2: Software, deel 1
De software bestaat uit twee geneste lussen-één de werkelijke inschakelen en uit (PWM) uit te voeren en een om te gaan door de toenemende niveaus van helderheid. Ik schreef een lus om de PWM door hand doen omdat de ingebouwde PWM van de Arduino slechts 255 beschikbare niveaus van helderheid, wat betekende heeft dat de lichten in helderheid springen zou als eerst ingeschakeld. Ik schreef een eenvoudige PWM-lus met 1000 mogelijk niveaus van helderheid, waardoor het meer glad.int duty = 0; int steps = 64; int sunrisespeed = 5000; int i; int j; int pulsepin = 11; int lookup[64] = {1,2,4,6,9,12,16,20,25,30,36, 42,49,56,64,72,81,90,100,110,121,132, 144,156,169,182,196,210,225,240,256,272,289, 306,324,342,361,380,400,420,441,462,484,506, 529,552,576,600,625,650,676,702,729,756,784, 812,841,870,900,930,961,992,992,992}; // there are freq steps in the phasing void setup() { pinMode(pulsepin, OUTPUT); }
De initialisatie code worden twee constanten gedeclareerd: stappen en sunrisespeed. stappen vertegenwoordigt het aantal verschillende lichtniveaus die de controller zal gebruiken. Ik gebruikte 64 als een willekeurige keuze, en omdat het de wiskunde vergemakkelijkt. Sunrisespeed bepaalt hoe lang het programma zal doorbrengen op elk licht niveau-specifiek, hoeveel pulsen het voor een bepaalde pulsbreedte output zal. Elke puls aan-uit in de PWM is 5 milliseconden lang, dus een sunrisespeed van 200 1 seconde (200 pulsen van 5ms) van elk licht niveau zal produceren. Met 64 stappen, dit betekent dat de hele zonsopgang zou duren ongeveer één minuut, dus om de zonsopgang duren voor een meer realistische half uurtje wij zou sunrisespeed ingesteld op 200 * 30 = 6000.
int lookup [64] is een array een lijst met getallen die individueel kunnen worden benaderd door het geven van een positie in de lijst. Liever dan schrijf een programma met de nodige wiskunde in het berekenen van een groeiende lijst van nummers dat zou goed zijn voor het menselijk oog niet-lineaire respons, was het makkelijker om gewoon werken uit de lijst en sla het op in het programma. Dit is een programmering techniek die bekend staat als een opzoektabel, vaak gebruikt wanneer een programma wil toegang tot een korte lijst van nummers die lang duren om te berekenen maar niet kunnen wijzigen.
plicht, ik en j zijn variabelen die wordt gebruikt tijdens het genereren van de pulsen.