Okay, my problem is I cannot think of any logic that can save data on the Arduino's EEPROM with my program.
This is my code. As you can see, it has the variable ctr for counter, the one that determines the unit of length (meter, cm, ft, in, yd), and the variables mctr1, cmctr1, ftctr1, inctr1, ydctr1 for the respective units of length. The job is to:
- Save the data at the point when ssbtn is low.
- Save the data after the switch-case function inside the measurebtn.
- Retrieve the data whenever the Arduino is reset (meaning, at initialization, the code should first check if the EEPROM has the saved data or none).
#include <LiquidCrystal.h>
#include <stdio.h>
LiquidCrystal lcd(12,11,5,4,3,2);
byte p20[8] = {
B10000,
B10000,
B10000,
B10000,
B10000,
B10000,
B10000,
};
byte p40[8] = {
B11000,
B11000,
B11000,
B11000,
B11000,
B11000,
B11000,
};
byte p60[8] = {
B11100,
B11100,
B11100,
B11100,
B11100,
B11100,
B11100,
};
byte p80[8] = {
B11110,
B11110,
B11110,
B11110,
B11110,
B11110,
B11110,
};
byte p100[8] = {
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
};
const int measurebtn = 7;
const int ssbtn = 6;
const int resetbtn = 9;
const int ledPin = 13;
const int sensorPin = 8;
int ext = 0;
int cctr = 0;
int sctr = 0;
int pctr = 0;
int ctr=0;
int tripState = 0;
float pctr1 = 0;
float measure = 0;
int measurectr = 0;
int prevmeasure = 0;
int ssctr = 0;
int prevss = 0;
int resetctr = 0;
int prevreset = 0;
int prevsensor = 0;
int ctr2 = 5;
float mctr1 = 0, cmctr1 = 0, ftctr1 = 0, inctr1 = 0, ydctr1 = 0;
void setup() {
lcd.begin(16,2);
pinMode(measurebtn, INPUT);
pinMode(ssbtn, INPUT);
pinMode(resetbtn, INPUT);
Serial.begin(9600);
lcd.print("LOADING..");
lcd.createChar(0, p20);
lcd.createChar(1, p40);
lcd.createChar(2, p60);
lcd.createChar(3, p80);
lcd.createChar(4, p100);
lcd.setCursor(0, 1);
lcd.print(" ");
for (int i = 0; i<16; i++)
{
for (int j = 0; j<5; j++)
{
lcd.setCursor(i,1);
lcd.write(j);
delay(50);
}
}
lcd.clear();
lcd.setCursor(0,0); lcd.print("0.00");
lcd.setCursor(0,1); lcd.print("YARDS");
}
void loop() {
measurectr = digitalRead(measurebtn);
if (measurectr == HIGH && measurectr != prevmeasure){
lcd.clear();
ctr2 += 1;
ctr = ctr2 % 5;
Serial.print("count: ");
Serial.println(ctr);
Serial.print("counter: ");
Serial.println(ctr2);
prevmeasure = measurectr;
switch(ctr){
case 1: mctr1 = pctr1 / 100;
lcd.setCursor(0,0);
lcd.print(mctr1);
lcd.setCursor(0,1);
lcd.print("METERS");
break;
case 2: cmctr1 = pctr1;
lcd.setCursor(0,0);
lcd.print(cmctr1);
lcd.setCursor(0,1);
lcd.print("CENTIMETERS");
break;
case 3: ftctr1 = (pctr1 / 100) * 3.28;
lcd.setCursor(0,0);
lcd.print(ftctr1);
lcd.setCursor(0,1);
lcd.print("FEET");
break;
case 4: inctr1 = ((pctr1 /100) * 3.28) * 12;
lcd.setCursor(0,0);
lcd.print(inctr1);
lcd.setCursor(0,1);
lcd.print("INCHES");
break;
case 0: ydctr1 = ((pctr1 /100) * 3.28) / 3;
lcd.setCursor(0,0);
lcd.print(ydctr1);
lcd.setCursor(0,1);
lcd.print("YARDS");
break;}
}
if (measurectr == LOW && measurectr != prevmeasure) {
prevmeasure = measurectr;
}
ssctr = digitalRead(ssbtn);
if (ssctr == HIGH && ssctr != prevss){
ssctr++;
prevss = ssctr;
tripState = digitalRead(sensorPin);
if (tripState == HIGH && tripState != prevsensor){
lcd.clear();
pctr++;
pctr1 = pctr * 1.00;
prevsensor = tripState;
switch(ctr){
case 1: mctr1 = pctr1 / 100;
lcd.setCursor(0,0);
lcd.print(mctr1);
lcd.setCursor(0,1);
lcd.print("METERS");
break;
case 2: cmctr1 = pctr1;
lcd.setCursor(0,0);
lcd.print(cmctr1);
lcd.setCursor(0,1);
lcd.print("CENTIMETERS");
break;
case 3: ftctr1 = (pctr1 / 100) * 3.28;
lcd.setCursor(0,0);
lcd.print(ftctr1);
lcd.setCursor(0,1);
lcd.print("FEET");
break;
case 4: inctr1 = ((pctr1 /100) * 3.28) * 12;
lcd.setCursor(0,0);
lcd.print(inctr1);
lcd.setCursor(0,1);
lcd.print("INCHES");
break;
case 0: ydctr1 = ((pctr1 /100) * 3.28) / 3;
lcd.setCursor(0,0);
lcd.print(ydctr1);
lcd.setCursor(0,1);
lcd.print("YARDS");
break;}
Serial.print("measure: ");
Serial.println(pctr);
Serial.print("tripstate: ");
Serial.println(tripState);
digitalWrite(ledPin, HIGH);
}
if (tripState == LOW && tripState != pctr){
prevsensor = tripState;
digitalWrite(ledPin, LOW);
}
}
if (ssctr == LOW && ssctr != prevss){
prevss = ssctr;
}
}
I need to save the variable ctr and any of the values saved in the mctr1/cmctr1/ftctr1/inctr1/ydctr1 in the EEPROM and retrieve them at the initial reset or start of the Arduino.
Guys, please help me with this. Thanks. Its a pleasure to read your replies in here. 8)