I'm writing a code where analogRead()
reads ADC value from load. After reading ADC value, if it is not in range, I need to manipulate Timer1 value. Which is also getting changed.
But, after changing the Timer value, if the load value again gets restored, ADC doesn't show the same value again, but shows some other value.
Please refer below code:
#include <TimerOne.h>
int LED = 13;
int IN0 = 12;
int IN1 = 11;
int OUT1 = 10;
int OUT2 = 9;
int OUT3 = 8;
int OUT4 = 7;
//float A0;
//int OUT5 = 6;
const float refvolt = 5.0;
int volts = 0;
byte tempL_flag = 0;
float samples, loadval, avgacs, acsvaluef =0;
float refval = 2.0;
bool lflag=0;
unsigned long count = 0;
void setup()
{
pinMode(IN0, INPUT);
pinMode(IN1, INPUT);
pinMode(OUT1, OUTPUT);
pinMode(OUT2, OUTPUT);
pinMode(OUT3, OUTPUT);
pinMode(OUT4, OUTPUT);
pinMode(LED, OUTPUT);
pinMode(A0, INPUT);
//digitalWrite(OUT3, LOW);
Timer1.initialize(370000);
Serial.begin(9600);
}
word ADC_READ(byte sample, byte tim, byte CH)
{
word adcdata;
word avrdata;
word abcdata;
byte i;
for(i=0; i<sample; i++)
{
adcdata = 0;
adcdata = analogRead(CH);
avrdata = avrdata + adcdata;
delay(tim);
}
return(avrdata/sample);
}
void flash_L()
{
digitalWrite(LED, !digitalRead(LED));
digitalWrite(OUT4, !digitalRead(OUT4));
if (digitalRead(OUT4)==1)
{
loadval = ADC_READ(10, 10, A5);
Serial.println(loadval);
if(loadval < refval)
{
Timer1.initialize(185000);
}
else
{
tempL_flag = 1;
}
return;
}
}
void loop() {
delay(2000);
if(digitalRead(IN0)==1)
{
Timer1.attachInterrupt(flash_L);
}
else if(digitalRead(IN0)==0)
{
digitalWrite(LED, LOW);
digitalWrite(OUT4, LOW);
}
}