#include <EEPROM.h>//https://github.com/espressif/arduino-esp32/tree/master/libraries/EEPROM
const int trigPin = 5;
const int echoPin = 18;
const int FULL_ADD = 1;
const int EMPTY_ADD = 2;
char* FULL_MODE = "F";
char* EMPTY_MODE = "E";
char* NONE_MODE = "N";
//define sound speed in cm/uS
#define SOUND_SPEED 0.034
long duration;
float distanceCm;
float dist = 0;
float cm = 0;
float perc = 0;
float vol = 0;
char* mode;
int full = 10;
int empty = 150;
void setup() {
mode = NONE_MODE;
Serial.begin(115200); // Starts the serial communication
pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
pinMode(echoPin, INPUT); // Sets the echoPin as an Input
full = EEPROM.read(FULL_ADD);
if (!full) full = 10;
empty = EEPROM.read(EMPTY_ADD);
if (!empty) empty = 150;
}
void loop() {
serialReadVal();
serialReadMode();
dist = getDistance();
if (dist > empty) {
dist = empty;
}
cm = (empty - full) - (dist - full);
perc = cm / (empty - full) * 100;
vol = 1500 * perc / 100;
printData();
delay(5000);
}
void serialReadVal() {
if (Serial.available() > 0 && (mode == EMPTY_MODE || mode == FULL_MODE) ) {
Serial.println("READ VAL MODE");
int serialIn = Serial.read();
// say what you got:
Serial.print("I received: ");
Serial.println(serialIn, DEC);
if (mode == EMPTY_MODE) {
empty = 150;
EEPROM.write(EMPTY_ADD, empty);
} else if (mode == FULL_MODE) {
full = 10;
EEPROM.write(FULL_ADD, full);
}
}
}
void serialReadMode() {
if (Serial.available() > 0 && mode == NONE_MODE) {
String serialIn = Serial.readString();
serialIn.trim();
if (serialIn[0] == 'E' ) {
mode = EMPTY_MODE;
Serial.println("Set mode E");
} else if ( serialIn == "F") {
mode = FULL_MODE;
Serial.println("Set mode F");
} else {
Serial.println("Nothing to do with this mode ! " );
}
}
}
void printData() {
Serial.print(dist);
Serial.println("cm (detected)");
Serial.print(cm);
Serial.println("cm of fuel");
Serial.print(perc);
Serial.println("% of fuel");
Serial.print(vol);
Serial.println("l of fuel");
Serial.print("Tank is full when ");
Serial.print(full);
Serial.println("cm is detected");
Serial.print("Tank is empty when ");
Serial.print(empty);
Serial.println("cm is detected");
Serial.println("-----------------------------");
}
long getDistance() {
// Clears the trigPin
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// Sets the trigPin on HIGH state for 10 micro seconds
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Reads the echoPin, returns the sound wave travel time in microseconds
duration = pulseIn(echoPin, HIGH);
// Calculate the distance
distanceCm = duration * SOUND_SPEED / 2;
return distanceCm;
}