Stap 2: Het programma uitgelegd
Ten eerste erop wil ik wijzen dat ik niet erg goed in programmeren, ben maar ik heb verbeterd! Mijn eerste poging om een binaire klok was zeer lange adem, en ik heb in geslaagd om de code aanzienlijk verbeteren.
Dus is het eerste wat dat we doen lezen de tijd, die zeer eenvoudig is.
(RTC.read(tm))
Vervolgens de volgende beetje is om elke waarde en het splitsen van eenheden en tientallen en als de waarde minder dan 10 Maak vervolgens de tientallen waarde nul. Deze routine is 3 keer uitvoeren voor de uren, minuten en seconden.
VOID binaryOutput(int number)
{
Als (nummer > = 10)
{
int tientallen = nummer/10;
int eenheden = aantal - (trans-Europese netwerken * 10);
setBinary(units,ROW);
RIJ = RIJ + 1;
setBinary(tens,ROW);
}
anders
{
int tientallen = 0;
int eenheden = nummer;
setBinary(ROW,units);
RIJ = RIJ + 1;
setBinary(ROW,tens);
}
}
U moet zitten kundig voor zien dat zodra u het nummer hebt verdeeld in tientallen en eenheden u vervolgens een andere routine om de waarde in een kolom weer te geven. Deze routine nemen de 0-9 nummer en zet deze om in een binair getal en schakelt in (en uit) de vereiste LED's
Dit deel van het programma was het stukje dat verbeterd zo veel van de laatste poging! in principe elke rij wordt behandeld de zelfde onafhankelijk van het aantal LED's in de rij. Wat betekent dat de eenheden rijen 4 LED's en het uur van de trans-Europese netwerken alleen heeft twee LED's maar loopt wel dezelfde routine, het Funduino niet weet dat er niet een LED in de positie en geen enkele manier de ongebruikte LED's zou worden ingesteld op uit.
VOID setBinary (int waarde, int whichRow)
{
RIJ = whichRow;
int XYZ = 8;
int COL = 3;
for (int i = 0; ik < 4; ik ++)
{
getColor(g);
Als (waarde > XYZ =)
{
Colorduino.SetPixel(ROW,COL,A,B,C);
waarde = waarde - XYZ;
}
anders
{
Colorduino.SetPixel(ROW,COL,0,0,0);
}
XYZ = XYZ / 2;
COL = COL - 1;
}
}
Dus hoe werkt dit codefragment?? De routine wordt geleverd met twee gegevenselementen, welke rij en het nummer. XYZ is in eerste instantie ingesteld op 8 en COL ingesteld op 3. Zodat je dan de kleurencode krijgen en 4 lussen doen, op elke lus u uw nummer met XYZ vergelijken en bepalen of het meer, als zijn meer dan het bovenste lampje moet worden ingeschakeld (het getal 8 geleid!) Dan 8 moet worden afgetrokken van uw nummer. Indien zijn niet groter dan 8 dan de Top LED moet worden uitgeschakeld. In beide gevallen u vervolgens XYZ door 2 deelt en decrement de kolonel dan u lus opnieuw deze tijd controleren als uw getal groter dan 4 is, enzovoort. Zie hieronder voor een voorbeeld.
Getal is 6.
Loop1 (ingang nummer = 6, XYZ = 8, Col = 3) is het gelijk is aan of meer dan 8? GEEN draai van boven licht, Half de XYZ, decrement de kolonel
Loop2 (ingang nummer = 6, XYZ = 4, Col = 2) is het gelijk is aan of meer dan 4? Ja het 3e licht inschakelen, aftrekken 4 uit als u de helft van de XYZ en decrement de kolonel
Loop3 (ingang nummer = 2, XYZ = 2, Col = 1) is het gelijk is aan of meer dan 2? Ja de 2e licht inschakelen, aftrekken 2 uit als u de helft van de XYZ en decrement de kolonel
Loop4 (ingang nummer = 0, XYZ = 1, Col = 0) is het gelijk is aan of meer dan 1? GEEN turn off van de bodem licht, de helft van de XYZ en decrement de Col
Op dit punt u vervolgens de rij reset verhogen de XYZ en Col, en doen dezelfde routine voor de trans-Europese netwerken. Herhaal vervolgens voor de minuten en uren.
Tot slot voor de code hebt vervolgens ' Spiegelen ' van de Colorduino-pagina weer te geven van de nieuwe tijd, of wijzig de kleur als de tijd niet is gewijzigd.
void loop
{
tmElements_t tm;
Als (RTC.read(tm))
{
binaryOutput (tm. Seconde);
RIJ = RIJ + 1;
binaryOutput (tm. Minuut);
RIJ = RIJ + 1;
binaryOutput (tm. Uur);
RIJ = 0;
}
Colorduino.FlipPage();
}
Dus die behandelt de lezing en het weergeven van de tijd, nu laten we eens een kijkje op de kleuren. Elke kolom is ingesteld op een kleur en de volgende kolom wordt gewijzigd door een waarde bepalen door "increment" hoe groter het getal hoe beter de kleurvariatie over de 6 kolommen. Ik vond dat rond 8-12 is een goed nummer. De kleur wordt besloten door een routine die neemt de waarde van "g" (dan wel regenboog genoemd) één kleur wordt verhoogd, een ander is verlaagd en de 3e is ingesteld op nul, deze vervolgens cycli op en neer door alle kleuren en geeft een mooie regenboog-effect (Zie de grafiek voor een beter uitleg). Één probleem dat ik had die nam een zeer lange tijd uit de zeer eenvoudige soloution te werken was hoe maak je de regenboog Beweeg langzaam in de kolommen. omdat ik de kleur tussen elke rij, stapte als ik nu wil verhogen van elke kolom met slechts 1, dan heb ik om rekening te houden met wat de oorspronkelijke kleur nummer was en reset Voeg "g" naar dat nummer dan een. Ik denk dat is logisch.
Dus het laatste wat is hoe pas je de tijd???
Ik was niet echt zeker hoe ik ging om te passen deze klok toen ik begon te bouwen deze klok, maar omdat er geen ingangen beschikbaar op het bord colorduino, maakte ik een GPS-klok die u kunt verbinding maken met de RTC-eenheid aan en corrigeren de tijd. Ik zal toevoegen andere instructable op hoe ik heb dit gemaakt!