#include <EEPROM.
h>
#include <SoftwareSerial.h>
#include "MovingAverage.h"
#define pulsePin 2
int bluetoothTx = 6;
int bluetoothRx = 5;//blutoth module terminal RX
SoftwareSerial bluetooth(bluetoothTx, bluetoothRx);
MovingAverage filter(5);
char data;
//EEPROM variables
int addr_duty = 0;
int addr_freq = 1;
int stored_value;
int duty_cycle;int flag=1;
int duty_cycle_temp;
int freq;
int freq_temp;
int duty_def_value = 10;
int freq_def_value = 60;
//Balance variables
int value_count = 0;
int value_count_def = 100;
int balance_value = 0;
int balance_value_temp = 0;
unsigned long startMillis;
unsigned long currentMillis;
long period = 100000; //the value is a number of microseconds
float vinv=0.00;
int sensorValue,asVal=0;
unsigned char mainVal;unsigned char readVal=0;
void setup() {
analogReference(EXTERNAL);
bluetooth.begin(9600);
Serial.begin(115200);
readFromStorage(addr_duty);
duty_cycle = stored_value;
readFromStorage(addr_freq);
freq = stored_value;
if(duty_cycle == 0 || duty_cycle == 255){
writeToStorage(duty_def_value,addr_duty);
readFromStorage(addr_duty);
duty_cycle = stored_value;
}
if(freq == 0 || freq == 255 ){
writeToStorage(freq_def_value,addr_freq);
readFromStorage(addr_freq);
freq = stored_value;
}
pinMode(pulsePin, OUTPUT);
}
void loop() {
if(bluetooth.available()>0)
{
char val = bluetooth.read();
if(val == 'C')
{
bluetooth.write(findMin());
flag=2;
//bluetooth.print("Calibrating Done!");
delay(2000);
//bluetooth.println();
}
}
if(flag==2)
{
//bluetooth.println(analogRead(A0)/5);
sensorWork();
sendData();
}
void sensorWork()
{
currentMillis = micros();
if(currentMillis - startMillis >= period)
{
period = 1000000 / freq;
// Serial.println(period);
digitalWrite(pulsePin, HIGH);
duty_cycle_temp = duty_cycle * 10;
delayMicroseconds(duty_cycle_temp);
digitalWrite(pulsePin, LOW);
for(int i = 0;i < 3; i++){
sensorValue = analogRead(A0);
//Serial.println(sensorValue);
}
delayMicroseconds(10);
sensorValue = analogRead(A0);
sensorValue = sensorValue / 5;
//Serial.println(sensorValue);
sensorValue = filter.addSample(sensorValue);
//sensorValue = Filter.run(sensorValue);
//sendData();
//mainVal = sensorValue;
startMillis = currentMillis;
}
//return sensorValue;
}
void writeToStorage(int valor,int addr)
{
EEPROM.write(addr, valor);
}
int readFromStorage(int addr)
{
stored_value = EEPROM.read(addr);
return stored_value;
}
void sendData()
{
delay(100);
bluetooth.write(sensorValue);
}
int findMin()
{
int adcVal=0,minVal=204,j;
for(j=0;j<=14;j++)
{
delay(8);
adcVal = sensorCheck();
if(adcVal < minVal)
{
minVal = adcVal;
}
}
return minVal;
}
unsigned char sensorCheck()
{
int m;
currentMillis = micros();
period = 1000000 / freq;
while(currentMillis - startMillis <= period);
//{
digitalWrite(pulsePin, HIGH);
duty_cycle_temp = duty_cycle * 10;
delayMicroseconds(duty_cycle_temp);
digitalWrite(pulsePin, LOW);
for(m = 0;m < 3; m++){
readVal = analogRead(A0)/5;
}
delayMicroseconds(10);
readVal = analogRead(A0)/5;
//readVal = readVal / 5;
//readVal = filter.addSample(readVal);
startMillis = currentMillis;
return readVal;
//}
}