diff options
author | Elena ``of Valhalla'' Grandi <elena.valhalla@gmail.com> | 2011-12-23 21:44:39 +0100 |
---|---|---|
committer | Elena ``of Valhalla'' Grandi <elena.valhalla@gmail.com> | 2011-12-23 21:44:39 +0100 |
commit | bf5436ca68fdbeb7c9e1f02900ec27913fba8fae (patch) | |
tree | 7d65c40aa4a9b9255940242d8140dfffbde47f5f /arduino_sketch | |
parent | 9d4e2e9f9969c291593090c7d4c1d6e1a67100e7 (diff) |
Better alarm ring via timer manipulation
Timer procedure by Diego
Diffstat (limited to 'arduino_sketch')
-rw-r--r-- | arduino_sketch/fuzzy_alarm_clock_ds1307/fuzzy_alarm_clock_ds1307.pde | 54 |
1 files changed, 28 insertions, 26 deletions
diff --git a/arduino_sketch/fuzzy_alarm_clock_ds1307/fuzzy_alarm_clock_ds1307.pde b/arduino_sketch/fuzzy_alarm_clock_ds1307/fuzzy_alarm_clock_ds1307.pde index 8a88b38..c08bd6a 100644 --- a/arduino_sketch/fuzzy_alarm_clock_ds1307/fuzzy_alarm_clock_ds1307.pde +++ b/arduino_sketch/fuzzy_alarm_clock_ds1307/fuzzy_alarm_clock_ds1307.pde @@ -3,7 +3,7 @@ #include <RealTimeClockDS1307.h> // minutes of "dawn" before alarm -#define TIN 30 +#define TIN 2 // "dawn" + "daylight" #define TDAY 45 // "dawn" + "daylight" + blue blinding light @@ -13,17 +13,22 @@ #define NALARMS 4 // pins and addressed -#define RPIN 3 -#define YPIN 5 -#define BPIN 6 +#define RPIN 5 +#define YPIN 6 +#define BPIN 9 -#define APIN 9 +#define APIN0 3 +#define APIN1 11 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 +bool ringing = false; // sound the alarm + +#define NFREQ 9 +int freq[] = { 255, 192, 128, 96, 64, 96, 128, 192, 255 }; // frequencies for the alarm void setup () { Serial.begin(9600); @@ -33,6 +38,11 @@ void setup () { pinMode(YPIN,OUTPUT); pinMode(BPIN,OUTPUT); + pinMode(APIN0,INPUT); + pinMode(APIN1,INPUT); + TCCR2A = _BV(COM2A0) | _BV(COM2B1) | _BV(WGM20); + TCCR2B = _BV(WGM22) | _BV(CS22); + digitalWrite(RPIN,255); digitalWrite(YPIN,255); digitalWrite(BPIN,0); @@ -90,9 +100,13 @@ void loop () { set_leds(); } if ( st == TIN ) { + ringing = true; + } else { + ringing = false; + } + if ( ringing ) { ring_alarm(); } - // wait about till the next second delay(1000); @@ -339,26 +353,14 @@ void set_leds() { // PC speaker // void ring_alarm() { - analogWrite(APIN,8); - delay(500); - analogWrite(APIN,0); - delay(500); - analogWrite(APIN,16); - delay(500); - analogWrite(APIN,0); - delay(500); - analogWrite(APIN,32); - delay(500); - analogWrite(APIN,0); - delay(500); - analogWrite(APIN,64); - delay(500); - analogWrite(APIN,0); - delay(500); - analogWrite(APIN,128); - delay(500); - analogWrite(APIN,0); - delay(500); + + pinMode(APIN1,OUTPUT); + for (int i=0; i<NFREQ ; i++) { + OCR2A = freq[i]; + delay(50); + } + pinMode(APIN1,INPUT); + } // vim: set filetype=c: |