Ping Pong boll fullfärg binär klocka (2 / 3 steg)
Steg 2: Programmet förklaras
För det första vill jag påpeka att inte jag är mycket bra på programmering, men jag har förbättrats! Mitt första försök till en binär klocka var mycket lång omständlig, och jag har lyckats att avsevärt förbättra koden.
Så är det första vi gör läsa tiden, som är mycket lätt.
(RTC.read(tm))
Sedan nästa lite är att ta varje värde och dela den i enheter och tior och om värdet är mindre än 10 sedan göra TEN värde noll. Denna rutin är köra 3 gånger för timmar minuter och sekunder.
void binaryOutput(int number)
{
om (nummer > = 10)
{
int tior = antal/10;
int enheter = nummer - (TEN * 10);
setBinary(units,ROW);
RAD = RAD + 1.
setBinary(tens,ROW);
}
annat
{
int tior = 0;
int enheter = nummer;
setBinary(ROW,units);
RAD = RAD + 1.
setBinary(ROW,tens);
}
}
Du bör kunna se att när du har delat numret i transeuropeiska nät och enheter du sedan köra en annan rutin för att visa värdet i en kolumn. Denna rutin ta 0-9 nummer och omvandlar den till ett binärt tal och slår på (och av) krävs lysdioder
Denna del av programmet var lite som förbättrats så mycket från den sista försöken! i princip varje rad behandlas den samma oberoende av antalet LED i raden. vilket innebär att enheterna raderna har 4 lysdioder och timme TEN endast har två lysdioder men kör ändå samma rutin, Funduino inte vet att det inte är en LED i position och något sätt oanvända lysdioder skulle vara inställt på.
void setBinary (int värde, int whichRow)
{
RAD = whichRow;
int XYZ = 8.
int COL = 3;
för (int jag = 0; jag < 4; i ++)
{
getColor(g);
om (värde > = XYZ)
{
Colorduino.SetPixel(ROW,COL,A,B,C);
värde = värde - XYZ;
}
annat
{
Colorduino.SetPixel(ROW,COL,0,0,0);
}
XYZ = XYZ / 2;
COL = COL - 1.
}
}
Så hur fungerar denna bit kod?? Rutinen är försedd med två bitar av data, där rad och antalet. XYZ anges ursprungligen till 8 och COL värdet 3. Så du sedan få färgkoden och göra 4 öglor, på varje slinga du jämför ditt nummer med XYZ och avgöra om det är mer, om dess mer sedan upp LED bör vara aktiverat (nummer 8 ledde!) 8 bör sedan subtraheras från ditt nummer. Om dess inte större än 8 sedan toppen LED bör vara avstängd. I båda fallen du sedan delar XYZ med 2 och stegvis minskning av överste då du slinga igen denna tid kontrollera om ditt nummer är större än 4, och så vidare. Se nedan för ett exempel.
Antal är 6.
Loop1 (ingång nummer = 6, XYZ = 8, Col = 3) är det som är lika med eller mer än 8? INGEN tur utanför topp ljus, halv XYZ, minska överste
Loop2 (ingång nummer = 6, XYZ = 4, Col = 2) är det som är lika med eller mer än 4? Ja slå på 3: e ljuset, subtrahera 4 från numret, hälften av XYZ och sänk överste
Loop3 (ingång nummer = 2, XYZ = 2, Col = 1) är det som är lika med eller mer än 2? Ja slå på 2: a ljus, subtrahera 2 från numret, hälften av XYZ och sänk överste
Loop4 (ingång nummer = 0, XYZ = 1, Col = 0) är det lika med eller mer än 1? INGEN tur bort botten ljus, halv XYZ och stegvis minskning av Col
På denna punkt du sedan öka rad Återställ XYZ och Col och gör samma rutin för TEN. Upprepa sedan för de minuter och timmar.
Slutligen för koden måste du sedan "Flip" sidan Colorduino för att visa den nya tiden, eller om tiden inte har förändrats sedan ändra färg.
void loop()
{
tmElements_t tm;
om (RTC.read(tm))
{
binaryOutput (tm. Andra).
RAD = RAD + 1.
binaryOutput (tm. Minut).
RAD = RAD + 1.
binaryOutput (tm. Timme).
RAD = 0;
}
Colorduino.FlipPage();
}
Så att markeringshandtagen läsning och visar tiden, nu Låt oss ta en titt på färgerna. Varje kolumn är inställd på en färg och nästa kolumn ändras av ett värde bestämmer med "steg" ju större antalet desto bättre färg variationen över kolumnerna 6. Jag tyckte att runt 8-12 är ett bra tal. Färgen bestäms av en rutin som äger ökas värdet på "g" (som då hette rainbow) en färg, en annan minskas och den 3: e är satt till noll, detta sedan cykler upp och ner genom alla färger och ger en fin regnbågseffekt (se diagram för en bättre förklaring). Ett problem jag hade som tog mycket lång tid att räkna ut den mycket enkel lösning var hur man gör regnbågen flytta långsamt i kolumnerna. eftersom jag har klivit färg mellan varje rad, om jag nu vill öka varje kolumn med endast 1 då jag måste ta hänsyn till vad den ursprungliga färgnummer var och återställa lägga "g" att antalet sedan en. Jag tror det är vettigt.
Så sista är hur du justera tiden???
Jag var inte riktigt säker på hur jag skulle justera denna klocka när jag började att bygga denna klocka, men eftersom det finns inga ingångar finns på styrelsens colorduino, jag gjorde en GPS klocka som du kan ansluta enheten RTC och rätta tiden. Jag kommer att lägga till en annan instructable på hur jag gjorde detta!