Hodiny z NeoPixel Ring - reálny čas

Zápisník experimentátora

Translations: SK EN

Hierarchy: WS2812

V poslednom článku zo série o vytváraní hodín pripojíme ku obvodu hodiny reálneho času. Využijeme na to obvod DS1307, ktorý obsahuje v sebe hodiny reálneho času. Na jeho spojazdnenie budeme potrebovať iba niekoľko externých súčiastok.

Schéma

Voči predchádzajúcej schéme sa dopĺňa I2C pripojenie hodín reálneho času. I2C používa dva konkrétne piny a dva pull-up rezistory. Hodiny tvorí obvod DS1307. Podrobnosti o jeho používaní nájdete v samostatnom článku.

Reálny čas

Reálny čas potrebujeme pri štarte programu. Podľa neho nastavíme počiatočné polohy pre hodinové, minútové a sekundové ručičky.

#include <Time.h>
#include <DS1307RTC.h>

///
/// Program configuration
///
struct Configuration
{
ClockState cs;
bool show_millis;
int hour;
int minute;
int second;

Configuration()
: show_millis(SHOWMILLIS), cs(csClock), hour(STARTHOUR), minute(STARTMINUTE), second(0) {}
};
Configuration cfg;

///
/// Update all positions
///
void NeoClock::Update()
{
// we use fake time
uint32_t m=millis()+1000L*cfg.second+60000L*cfg.minute+3600000L*cfg.hour;

second = map ((m % 60000), 0, 60000, 0, CNT);
milli  = map ((m %  1000), 0,  1000, 0, CNT);
minute = map (((m/60000) % 60), 0,  60, 0, CNT);
hour =   map (((m/60000/60) % 12), 0,  12, 0, CNT);
}

///
/// Setup
///
void setup()
{
Serial.begin(9600);
while (!Serial) ; // wait for serial
Serial.println("NeoPixel Clock v. 1.4");
Serial.println("-------------------");
tmElements_t tm;
if (RTC.read(tm)) {
  Serial.print("Time = ");
  print2digits(tm.Hour);
  Serial.write(':');
  print2digits(tm.Minute);
  Serial.write(':');
  print2digits(tm.Second);
  Serial.print(", Date (D/M/Y) = ");
  Serial.print(tm.Day);
  Serial.write('/');
  Serial.print(tm.Month);
  Serial.write('/');
  Serial.print(tmYearToCalendar(tm.Year));
  Serial.println();
  
  cfg.second=tm.Second;
  cfg.minute=tm.Minute;
  cfg.hour=tm.Hour;
  }
  
strip.begin();
strip.show(); // Initialize all pixels to 'off'
strip.setBrightness(0); // disable flickering
}

Záver

V tejto sérii článkov sme prešli postupne niekoľkými bodmi a navrhli sme si hodiny so všetkými základnými funkciami. Stále máme priestor na vylepšovanie, ale to už je motiváciou pre vás, aby ste sa v prípade záujmu pohrali so zdrojovými textami a doplnili alebo vylepšili jeho správanie.



Download

10.09.2015


Menu