Can anyone please help me i can not save value of total liters in eeprom,the main problem it read and writing while arduino mega working but if power of the value saved in eeprom go back to 0 because the counter starting from 0
Can anyone please help me i can not save value of total liters in eeprom,the main problem it read and writing while arduino mega working but if power of the value saved in eeprom go back to 0 because the counter starting from 0
#include <EEPROM.h> #include <Wire.h> #include "RTCLib.h" #include "Arduino.h" byte sensorInterrupt = 0; byte sensorPin = 2; float calibrationFactor = 4.5; volatile byte pulseCount; float flowRate; unsigned int flowMilliLitres; unsigned long totalMilliLitres; unsigned long oldTime; int eeprom_daily,eeprom_weekly,eeprom_monthly; char buffer[10] = {0}; char buffer_str[10]; NexButton exit15 = NexButton(15, 4,"exit15"); NexButton setting15 = NexButton(15, 5,"setting15"); NexButton del = NexButton(15, 6,"del"); NexText daily = NexText(15, 7, "daily"); NexText ML = NexText(15, 1, "ml"); NexText weekly = NexText(15, 2, "weekly"); NexText monthly = NexText(15, 3, "monthly"); void waterPopCallback(void *ptr) { page15.show(); char buffer_water[10]; itoa(eeprom_daily,buffer_water,10); daily.setText(buffer_water); water_read (); } void water_setup () { pinMode(sensorPin, INPUT); digitalWrite(sensorPin, HIGH); pulseCount = 0; flowRate = 0.0; flowMilliLitres = 0; totalMilliLitres = 0; oldTime = 0; attachInterrupt(sensorInterrupt, pulseCounter, FALLING); } void water_read () { if((millis() - oldTime) > 1000) detachInterrupt(sensorInterrupt); flowRate = ((1000.0 / (millis() - oldTime)) * pulseCount) / calibrationFactor; oldTime = millis(); flowMilliLitres = (flowRate / 60) * 1000; totalMilliLitres += flowMilliLitres; unsigned int frac; memset(buffer, 0, sizeof(buffer)); // clear buffer itoa(totalMilliLitres, buffer, 10); ML.setText(buffer); event = true; pulseCount = 0; attachInterrupt(sensorInterrupt, pulseCounter, FALLING); } void pulseCounter() { // Increment the pulse counter pulseCount++; } void setup(void) { Serial.begin(9600); if (EEPROM.read(0) != 0xFF)//init eeprom { init_eeprom(); } read_init_eeprom(); water_setup (); } } void loop(void) { nexLoop(nex_listen_list); water_daily(); water_read (); } void init_eeprom() { Serial.print("Reset Setting ..."); EEPROM.write(0,0xFF); //check EEPROM.put(1,0); Serial.println(" Done"); } void read_init_eeprom() { Serial.print("Read Setting ..."); //eeprom_daily =(int) EEPROM.get(13); EEPROM.get(1, eeprom_daily); Serial.println(" Done"); } void water_daily(){ if (totalMilliLitres > 0) { eeprom_daily = totalMilliLitres /1000; Serial.println ("water_daily"); EEPROM.put(1,eeprom_daily); }
#include <EEPROM.h> #include <Wire.h> #include "RTCLib.h" #include "Arduino.h" byte sensorInterrupt = 0; byte sensorPin = 2; float calibrationFactor = 4.5; volatile byte pulseCount; float flowRate; unsigned int flowMilliLitres; unsigned long totalMilliLitres; unsigned long oldTime; int eeprom_daily,eeprom_weekly,eeprom_monthly; char buffer[10] = {0}; char buffer_str[10]; NexButton exit15 = NexButton(15, 4,"exit15"); NexButton setting15 = NexButton(15, 5,"setting15"); NexButton del = NexButton(15, 6,"del"); NexText daily = NexText(15, 7, "daily"); NexText ML = NexText(15, 1, "ml"); NexText weekly = NexText(15, 2, "weekly"); NexText monthly = NexText(15, 3, "monthly"); void waterPopCallback(void *ptr) { page15.show(); char buffer_water[10]; itoa(eeprom_daily,buffer_water,10); daily.setText(buffer_water); water_read (); } void water_setup () { pinMode(sensorPin, INPUT); digitalWrite(sensorPin, HIGH); pulseCount = 0; flowRate = 0.0; flowMilliLitres = 0; totalMilliLitres = 0; oldTime = 0; attachInterrupt(sensorInterrupt, pulseCounter, FALLING); } void water_read () { if((millis() - oldTime) > 1000) detachInterrupt(sensorInterrupt); flowRate = ((1000.0 / (millis() - oldTime)) * pulseCount) / calibrationFactor; oldTime = millis(); flowMilliLitres = (flowRate / 60) * 1000; totalMilliLitres += flowMilliLitres; unsigned int frac; memset(buffer, 0, sizeof(buffer)); // clear buffer itoa(totalMilliLitres, buffer, 10); ML.setText(buffer); event = true; pulseCount = 0; attachInterrupt(sensorInterrupt, pulseCounter, FALLING); } void pulseCounter() { // Increment the pulse counter pulseCount++; } void setup(void) { Serial.begin(9600); if (EEPROM.read(0) != 0xFF)//init eeprom { init_eeprom(); } read_init_eeprom(); water_setup (); } } void loop(void) { nexLoop(nex_listen_list); water_daily(); water_read (); } void init_eeprom() { Serial.print("Reset Setting ..."); EEPROM.write(0,0xFF); //check EEPROM.put(1,0); Serial.println(" Done"); } void read_init_eeprom() { Serial.print("Read Setting ..."); //eeprom_daily =(int) EEPROM.get(13); EEPROM.get(1, eeprom_daily); Serial.println(" Done"); } void water_daily(){ if (totalMilliLitres > 0) { eeprom_daily = totalMilliLitres /1000; Serial.println ("water_daily"); EEPROM.put(1,eeprom_daily); }