Hallo zusammen,
ich steh mal wieder auf dem Schlauch.
Hab mir einen recht einfachen Sketch zum Auslesen meines Gaszählers geschrieben.
Dieser funktioniert in meinem Testaufbau mit einem Arduino NANO tadellos.
Hab mich ein wenig in die EEPROM Thematik eingelesen (nicht zu oft beschreiben, Adressspeicher sind nur ein byte groß etc.)
Da ich nur diesen einen Wert habe verwende ich den Befehl: EEPROM.put(adresse, Daten)
Zu Beginn beschreibe den EEPROM Speicher durch einmaliges Hochladen.
Danach kommentiere ich die entsprechenden Zeilen aus.
Nun ist mein Problem, dass der ESP scheinbar nichts in das EEPROM geschrieben hat (der NANO aber schon) und nach dem Start 0 ausgibt.
Sketch:
#include <EEPROM.h> // EEPROM Lib einbinden
#include <Arduino.h>
// --- Deklaration EEPROM ---
//float Gasstand = 1999.123; // für einmaliges Ebschreiben des EEProm
float Gasstand;
int adresse = 0;
float Gasstandalt;
bool GasImpuls;
// --- Zeitzähler ---
unsigned long aktuelleMillis; // Speicher aktuelle Millis
unsigned long SpeicherMillisGas = 0 ; // Speicher aktuelle Millis
const long TGas = 3600000; // Speicher Zykluszeit TGas = 1 Stunde
// --- Taster / reed Schalter ---
int Taster = 14;
int reed = 15;
//--------------------------------------------------------------------------------------------
//--- Setup ----------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
void setup() {
// --- serieller PC Schnittstelle ---
Serial.begin(115200);
while (!Serial);
delay(100);
Serial.println ("Programmstart:");
// --- Taster / reed Schalter ---
pinMode(Taster, INPUT); // Pin Tastereingang
pinMode(reed, INPUT); // Pin REED Schalter
// --- einmalige Test Beschreibung! ---
//EEPROM.put(adresse, Gasstand);
// --- Gaswert nach Neustart aus EEPROM holen ---
EEPROM.get(adresse, Gasstand);
}
//--------------------------------------------------------------------------------------------
//--- Hauptprogramm --------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
void loop()
{
aktuelleMillis = millis(); // schreibe in aktuelle Mills die Mills des Arduino
delay(100);
Serial.print ("Gasstand: "); Serial.println (Gasstand, 2); // Kontrollausgabe
// --- Impulserkennung reed Schalter ---
if (digitalRead(reed) == LOW) GasImpuls = true; // Impuls: Fallende Flanke erkannt
if (GasImpuls == true && (digitalRead(reed) == HIGH)) // Impuls vorbei
{
GasImpuls = false; // Flag zurücksetzen
Gasstand = Gasstand + 0.01; // Zählerstand hochzählen
}
// --- Manuelle Korrektur ---
if (digitalRead(Taster) == LOW) {
Gasstand = Gasstand + 0.01;
}
// --- EEProm beschreiben ---
if ((aktuelleMillis - SpeicherMillisGas > TGas) && Gasstandalt != Gasstand) { // frage ab: ist aktuelle Mills - SpeicherMills noch größer als Wunschzeit
SpeicherMillisGas = aktuelleMillis; // Zeit zurücksetzen
Gasstandalt = Gasstand; // Sichere neuen Stand für nächste betrachtung
EEPROM.put(adresse, Gasstand);
Serial.print ("Schreibe in EPROM: "); Serial.println (Gasstand, 2); // Kontrollausgabe
}
}
Was mache ich falsch oder wo ist der Denkfehler?
Grüße Nicolas