#include <LiquidCrystal.h> LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Display mit den benötigten Pins initialisieren int shuntPin = 0; // Stromeingang an Analog-Input 5 float Strom = 0; //Stromwert auf 0 Initialisieren unsigned long LCDzeit; //Zeiterfassung für Aktualisierung Display unsigned long Aszeit; //Zeiterfassung für Messung Amperesekunden float As; //Amperesekunden float Ah; //Amperestunden int Bargraph; //Variable Bargraphansteuerung int Bargraphl; //Variable Bargraphrestlöschung
void setup()
{ lcd.begin(20, 2); // Dimensionen Display Spezifizieren lcd.print("ELduino V1.0"); // Startmeldung delay (2000); // 5Sekunden anzeigen lcd.clear(); // Display ablöschen
}
void loop()
{ Strom = analogRead(shuntPin) * 0.1955 ; // Analogeingang = Variable Strom, Umrechnen 5V=200A if (millis() - Aszeit > 1000) { // Jdede Skunde Aszeit = millis(); // Zeit rücksetzen As = As + Strom; // Jede Sekunde Ampere aufaddieren Ah = As / 3600; // Amperesekunden in Amperestunden umrechnen } // Schleifenende Zeit Amperestundenmessung if (millis() - LCDzeit > 100) { // Alle 100ms LCDzeit = millis(); // Zeit rücksetzen lcd.setCursor(0, 1); // Cursor auf Spalte0, Reihe1 setzen if (Strom < 100) // Textausrichtung, wenn I<100 {lcd.write(0x20); // // Space(HEX 20), Leerstellen einfügen if (Strom < 10) // Textausrichtung, wenn I<10 { lcd.write(0x20);} // // Space(HEX 20), Leerstellen einfügen } lcd.print(Strom); // Stromwert auf Display ausgeben lcd.setCursor(7,1); // Cursor auf Spalte6, Reihe1 setzen (Reihen zählen ab0) lcd.print("A"); // Einheitszeichen A lcd.setCursor(10, 1); // Cursor auf Spalte0, Reihe1 setzen lcd.print(Ah); // As auf Display ausgeben lcd.setCursor(17,1); // Cursor auf Spalte17, Reihe1 setzen (Reihen zählen ab0) lcd.print("Ah"); // Einheitszeichen Ah } // Schleifenende Zeit Displayaktualisierung if (Strom < 5)
{ lcd.setCursor(0, 0); // Cursor auf Spalte0, Reihe0 setzen (Reihen zählen ab0) lcd.print("Strom"); // Bezeichnung für Anzeigewert lcd.setCursor(10, 0); // Cursor auf Spalte0, Reihe1 setzen lcd.print("Verbrauch"); // Bezeichnung Verbrauch
}
else
{ lcd.setCursor(0, 0); // Cursor auf Spalte0, Reihe0 setzen Bargraph = 20 - Strom / 10; // Bargrafenlänge berechnen for (int i=Bargraph; i < 20; i++){ //Bargrafenschleife lcd.write(0xFF); // Zeichen schreiben } // Schleifenende Bargraph Bargraphl = 20 - Bargraph; // Zeilenrest berechnen for (int s=Bargraphl; s < 20; s++){ //Schleife Zeilenrest lcd.write(0x20); // // Space(HEX 20), um Reste abzulöschen } // Schleifenende Zeilenrest
}
} // Schleifenende void loop