From 95e2e76f826079870d401609723283111a877658 Mon Sep 17 00:00:00 2001 From: Elena ``of Valhalla'' Grandi Date: Fri, 2 Sep 2011 22:32:53 +0200 Subject: Serial management --- ds1307/arduino_sketch/fuzzy_alarm_clock_ds1307.pde | 173 +++++++++++++++++++-- 1 file changed, 158 insertions(+), 15 deletions(-) diff --git a/ds1307/arduino_sketch/fuzzy_alarm_clock_ds1307.pde b/ds1307/arduino_sketch/fuzzy_alarm_clock_ds1307.pde index 53b2abe..224706a 100644 --- a/ds1307/arduino_sketch/fuzzy_alarm_clock_ds1307.pde +++ b/ds1307/arduino_sketch/fuzzy_alarm_clock_ds1307.pde @@ -21,6 +21,7 @@ int st = 0; // alarm status (minutes from alarm - TIN) char alarms[NALARMS][5]; // alarm settings char cmin; // current minute int a = -1; // current alarm +char dbg = 0; // print debug informations void setup () { Serial.begin(9600); @@ -50,10 +51,6 @@ void setup () { } st = 0; a = -1; - // DEBUG: we don't want to set the time until we receive - // it from serial, but serial is not implemented yet - alarms[0] = {16,0,0,13,40}; - set_time(11,9,2,5,13,39,30); } else { st = RTC.readData(0x08); a = RTC.readData(0x09); @@ -72,11 +69,20 @@ void setup () { void loop () { // read commands from serial + check_serial(); // read time, check alarms check_time(); - //DEBUG - Serial.println(st); + + if ( dbg ) { + s_print_time(); + Serial.print("st: "); + Serial.print(st,DEC); + Serial.print(", a: "); + Serial.print(a,DEC); + Serial.print(", cmin: "); + Serial.println(cmin,DEC); + } // act on status: LEDs and buzzer if ( st > 0 ) { @@ -89,6 +95,149 @@ void loop () { } +// ****** Serial interface management *************************************** // + +void check_serial() { + int rec = Serial.read(); + switch (rec) { + case 'a': + s_set_alarm(); + break; + case 's': + s_set_time(); + break; + case 'p': + s_print_alarms(); + break; + case 't': + s_print_time(); + break; + case 'd': + s_toggle_debug(); + break; + case 'h': + s_print_help(); + break; + } +} + +void s_set_alarm() { + int i = s_read_dig(); + for ( int j = 0; j < 5 ; j++) { + alarms[i][j] = s_read_2hex(); + } + for ( int j = 0; j < 5 ; j++ ) { + RTC.writeData(0x0b + i*5 + j,alarms[i][j]); + } + Serial.print("Alarm "); + Serial.print(i,DEC); + Serial.println(" set."); +} + +void s_set_time() { + RTC.setYear(s_read_2dig()); + RTC.setMonth(s_read_2dig()); + RTC.setDate(s_read_2dig()); + RTC.setDayOfWeek(s_read_dig()); + RTC.setHours(s_read_2dig()); + RTC.setMinutes(s_read_2dig()); + RTC.setSeconds(s_read_2dig()); + RTC.setClock(); + Serial.print("Time set: "); + s_print_time(); +} + +int s_read_dig() { + int rec; + rec = Serial.read(); + while ( rec == -1 ) { + rec = Serial.read(); + } + return rec - 48; +} + +int s_read_2dig() { + int n; + n = s_read_dig() * 10; + n = n + s_read_dig(); + return n; +} + +int s_read_hex() { + int rec; + rec = Serial.read(); + while ( rec == -1 ) { + rec = Serial.read(); + } + if ( rec >= 48 && rec < 58 ) { + return rec - 48; + } else if ( rec >= 65 && rec < 71 ) { + return rec - 55; + } else if ( rec > 97 && rec < 102 ) { + return rec - 87; + } else { + return 0; + } +} + +int s_read_2hex() { + int n; + n = s_read_hex() * 16; + n = n + s_read_hex(); + return n; +} + +void s_print_alarms() { + for ( int i = 0; i < NALARMS ; i++) { + Serial.print(i,DEC); + Serial.print(" - "); + for ( int j = 0; j < 5 ; j++) { + Serial.print(alarms[i][j],DEC); + Serial.print(" "); + } + Serial.println(""); + } +} + +void s_print_time() { + RTC.readClock(); + Serial.print(RTC.getYear(),DEC); + Serial.print("/"); + Serial.print(RTC.getMonth(),DEC); + Serial.print("/"); + Serial.print(RTC.getDate(),DEC); + Serial.print(" ("); + Serial.print(RTC.getDayOfWeek(),DEC); + Serial.print(") "); + Serial.print(RTC.getHours(),DEC); + Serial.print(":"); + Serial.print(RTC.getMinutes(),DEC); + Serial.print(":"); + Serial.println(RTC.getSeconds(),DEC); +} + +void s_toggle_debug() { + if ( dbg ) { + dbg = 0; + } else { + dbg = 1; + } +} + +void s_print_help() { + Serial.println(""); + Serial.println(" a - set an alarm"); + Serial.println(" is"); + Serial.println(" s - set the clock"); + Serial.println(" is yymmgguHHMMSS"); + Serial.println(" p - print the alarms"); + Serial.println(" t - print the clock"); + Serial.println(" d - toggle printing of debug informations"); + Serial.println(" h - print this help"); +} + +// ****** Time management *************************************************** // + // Set the current time void set_time(int y,int m,int d, int w, int hh, int mm, int ss) { RTC.setYear(y); @@ -111,14 +260,6 @@ void check_time() { int day = RTC.getDate(); int month = RTC.getMonth(); - // DEBUG - Serial.print("Time: "); - Serial.print(hour,DEC); - Serial.print(":"); - Serial.print(mm,DEC); - Serial.print(":"); - Serial.println(RTC.getSeconds()); - if ( a < 0 ) { for ( int i = 0; i < NALARMS ; i ++ ) { // check alarm i @@ -150,6 +291,8 @@ void check_time() { } +// ****** LED management **************************************************** // + void set_leds() { if ( st > 0 && st <= TIN) { int y = int(float(st*255)/TIN); @@ -160,7 +303,7 @@ void set_leds() { analogWrite(RPIN,0); analogWrite(YPIN,255); analogWrite(BPIN,0); - }else if (st >= TDAY && st < TOUT) { + } else if (st >= TDAY && st < TOUT) { analogWrite(RPIN,0); analogWrite(YPIN,0); analogWrite(BPIN,255); -- cgit v1.2.3