#include LiquidCrystal_I2C lcd = LiquidCrystal_I2C(0x27, 16, 4); int analogPin = A0; float leerlaufspannung = 0; float spannung = 0; float kapazitaet = 0; float strom = 0; int zustand = 0; int laden = 2; int entladen = 3; #define MULTIPLIKATOR 0.009353; void setup() { // put your setup code here, to run once: lcd.init(); lcd.backlight(); pinMode(laden, OUTPUT); pinMode(entladen, OUTPUT); digitalWrite(laden, LOW); digitalWrite(entladen, LOW); } void loop() { digitalWrite(laden, LOW); digitalWrite(entladen, LOW); delay(10); leerlaufspannung = analogRead(analogPin)*MULTIPLIKATOR; if (zustand==0) // V = Vorladen { lcd.setCursor(0,0); lcd.print("V"); digitalWrite(laden, HIGH); lcd.setCursor(2, 0); lcd.print(leerlaufspannung); delay(300); spannung = analogRead(analogPin)*MULTIPLIKATOR; lcd.setCursor(7, 0); lcd.print(spannung); if (leerlaufspannung > 4.2) zustand=1; } if (zustand==1) // E = Entladen { lcd.setCursor(0,0); lcd.print("E"); digitalWrite(entladen, HIGH); lcd.setCursor(2, 0); lcd.print(leerlaufspannung); delay(490); spannung = analogRead(analogPin)*MULTIPLIKATOR; lcd.setCursor(7, 0); lcd.print(spannung); if (leerlaufspannung < 3.5) zustand=2; strom=spannung/5; kapazitaet=kapazitaet+(strom/7200); // Jeder Durchlauf ist ca 1/2 Sekunde. D.h. durch 2 und durch 3600 wg Wattstunden lcd.setCursor(2, 1); lcd.print(kapazitaet); } if (zustand==2) // L = Laden { lcd.setCursor(0,0); lcd.print("L"); digitalWrite(laden, HIGH); lcd.setCursor(2, 0); lcd.print(leerlaufspannung); delay(300); spannung = analogRead(analogPin)*MULTIPLIKATOR; lcd.setCursor(7, 0); lcd.print(spannung); if (leerlaufspannung > 4.2) zustand=3; } if (zustand==3) // F = Fertig { lcd.setCursor(0,0); lcd.print("F"); lcd.setCursor(2, 0); lcd.print(leerlaufspannung); } delay(400); }