1 | // ATMEL ATTINY 25/45/85 / ARDUINO
|
2 | //
|
3 | // +-\/-+
|
4 | // Ain0 (D 5) PB5 1| |8 Vcc
|
5 | // Ain3 (D 3) PB3 2| |7 PB2 (D 2) Ain1
|
6 | // Ain2 (D 4) PB4 3| |6 PB1 (D 1) pwm1
|
7 | // GND 4| |5 PB0 (D 0) pwm0
|
8 | // +----+
|
9 |
|
10 |
|
11 |
|
12 | #include <avr/sleep.h> // Sleep Modes
|
13 | #include <avr/power.h> // Power management
|
14 | #include <avr/wdt.h> // Watchdog timer
|
15 | #include <VirtualWire.h>
|
16 |
|
17 | int sensorPin = A1; //zum lesen der Daten
|
18 | char daten[10];
|
19 | int ID;
|
20 | const int PIN_LED = 4;
|
21 | const int strom = 1;
|
22 | int keep_ADCSRA;
|
23 | int a;
|
24 | int wert;
|
25 |
|
26 |
|
27 | ISR (PCINT0_vect)
|
28 | {
|
29 | // do something interesting here
|
30 | } // end of PCINT0_vect
|
31 |
|
32 | // watchdog interrupt
|
33 | ISR (WDT_vect)
|
34 | {
|
35 | wdt_disable(); // disable watchdog
|
36 |
|
37 | } // end of WDT_vect
|
38 |
|
39 | void resetWatchdog ()
|
40 | {
|
41 | // clear various "reset" flags
|
42 | MCUSR = 0;
|
43 | // allow changes, disable reset, clear existing interrupt
|
44 | WDTCR = bit (WDCE) | bit (WDE) | bit (WDIF);
|
45 | // set interrupt mode and an interval (WDE must be changed from 1 to 0 here)
|
46 | WDTCR = bit (WDIE) | bit (WDP3) | bit (WDP0); // set WDIE, and 8 seconds delay
|
47 | // pat the dog
|
48 | wdt_reset();
|
49 | } // end of resetWatchdog
|
50 |
|
51 | void setup ()
|
52 | {
|
53 | resetWatchdog (); // do this first in case WDT fires
|
54 | // Transmitter is connected to Arduino Pin #10
|
55 | pinMode(PIN_LED, OUTPUT);
|
56 | pinMode(strom, OUTPUT);
|
57 | // VirtualWire setup
|
58 | vw_setup(1000); // Bits per sec
|
59 | vw_set_tx_pin(3);//
|
60 |
|
61 |
|
62 | }
|
63 |
|
64 | void loop ()
|
65 | {
|
66 | ADCSRA |= (1<<ADEN);
|
67 | delay(100);
|
68 |
|
69 | ID = 2;
|
70 | //a++;
|
71 | //keep_ADCSRA = ADCSRA;
|
72 |
|
73 | memset(daten, 0, sizeof daten); // Inhalt der Variblen (char) löschen
|
74 | digitalWrite(strom, HIGH);
|
75 | digitalWrite(PIN_LED, HIGH);
|
76 | delay(50);
|
77 | analogRead(sensorPin);
|
78 | delay(300);
|
79 |
|
80 | wert = analogRead(sensorPin);
|
81 | sprintf(daten, "%d,%d", ID, wert);
|
82 | //delay(1000);
|
83 | vw_send((uint8_t *)daten, strlen(daten));
|
84 | vw_wait_tx(); // Wait until the whole message is gone
|
85 |
|
86 | //delay(1000);
|
87 | digitalWrite(strom, LOW);
|
88 | digitalWrite(PIN_LED, LOW);
|
89 | //Schlafen gehen
|
90 | for (int i=0; i<2; i++){ //Hier schläft er jetzt 8 Sekunden 450 ist eine Stunde
|
91 | goToSleep ();
|
92 |
|
93 | }
|
94 |
|
95 | //ADCSRA = keep_ADCSRA;
|
96 | //delay(50);
|
97 | } // end of loop
|
98 |
|
99 | void goToSleep ()
|
100 | {
|
101 | set_sleep_mode (SLEEP_MODE_PWR_DOWN);
|
102 | ADCSRA = 0; // turn off ADC 0,27 mA ohne 6,51
|
103 | power_all_disable (); // power off ADC, Timer 0 and 1, serial interface
|
104 | noInterrupts (); // timed sequence coming up
|
105 | resetWatchdog (); // get watchdog ready
|
106 | sleep_enable (); // ready to sleep
|
107 | interrupts (); // interrupts are required now
|
108 | sleep_cpu (); // sleep
|
109 | sleep_disable (); // precaution
|
110 | power_all_enable (); // power everything back on
|
111 | } // end of goToSleep
|