Stap 4: Analoge OnePixel klok
Nadat de krans werd gemaakt en gebruikt, opschoof met LED experimenten I, kennen mezelf met LED drivers, begon te experimenteren met zelfgemaakte PCB's. Een van de eerste dergelijke PCB's inbegrepen twee LED drivers (DM631) en was in staat voor het hosten van tien RGB LED's. Een beetje later ik een kleine houten koffer gevonden in een van de winkels en besloot om te huwen die twee. In feite wilde ik enkele ongewone dingen maken als cadeau voor een vriend van mij. Het eindresultaat was in ieder geval een onhandig gesoldeerd huisgemaakte prototype van de CofferClock (het apparaat ik ben zo trots op nu dat zelfs ben probeert te verkopen de nieuwere versies). Want dit een vroeg prototype was, vereiste het aantal levensechte testen, dus ik nam het mee op vakantie om te gebruiken als een bed klok. En daar vond ik dat het een analoge klok modus ontbrak.
Voorbeeld: je wakker ergens in de nacht. U hoeft niet te weten de exacte tijd, wil u gewoon weten of het is nacht of vroege ochtend en hoeveel slaap tijd die je nog hebt. Met een regelmatige OnePixel klok, vooral wanneer je min of meer nieuw voor het, het duurt enige tijd om te begrijpen wat het tonen (welke kleur is uren, minuten). Een enkele kleur weergegeven: geschatte tijd zou beter, dus ik nodig een extra 'nachtlampje'-modus.
De rest het eenvoudig: Ik nam een fundamentele spectrum cirkel van rood voor rood, mijn 6-uur-wijzerplaat Verdrag toegepast en daalde in sommige helderheid gebaseerde animaties voor extra koelte. Kleuren wijzigen naadloos over de uren, dus zeer red-ish roze is zoiets als 5:50, oranje is dichter bij 7, cyaan betekent over het algemeen drie in de ochtend, enz.
Hier is de functie van de schets in stap 2-het is de vierde wijze er.
void analogClock(){ int delayVal = 8; for (int k=0; k<52; k++) { r = (float)(RGBready[hourColor[hour]][0]*(60-minute) + RGBready[hourColor[(hour+1)%6]][0]*minute)/60; g = (float)(RGBready[hourColor[hour]][1]*(60-minute) + RGBready[hourColor[(hour+1)%6]][1]*minute)/60; b = (float)(RGBready[hourColor[hour]][2]*(60-minute) + RGBready[hourColor[(hour+1)%6]][2]*minute)/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); } for (int k=51; k>0; k--) { r = (float)(RGBready[hourColor[hour]][0]*(60-minute) + RGBready[hourColor[(hour+1)%6]][0]*minute)/60; g = (float)(RGBready[hourColor[hour]][1]*(60-minute) + RGBready[hourColor[(hour+1)%6]][1]*minute)/60; b = (float)(RGBready[hourColor[hour]][2]*(60-minute) + RGBready[hourColor[(hour+1)%6]][2]*minute)/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); }