Einsteiger benötigt Hilfe bei einer Erklärung eines Codes

Hallo

ich bin Einsteiger und wollte mir einen Schaltung basteln die meinen Stromzähler ausließt über einen S0 Port .
Ich habe schon einige erfahrungen mit löten und widerständen und co.

Den Code habe ich mir über youTube gefunden den habe ich dann angepasst an mein i2c Display.

Der Code :Stromzaehler

double Preis =  0.2639;  //Preis einer Kilowattstunde in Euro
double kwh = 0.000;  //Kilowattstunden
double imp = 0;  //Impulse des Zählers
char tmp1[16];
char tmp2[16];
double euro;
double zeit;
double watt;

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,4);

#include <StopWatch.h>
StopWatch MySW;
StopWatch SWarray[5];


void setup()  {
 
 lcd.init();                      // initialize the lcd 
 lcd.init();
 lcd.backlight();
 pinMode(6, INPUT);
 lcd.begin(16, 4);
 lcd.print("LADEN...");
 delay(500);
 lcd.clear();
 lcd.print("WARTE AUF IMPULS");
 lcd.setCursor(0, 1);
 lcd.print("<<<<<<<<>>>>>>>>");


 SWarray[0].start();

}

void loop()  {

 if(digitalRead(6) ==0){

   MySW.stop();
   zeit = MySW.elapsed();
   MySW.reset();
   MySW.start();
   imp = imp + 1;

   delay(100);
   while(digitalRead(6) == 0) {
     delay(100);
   }

   kwh = imp / 1000;
   lcd.clear();
   lcd.print("KW");
   dtostrf(kwh, 1, 3, tmp1);
   lcd.setCursor(3, 0);
   lcd.print(tmp1);

   lcd.setCursor(0, 1);
   lcd.print("EU");
   lcd.setCursor(3, 1);
   euro = kwh * Preis;
   dtostrf(euro, 1, 4, tmp2);
   lcd.print(tmp2);

   lcd.setCursor(12, 0);
   watt = 3600 / (zeit / 1000);



   if (int(watt) > 9999){
     lcd.print("OVER");
   }

   else {
     lcd.print(int(watt));
   }
   lcd.setCursor(12, 1);
   lcd.print("WATT");

 }

}

Zur Erklärung mein Stromzähler sendet 2000 Impulse nicht wie im Code (1000)

Meine Frage :Wenn ich die Impulse auf 2000/KW hochsetzte stimmt aber wahrscheinlich nicht mehr die Berechnung aktuell Watt oder doch ??

2 Frage wie kann ich einen KW Zählerstand einfügen das ich einen gleichen wert wie auf dem Original Zähler habe .

Mir ist bewusst das ich normalerweise den wert loggen und zB. auf einer SD Karte zwischenspeichern sollte ,das nach einem Stromausfall ich nicht den neuen Wert eintragen muss .Dazu muss ich mich aber erst noch einlesen wie man ein solches Konstruckt erstellt .Auf eure Antworten bin ich mal gespannt und hoffe das ich licht ins Dunkle bekomme .

Gruß Manuel

Setzte doch bitte den Sketch in Code-Tags, dann ist dieser besser zu lesen.

Schaltfläche </>, oben links im Edtor.

Als Anfänger wagst du dich schon an eine nicht ganz einfache Sache ran.
Aber so wie ich das sehe, sollte es mit dem Tausch der Werte von 1000 in 2000 getan sein.

Du kannst es einfach testen. Die errechneten Werte kann man ja überprüfen.

Hallo,
Dein Sketch zählt alle 1000imp eine kWh.
Wenn Du hier "kwh = imp / 1000;" 2000 schreibst, dann werden alle 2000imp
eine kWh gezählt.

Diese "watt = 3600 / (zeit / 1000);" Wattberechnung ist mir schleierhaft.
Keine Ahnung, was der da macht.

Wenn Du Watt haben willst, dann brauchst Du Deine kWh und die Zeit dazu.

Deinen Zählerstand mit dem im Sketch angleichen:

double Zählerkwh = 27.000; // dein Zählerstand

dann

kwh = imp / 1000;
Zählerkwh = Zählerkwh + kwh

lcd.print(Zählerkwh);

Mal so einfach...
Gruß und Spaß
Andreas

Hallo und danke

Ich dachte mir schon so etwas ich kann mir nur nicht die Zeile Watt =3600 /(Zeit/1000)erklären. Ich denke 3600Watt kann der Zähler bei 16 Ampere. Warum Zeit / 1000??

Auf meine zweite Frage hast mir keinen Vorschlag wie ich den Originalzählerstand einfügen kann. Gruß Manuel

Hallo,
"keinen Vorschlag wie ich den Originalzählerstand einfügen kann"
dann lese mal... den Sketch schreibe ich Dir nicht um. >:(
Gruß und Spaß
Andreas

Hallo,
über die gezählten kWh und die dafür vergangene Zeit kommst Du auf Deine Watt.
Ich nehme an, das es eine Wirkleistungsanzeige werden sollte.
Gruß und Spaß
Andreas

Sorry Andreas ich habe deinen Beitrag erst gelesen als ich die Antwort gesendet hatte. Eigentlich war die Antwort an Hot Systems gerichtet. Sorry für mein falschen Ausdruck. :confused:
Gruß Manuel

Hallo,
hier kannst Dich über "S0-Logging"
schlaulesen.
Gruß und Spaß
Andreas