- #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
- }