0% found this document useful (0 votes)
51 views3 pages

Treasure Hunter Code

The document contains code for an Arduino sketch that controls a pulse width modulation (PWM) signal and reads sensor values using analog input. It initializes variables from EEPROM storage, generates PWM pulses at a set frequency and duty cycle, takes sensor readings with filtering, and sends data to a Bluetooth module.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
51 views3 pages

Treasure Hunter Code

The document contains code for an Arduino sketch that controls a pulse width modulation (PWM) signal and reads sensor values using analog input. It initializes variables from EEPROM storage, generates PWM pulses at a set frequency and duty cycle, takes sensor readings with filtering, and sends data to a Bluetooth module.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 3

#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;
//}
}

You might also like