Hi everyone,
I'm trying to adc pin when arduino get's awake once reading is done im putting back to sleep. But problem is first time it will read correct value but second time when adc gets on ...im getting previous value don't know why ? i'm attaching my code please go throw it. im please help me !! ty
/******************************************************************************
WATERTANK MONITORING
PUSSHING DATA USING XBEE MODULE WITH LOW_POWER MODE
FEB 19th 2018
WRITTERN BY :
~
This sketch take the inputs from sensor and push it to gate
using XBEE rf module. This sketch allow to run in low power
mode.
Resources:
Wire.h (included with Arduino IDE)
SparkFunTMP102.h
Development environment specifics:
Arduino 1.0+
Hardware Version 13
Distributed as-is; no warranty is given.
*********************************TEMPRATURE SENSOR***********************************/
#include <Wire.h> // I2c LIBRARY
#include "SparkFunTMP102.h" // TMP102 LIBRARY
#include <EEPROM.h>
TMP102 sensor0(0x48); // TMP102 SENSOR ADDRESS.
int POWER = 13; // DIGITAL PIN FOR POWRING-UP SENSOR.
int STATUS = 12;
int USRT_OFF = 0;
int BatPin = A0;
/*********************************BATTERY READ**************************************/
float vout = 0.0;
float vin = 0.0;
float R1 = 100000.0;
float R2 = 10000.0;
/*********************************PROGRAM STARTS HERE******************************/
void setup() {
sensor0.begin(); //ENABLE SENSOR.
pinMode(POWER, OUTPUT); //SETTING POWER PIN AS OUTPUT
pinMode(STATUS, OUTPUT); //SETTING POWER PIN AS OUTPUT
pinMode(USRT_OFF, OUTPUT); //SETTING POWER PIN AS OUTPUT
for (int i=0; i<20; i++){ //SAVE POWER BY WRING ALL DIGITAL IO LOW
if(i != 2)
pinMode(i, OUTPUT); //DIGITAL PIN 2 USING AS A EXTERNAL INTERRUPT
pinMode(BatPin, INPUT); //BATTERT PIN
}
//SETUP WATCHDOG TIMER
WDTCSR = (24); //CHANGE ENABLE AND WDE - ALSO RESET
WDTCSR = (33); //PRESACLERS
WDTCSR |= (1<<6); //ENABLE INTERRUPT MODE
//ENABLE SLEEP
SMCR |= (1<<2); //POWER DOWN MODE
SMCR |= 1; //ENABLE SLEEP
}
/**********************************************************************************/
void loop() {
digitalWrite(POWER, HIGH); //TURNING ON POWER
digitalWrite(USRT_OFF, HIGH); //TURNING ON POWER
Serial.begin(9600); //ENABLE SERIAL COMMUNICATION FOR XBEE.
delay(2000); //WAITING 2SEC TO GET DEVICE ON
// ReadBat();
// delay(1000);
ReadTemp();
delay(2000); //WAIT FOR 5SEC
push();
Serial.end();
digitalWrite(POWER, LOW); //TURN OFF THE POWER
digitalWrite(USRT_OFF, LOW); //TURNING ON POWER
for (int i=0; i< 1; i++){ //SETTING WATCHDOG TIMER FOR 5MIN
//BOD DISABLE
MCUCR |= (3 << 5); //SET BOTH BOD AND BODSE AT THE SAME TIME
MCUCR = (MCUCR & ~(1 << 5 )) | (1 << 6); //THEN SET BOTH THE BITS AT THE SAME TIME
__asm__ __volatile__("sleep");
}
}
ISR(WDT_vect){
}
void push(){
digitalWrite(STATUS, HIGH);
delay(50);
digitalWrite(STATUS, LOW);
delay(50);
digitalWrite(STATUS, HIGH);
delay(50);
digitalWrite(STATUS, LOW);
delay(50);
}
//void ReadBat(){
// ADCSRA &= ~(0 << 7);
// int value = analogRead(BatPin);
// vout = (value * 3.4) / 1024.0;
// vin = vout / (R2/(R1+R2));
// Serial.println(vin);
// if(vin < 3.1){
// Serial.println("BatLow");
// }
// ADCSRA &= ~(1 << 7);
//}
void ReadTemp(){
ADCSRA &= ~(0 << 7); //ENABLE ADC
int temperature = sensor0.readTempC(); //READING TEMPRATURE
int value = analogRead(BatPin);
vout = (value * 3.4) / 1024.0;
vin = vout / (R2/(R1+R2));
Serial.println(vin);
Serial.println(temperature); //PUSHING TEMPRATURE DATA
ADCSRA &= ~(1 << 7); //DISABLE ADC
}
Moderator edit: code added to post for mobile users
NEW_LOWPOWER_TEMP_READ_WITH_BAT_READ.ino (3.95 KB)