#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Initialisiere das LCD-Display
LiquidCrystal_I2C lcd(0x27, 20, 4); // Ändere ggf. die Adresse auf 0x3F
// Definition der Pins
const int analogPinA0 = A0;
const int analogPinA1 = A1;
const int digitalPinD2 = 2;
// Konstanten für den Spannungsteiler
const float R1 = 30000.0; // 30k Ohm
const float R2 = 6000.0; // 7.5k Ohm
const float voltageFactorA0 = (R1 + R2) / R2;
void setup() {
// Initialisiere das LCD
lcd.begin(20, 4);
lcd.backlight();
// Setze den Anfangszustand des LCDs
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" Lipo Discharger ");
lcd.setCursor(0, 1);
lcd.print(" Created by ");
lcd.setCursor(0, 3);
lcd.print("Sven Stepper-Blaess");
delay(5000);
// Setze den Pin D2 als Ausgang
pinMode(digitalPinD2, OUTPUT);
digitalWrite(digitalPinD2, LOW);
}
void loop() {
// Lese den Analogwert von A0 (0-1023)
int sensorValueA0 = analogRead(analogPinA0);
// Lese den Analogwert von A1 (0-1023)
int sensorValueA1 = analogRead(analogPinA1);
// Wandelt den Analogwert in Spannung um
// 5.0 bezieht sich auf die Referenzspannung des Arduino Nano (5V)
// 1023 ist der maximale Wert des ADC (10-Bit)
float voltageA0 = sensorValueA0 * (5.0 / 1023.0);
float voltageA1 = sensorValueA1 * (5.0 / 1023.0);
// Berechne die tatsächliche Spannung an A0
float actualVoltageA0 = voltageA0 * voltageFactorA0;
// Ausgabe der Spannung an A0 auf dem LCD
lcd.setCursor(0, 0);
lcd.print("Total Volt : ");
lcd.print(actualVoltageA0, 2); // Spannung mit zwei Nachkommastellen ausgeben
lcd.print(" V");
// Überprüfe die Spannungsbereiche und zeige die entsprechende Nachricht an
lcd.setCursor(0, 1);
if (actualVoltageA0 >= 13.6 && actualVoltageA0 <= 16.8) {
lcd.print(" Lipo. 4S ");
} else if (actualVoltageA0 >= 17.0 && actualVoltageA0 <= 21.0) {
lcd.print(" Lipo. 5S ");
} else if (actualVoltageA0 >= 20.4 && actualVoltageA0 <= 25.2) {
lcd.print(" Lipo. 6S ");
} else {
lcd.print(" ");
}
// Ausgabe der Spannung an A1 auf dem LCD
lcd.setCursor(0, 2);
lcd.print("Cell 1 Volt : ");
lcd.print(voltageA1, 2); // Spannung mit zwei Nachkommastellen ausgeben
lcd.print(" V");
// Überprüfe die Spannung an A1 und setze den Zustand von D2
lcd.setCursor(0, 3);
if (voltageA1 >= 3.9 && voltageA1 <= 4.3) {
digitalWrite(digitalPinD2, HIGH);
lcd.print(" Discharge ON ");
} else {
digitalWrite(digitalPinD2, LOW);
lcd.print(" Discharge OFF ");
}
// Warte eine Sekunde vor der nächsten Messung
delay(1000);
}