Hallo allerseits und frohe Weihnachten...
ich möchte gerne einen Wert der aus bis zu 7 Zahlen (float ZStandNeu) besteht in den EEPROM schreiben,
damit diese nicht nach Spannungsverlust oder Reset verloren gehen.
long ZStand = 898734; // Zählerstand bei Start
float ZStandNeu; // Neuer Zählerstand
Ist sowas möglich ? Und wenn JA,WIE ?

Hintergrund: Ich habe an meinem Gaszähler einen Reedkontakt, der jeden Impuls in eine SQL-Datenbank schreibt,
mit Datum und Uhrzeit, um damit Visuell den Verbrauch anzuzeigen.
Könnt Ihr mir bei dem Projekt behilflich sein ?
Bin noch nicht so lange mit dem Arduino vertraut.
Hier der Sketch, den ich z.Z. nutze, aber da ist der Zählerstand ja immer wieder der wie beim Start...

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <SPI.h>
#include <Ethernet.h> // library for ethernet functions
//ETHERNET-SETTINGS
byte mac[] = { 0x5D, 0xA2, 0xFA, 0x2D, 0x76, 0x8C }; // MAC-Adresse des Arduino
byte ip[] = { 192, 168, 178, 41 }; // IP-Adresse des Arduino
byte gateway[] = { 192, 168, 178, 1 }; // Gateway
byte subnet[] = { 255, 255, 255, 0 }; // SubNet
byte server[] = { 192, 168, 178, 111 }; // IP-Adresse des Servers
EthernetClient client;
char host[] = "192.168.178.111"; // Domain
char url[] = "/Arduino/Gas/insert1.php"; // Pfad zur PHP-Datei
char key[] = "ch5fn7sb"; // Kennwort aus PHP-Datei
LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display
byte hoch3[8] = { B01110, B00010, B00110, B00010, B01110, B00000, B00000, B00000 };
int ReedPin = 8; // Schalter ist mit Pin 8 verbunden
int PowerLED = 3; // rote kontroll LED
int val; // Variable für den Pin Zustand
int buttonState; // Variable für den letzten Schalterzustand
int buttonPresses = 0; // Wie oft ist der Schalter gedrückt
long ZStand = 898734; // Zählerstand bei Anschluss
float ZStandNeu; // Zählerstand Neu
void setup()
{
lcd.init(); // initialize the lcd
lcd.backlight();
lcd.createChar(0, hoch3);
lcd.setCursor(8,1);
lcd.print("m");
lcd.setCursor(9,1);
lcd.write(0);
lcd.setCursor(0, 0);
lcd.print("Gas-Zaehler");
// warten, bis LAN gestartet
Serial.begin(9600);
pinMode(PowerLED, OUTPUT);
pinMode(ReedPin, INPUT);
Serial.println("Programm gestartet...");
digitalWrite(ReedPin, HIGH);
Serial.println(F("Ethernet initialisieren..."));
Ethernet.begin(mac, ip);
delay(5000);
client.connect(server, 80); // Verbindung zum Server aufbauen
buttonState = digitalRead(ReedPin); // Anfangszustand lesen
}
void loop()
{
val = digitalRead(ReedPin); // Eingabewert lesen und in val speichern
if (client.connected())
{
Serial.println("Connected");
Serial.println(digitalRead(ReedPin));
if(val !=buttonState) {
if (val == LOW) { // Ist der Schalter gedrückt?
buttonPresses++; // Inkrementieren der Variablen buttonPresses,immer um 1 erhöhern
Serial.print(F("Zählerstand "));
ZStandNeu = ZStand + buttonPresses;
Serial.print(ZStandNeu/100);
Serial.print(" m");
Serial.println(char(179)); // 179 = m³
digitalWrite(PowerLED, LOW);
lcd.clear();
lcd.setCursor(8,1);
lcd.print("m");
lcd.setCursor(9,1);
lcd.write(0);
lcd.setCursor(0, 0);
lcd.print("Gas-Zaehler");
lcd.setCursor(0, 1);
lcd.print(ZStandNeu/100);
float gz = ZStandNeu/100;
Daten_senden(gz);
delay(1000);
client.flush();
client.stop();
}
do
{
Serial.println("Warte bis Schalter wieder geloesst");
delay(2000);
} while ( !digitalRead(ReedPin) );
client.connect(server, 80);
}
}else{
Serial.println("NOT Connected");
client.flush();
delay(1000);
}
buttonState = val; // Den Zustand merken
}
void Daten_senden(float T1)
{
if (client.connected())
{
Serial.println(F("Verbunden, Sende Daten..."));
client.print("GET " + String(url));
Serial.println("GET " + String(url));
client.print(F("?T1="));
Serial.print(F("?T1="));
client.print(T1);
Serial.println(T1);
client.print("&key=" + String(key));
Serial.print("&key=" + String(key));
client.println(" HTTP/1.1");
Serial.println(F(" HTTP/1.1"));
client.print("Host: " + String(host));
Serial.print("Host: " + String(host));
client.println();
Serial.println();
client.println("User-Agent: Arduino");
Serial.println(F("User-Agent: Arduino"));
client.println("Connection: close");
Serial.println(F("Connection: close"));
client.println();
Serial.println();
}
else
{
Serial.println(" ***** VERBINDUNGSAUFBAU NICHT MÖGLICH *****");
digitalWrite(PowerLED, HIGH);
lcd.clear();
lcd.setCursor(5, 0);
lcd.print("Fehler!");
lcd.setCursor(0, 1);
lcd.print("Keine Verbindung");
delay(5000);
}
}
Ich bitte um Nachsicht, der Code ist noch nicht fertig Kommentiert und Aufgeräumt.
Danke