| | #include <avr/sleep.h> |
---|
| | #include <avr/wdt.h> |
---|
| | #ifndef cbi |
---|
| | #define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit)) |
---|
| | #endif |
---|
| | #ifndef sbi |
---|
| | #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit)) |
---|
| | #endif |
---|
| | |
---|
| | int led = 1; // the PWM pin the LED is attached to |
---|
| | volatile boolean f_wdt = 1; |
---|
| | int counter = 0; |
---|
| | |
---|
| | // the setup routine runs once when you press reset: |
---|
| | void setup() { |
---|
| | pinMode(led, OUTPUT); |
---|
| | setup_watchdog(15); // approximately 4 seconds sleep |
---|
| | |
---|
| | } |
---|
| | |
---|
| | void fade(){ |
---|
| | for (int i = 0; i < 255; i++){ |
---|
| | analogWrite(led, i); |
---|
| | delay(5); |
---|
| | } |
---|
| | for (int i = 255; i > 0; i--){ |
---|
| | analogWrite(led, i); |
---|
| | delay(5); |
---|
| | } |
---|
| | } |
---|
| | |
---|
| | void jumpFade(){ |
---|
| | for(int i = 0; i < 6; i++){ |
---|
| | int j = i * 50; |
---|
| | analogWrite(led, j); |
---|
| | delay(500); |
---|
| | } |
---|
| | for(int i = 5; i > 0; i--){ |
---|
| | int j = i * 50; |
---|
| | analogWrite(led, j); |
---|
| | delay(500); |
---|
| | } |
---|
| | } |
---|
| | |
---|
| | void morse(){ |
---|
| | lS(); |
---|
| | lA(); |
---|
| | lY(); |
---|
| | space(); |
---|
| | lH(); |
---|
| | lI(); |
---|
| | space(); |
---|
| | } |
---|
| | |
---|
| | void loop() { |
---|
| | if (f_wdt==1) { // wait for timed out watchdog / flag is set when a watchdog timeout occurs |
---|
| | f_wdt=0; // reset flag |
---|
| | } |
---|
| | |
---|
| | fade(); |
---|
| | fade(); |
---|
| | fade(); |
---|
| | system_sleep(); |
---|
| | |
---|
| | jumpFade(); |
---|
| | jumpFade(); |
---|
| | jumpFade(); |
---|
| | system_sleep(); |
---|
| | |
---|
| | morse(); |
---|
| | morse(); |
---|
| | morse(); |
---|
| | system_sleep(); |
---|
| | } |
---|
| | |
---|
| | //functions for the letters and the numbers |
---|
| | void lA () {dot();dash();shortspace();}//letter A in morse code! |
---|
| | void lB () {dash();dot();dot();dot();shortspace();}//same for B |
---|
| | void lC () {dash();dot();dash();dot();shortspace();} |
---|
| | void lD () {dash();dot();dot();shortspace();} |
---|
| | void lE () {dot();shortspace();} |
---|
| | void lF () {dot();dot();dash();dot();shortspace();} |
---|
| | void lG () {dash();dash();dot();shortspace();} |
---|
| | void lH () {dot();dot();dot();dot();shortspace();} |
---|
| | void lI () {dot();dot();shortspace();} |
---|
| | void lJ () {dot();dash();dash();dash();shortspace();} |
---|
| | void lK () {dash();dot();dash();shortspace();} |
---|
| | void lL () {dot();dash();dot();dot();shortspace();} |
---|
| | void lM () {dash();dash();shortspace();} |
---|
| | void lN () {dash();dot();shortspace();} |
---|
| | void lO () {dash();dash();dash();shortspace();} |
---|
| | void lP () {dot();dash();dash();dot();shortspace();} |
---|
| | void lQ () {dash();dash();dot();dash();shortspace();} |
---|
| | void lR () {dot();dash();dot();shortspace();} |
---|
| | void lS () {dot();dot();dot();shortspace();} |
---|
| | void lT () {dash();shortspace();} |
---|
| | void lU () {dot();dot();dash();shortspace();} |
---|
| | void lV () {dot();dot();dot();dash();shortspace();} |
---|
| | void lW () {dot();dash();dash();shortspace();} |
---|
| | void lX () {dash();dot();dot();dash();shortspace();} |
---|
| | void lY () {dash();dot();dash();dash();shortspace();} |
---|
| | void lZ () {dash();dash();dot();dot();shortspace();} |
---|
| | void n1 () {dot();dash();dash();dash();dash();shortspace();}//number 1 in morse code |
---|
| | void n2 () {dot();dot();dash();dash();dash();shortspace();} |
---|
| | void n3 () {dot();dot();dot();dash();dash();shortspace();} |
---|
| | void n4 () {dot();dot();dot();dot();dash();shortspace();} |
---|
| | void n5 () {dot();dot();dot();dot();dot();shortspace();} |
---|
| | void n6 () {dash();dot();dot();dot();dot();shortspace();} |
---|
| | void n7 () {dash();dash();dot();dot();dot();shortspace();} |
---|
| | void n8 () {dash();dash();dash();dot();dot();shortspace();} |
---|
| | void n9 () {dash();dash();dash();dash();dot();shortspace();} |
---|
| | void n0 () {dash();dash();dash();dash();dash();shortspace();} |
---|
| | void space () {delay (1200);}//space between words |
---|
| | void dot () {analogWrite(led, 150); delay (300); digitalWrite(led,LOW); delay (300);}//the dot this code make the led on for 300 than off for 300 |
---|
| | void dash () {analogWrite(led, 150); delay (900); digitalWrite(led,LOW); delay (300);}//the dash this code make the led on for 900 than off for 300 |
---|
| | void shortspace () {delay(600);}//space between letters |
---|
| | |
---|
| | // set system into the sleep state |
---|
| | // system wakes up when wtchdog is timed out |
---|
| | void system_sleep() { |
---|
| | digitalWrite(led,LOW); |
---|
| | cbi(ADCSRA,ADEN); // switch Analog to Digitalconverter OFF |
---|
| | set_sleep_mode(SLEEP_MODE_PWR_DOWN); // sleep mode is set here |
---|
| | sleep_enable(); |
---|
| | sleep_mode(); // System sleeps here |
---|
| | sleep_disable(); // System continues execution here when watchdog timed out |
---|
| | sbi(ADCSRA,ADEN); // switch Analog to Digitalconverter ON |
---|
| | } |
---|
| | // 0=16ms, 1=32ms,2=64ms,3=128ms,4=250ms,5=500ms |
---|
| | // 6=1 sec,7=2 sec, 8=4 sec, 9= 8sec |
---|
| | void setup_watchdog(int ii) { |
---|
| | byte bb; |
---|
| | int ww; |
---|
| | if (ii > 9 ) ii=9; |
---|
| | bb=ii & 7; |
---|
| | if (ii > 7) bb|= (1<<5); |
---|
| | bb|= (1<<WDCE); |
---|
| | ww=bb; |
---|
| | MCUSR &= ~(1<<WDRF); |
---|
| | // start timed sequence |
---|
| | WDTCR |= (1<<WDCE) | (1<<WDE); |
---|
| | // set new watchdog timeout value |
---|
| | WDTCR = bb; |
---|
| | WDTCR |= _BV(WDIE); |
---|
| | } |
---|
| | |
---|
| | // Watchdog Interrupt Service / is executed when watchdog timed out |
---|
| | ISR(WDT_vect) { |
---|
| | counter++; |
---|
| | f_wdt=1; // set global flag |
---|
| | } |
---|
| | |
---|
| | |