#include #include #include #include #define DEBUG 0 #define SEND_INTERVAL (int)(5*60/8) // Pins #define SENDER PIN_B4 #define TEMP_PIN A1 #if DEBUG #define RxD PIN_B3 #define TxD PIN_B4 SoftwareSerial AttinySerial(RxD, TxD); #endif int readTemp(); TempSensor sensor = TempSensor(TEMP_SENSOR, SENDER); volatile int counter = 0; volatile bool shouldSend = true; void setup() { #if DEBUG AttinySerial.begin(9600); AttinySerial.println("starting..."); #endif sensor.setup(); analogReference(INTERNAL); TinyPower::setup(); TinyPower::enableWdt(WDTO_8S); } void loop() { if (shouldSend) { shouldSend = false; sensor.sendTemp(readTemp()); } TinyPower::sleep(); } int readTemp() { int reading = analogRead(TEMP_PIN); #if DEBUG AttinySerial.println(reading); #endif float voltage = reading * (1100 / 1024.0); #if DEBUG AttinySerial.print(voltage); AttinySerial.println(" mili volts"); #endif float temperatureC = (voltage - 500) / 10; #if DEBUG AttinySerial.print(temperatureC); AttinySerial.println(" degrees C"); #endif return roundf(temperatureC * 10); } ISR(PCINT0_vect) { } ISR(WDT_vect) { counter++; if (counter % SEND_INTERVAL == 0) { shouldSend = true; counter = 0; } }