Med en enda RGB LED (eller en LED strip) för att visa information: klocka, termometer och en konstig kommunikatör (4 / 7 steg)
Steg 4: Analog OnePixel klocka
Efter garland gjordes och används, I flyttade vidare med LED experiment, blivit bekant med LED drivers, började experimentera med hemgjorda PCB. En av första sådan PCB ingår två ledde drivrutiner (DM631) och var värd tio RGB lysdioder. Lite senare jag hittade en liten trä kistan i en av butikerna och beslutat att kombinera dessa två. I själva verket ville jag göra lite ovanliga saker som present för en vän till mig. Slutresultatet blev i alla fall en klumpigt lödde hemgjorda prototyp av CofferClock (den enhet jag är så stolt över nu när ens försöker att sälja nyare versioner). Eftersom detta var en tidig prototyp, krävs det några verkliga tester, så jag tog med mig på semester att använda som en säng klocka. Och det jag fann att det saknades en analog klockläge.
Exempel: du vaknar någon gång på natten. Du inte behöver veta exakt tid, vill du bara veta om det är natt eller tidigt på morgonen och hur mycket sovande tid du har kvar. Med en vanlig OnePixel klocka, särskilt när du är mer eller mindre ny till det, det tar tid att förstå vad det är visar (vilken färg är timmar, dvs minuter). En enda färg visar Ungefärlig tid skulle vara bättre, så jag behövde en extra "nattljus" läge.
Resten det enkelt: Jag tog en grundläggande spektrum cirkel från rött till rött, tillämpas min 6-timmars-clockface konventionen och tappade i vissa ljusstyrka-baserade animationer för extra svalka. Färger ändrar sömlöst över timmar, så mycket red-ish rosa är ungefär 5:50, orange är närmare 7, cyan innebär i allmänhet tre på morgonen, etc.
Här är funktionen från skissen i steg 2-det är den fjärde läget där.
void analogClock()
{
int delayVal = 8;
för (int k = 0; k < 52; k ++)
{
r = (float)(RGBready[hourColor[hour]][0]*(60-minute) + RGBready [hourColor [(hour+1) %6]] [0] * minut) / 60;
g = (float)(RGBready[hourColor[hour]][1]*(60-minute) + RGBready [hourColor [(hour+1) %6]] [1] * minut) / 60;
b = (float)(RGBready[hourColor[hour]][2]*(60-minute) + RGBready [hourColor [(hour+1) %6]] [2] * minut) / 60;
r = (uint16_t)(r*(lights[k]*2+30)) >> 8.
g = (uint16_t)(g*(lights[k]*2+30)) >> 8.
b = (uint16_t)(b*(lights[k]*2+30)) >> 8.
setRGBpoint (0, r, g, b);
Delay(delayVal);
}
för (int k = 51; k > 0; k--)
{
r = (float)(RGBready[hourColor[hour]][0]*(60-minute) + RGBready [hourColor [(hour+1) %6]] [0] * minut) / 60;
g = (float)(RGBready[hourColor[hour]][1]*(60-minute) + RGBready [hourColor [(hour+1) %6]] [1] * minut) / 60;
b = (float)(RGBready[hourColor[hour]][2]*(60-minute) + RGBready [hourColor [(hour+1) %6]] [2] * minut) / 60;
r = (uint16_t)(r*(lights[k]*2+30)) >> 8.
g = (uint16_t)(g*(lights[k]*2+30)) >> 8.
b = (uint16_t)(b*(lights[k]*2+30)) >> 8.
setRGBpoint (0, r, g, b);
Delay(delayVal);
}
Delay(delayVal*30);
}