Inhaltsverzeichnis
Data-Logger by DL2FP
ToDo: DL2FP
Zusätzlich wird noch die PC Software gobetwino benötigt. http://mikmo.dk/gobetwinodownload.html
Version 1
- Womo_Volt_messen.ino
/* Wohnmobil Board Spannungsmesser und Lichtwert mit LCD-Anzeige und seriel-out (c) by DL2FP 2013-19-02 (( am EPC auf COM1 mit Arduino verbinden , USB links vorne am EPC, da bei COM9 die USB nach einiger Zeit abschaltet!)) Arduino Pins !!! ___________________ mini USB !!! EPC DC Buchse ISP 6 POL IOREF Reset +3,3 V (Power) +5 V (Power) !!! Versorgungsspannung GND (Power) !!! Versorgungsspannung GND (Power) +Vin (Power) A0 analog in !!! sensor1 Volt A1 analog in !!! sensor2 Licht A2 analog in A3 analog in A4 analog in A5 analog in SCL SDA AREF GND -13 digital PWM intern LED morse Status 12 digital !!! LCD-Display -11 digital PWM !!! LCD-Display -10 digital PWM -9 digital PWM !!! Lautsprecher 8 digital 7 digital -6 digital PWM -5 digital PWM !!! LCD-Display 4 digital !!! LCD-Display -3 digital PWM !!! LCD-Display 2 digital !!! LCD-Display TX->1 RX<-0 */ // include the library codes: #include <LiquidCrystal.h> // include LCD Display #include <Morse.h> // include morse code. // initialize the LCD-Display library with the numbers of the interface pins // LCD-Display Pin1 GND, Pin2 +5V, Pin3 Poti, Pin5 GND, 4-12, 6-11, 11-5, 12-4, 13-3, 14-2, (Display_Pin-Arduiono_Pin) // 540 Ohm nach GND, 1k2 Ohm nach +5V, Mitte an Pin3 anstelle des Poti! LiquidCrystal lcd(12, 11, 5, 4, 3, 2); Morse morse1(9, 30, 1); // initialize Morse and Setup speaker to pin 9 int z = (0); // varialble z, Zähler für Einschalt-Verzögerung const int mz=(5000); // mz = Zeit zwischen 2 Messwerterfassungen. // the setup routine runs once when you press reset: void setup() { lcd.begin(16, 2); // set up the LCD's number of columns and rows: lcd.print("MOMMENT BITTE"); // Print a message to the LCD. Serial.begin(9600); // initialize serial communication at 9600 bits per second: // nur für Leonardo Board, warten -- bis die serielle Scnittstelle abgefragt wird. // while (!Serial) { // ; // } } // the loop routine runs over and over again forever: void loop() { // Einschaltverzögerung while (z < 2) { // delay = Zeit der Einschalt-Verzögerung delay (5); z++; morse1.sendmsg("OK"); // Status morse LSP } // Meßwert einlesen und für die Anzeige umrechnen int sensor1 = analogRead(A0); // read the input Voltage on analog pin A0: float Anzeige1 = (sensor1/51.2); // durch 51.2 umskalieren auf 20V char buffer1[5]; // Umwandlung int in Char für Serial.print int sensor2 = analogRead(A1); // read the input Light on analog pin A1: float Anzeige2 = (sensor2/10.24); // durch 10,24 um auf 100% zu skalieren. char buffer2[5]; // Umwandlung int in Char für Serial.print // print out the value you read Sensor1 Volt, sensor2 Licht : to seriel-Monotor // Format für speichern in Datei c:\Programme\gobetwino\daten1.txt Serial.print ("#S|SENSOR1|["); Serial.print(itoa((sensor1), buffer1, 10)); Serial.print (";"); Serial.print(itoa((sensor2), buffer2, 10)); Serial.println ("]#"); delay(mz); // Zeit zwischen zwei Messwerten // Status Ausgabe auf Lautsprecher pin 9 in morsecode Morse morse1(9, 30, 1); if (Anzeige1 < 10.00) morse1.sendmsg("E"); // EMPTY if (Anzeige1 > 14.00) morse1.sendmsg("V"); // VOLL if (Anzeige1 > 12.00 && Anzeige1 < 14.00) morse1.sendmsg("R"); // READY if (Anzeige1 > 10.00 && Anzeige1 < 12.00) morse1.sendmsg("L"); // LOAD need { } // LCD - Display Anzeige setzen lcd.begin(16, 2); // (note: line 1 is the second row, since counting begins with 0): lcd.print("SPANNUNG LICHT "); // Überschrift setzen Zeile 1 lcd.setCursor(0, 1); // set the cursor to column 0, line 2 lcd.print(" "); // Zeile 2 löschen // Werte Anzeigen lcd.setCursor(1,1); lcd.print(Anzeige1); // Volt lcd.setCursor(7,1); lcd.print("V"); lcd.setCursor(10,1); lcd.print(Anzeige2); // Licht lcd.setCursor(15,1); lcd.print("%"); delay(1); // Sicherheitshalber ! } // ENDE
Version 2
- Data_Logger.ino
/* (c) by DL2FP 2014-07-25 10:45:00 Datenlogger für 2 x 6 Messtellen !! Die Pin Belgung ist am Ende des Programmes zu finden. !! */ // ------------- beginning of the Program Code ----------- #include <LiquidCrystal.h> // needed to display, include LCD Display 16x4 #include <Morse.h> // a little bit HAM RADIO .... .. #include <Wire.h> // needed for the temrature Sensor #include <Encoder.h> // needed for the KNOB #include <Time.h> // nedded for the DATE and TIME STAMP #define TIME_HEADER "T" // Header tag for serial time sync message #define TIME_REQUEST 7 // ASCII bell character requests a time sync message LiquidCrystal lcd(11, 10, 9, 8, 7, 6); Encoder knob(2, 3); // Pins des Drehgebers , pin 2 und 3 const int Taster = 12; int A=0; void setup() { lcd.begin(16, 4); // set up the LCD's number of columns and rows: lcd.setCursor(0,0); lcd.print(" MOMMENT BITTE "); lcd.setCursor(0,1); lcd.print(" "); lcd.setCursor(16,0); lcd.print("SETUP LAEUFT...."); lcd.setCursor(16,1); lcd.print(" "); Serial.begin(38400); pinMode(13, OUTPUT); pinMode (Taster, INPUT_PULLUP); // initial Time if (timeStatus() == timeNotSet) { // T1405944000 startzeit setzen const long inittime=1405944000; unsigned long pctime=inittime; setTime(pctime); } int A=0; } // ------------------------------ Ende VOID - SETUP ------------------------------------- void loop(){ // morseout(); // Eine Meßstelle wird per morsecode überwacht falls gewünscht. AusgabeSerial(); // Taster abfragen und die Menues durchschalten int buttonState; // the current reading from the input pin int lastButtonState = LOW; // the previous reading from the input pin long lastDebounceTime = 0; // the last time the output pin was toggled long debounceDelay = 50; // the debounce time; increase if the output flickers int reading = digitalRead (Taster); if (reading != lastButtonState) { lastDebounceTime = millis(); // reset the debouncing timer } if ((millis() - lastDebounceTime) > debounceDelay) { // whatever the reading is at, it's been there for longer // than the debounce delay, so take it as the actual current state: buttonState = reading; } if (A > 7) { // variable A steuert die swich case Menues. A=A-7; // Anzahl der Menues +1 } if ((reading == LOW) && (reading == lastButtonState)) { // Taster gedrückt A=A+1; delay(1000); } else { delay(1000); } lastButtonState = reading; // swichcase schaltet in die Menues switch (A) { case 1: menue1(); // ALLE Messwerte anzeigen delay(500); break; case 2: // ??? menue2(); delay(500); break; case 3: // ??? menue3(); delay(500); break; case 4: // Jahr und sekunde aendern menue4(); delay(500); break; case 5: // Datum aendern menue5(); delay(500); break; case 6: // Zeit aendern menue6(); delay(500); break; case 7: hauptmenue(); A=0; delay(500); break; default: hauptmenue(); delay(1000); // je nach delay werden Serial Daten geschrieben, delay=1000 entspr. ca. alle 2 Sekunden einmal. } } // ------------------------------ Ende VOID - LOOP --------------------------------------------------------- // Unterprogramme: //------------------ void digitalClockDisplay(){ ------------------------------------------ void digitalClockSerial(){ // digital clock display of the time printDigits(day()); Serial.print("."); printDigits(month()); Serial.print("."); Serial.print(year()); Serial.print(";"); printDigits(hour()); Serial.print(":"); printDigits(minute()); Serial.print(":"); printDigits(second()); Serial.print(";"); delay(10); } //------------------ void digitalClockLcdDatum(){ ------------------------------------------ void digitalClockLcdDatum(){ // digital clock display of the time printlcdDigits(day()); lcd.print("."); printlcdDigits(month()); lcd.print("."); lcd.print(year()); lcd.print(" "); delay(10); } //------------------ void digitalClockLcdZeit(){ ------------------------------------------ void digitalClockLcdZeit(){ // digital clock display of the time printlcdDigits(hour()); lcd.print(":"); printlcdDigits(minute()); lcd.print(":"); printlcdDigits(second()); lcd.print(" "); delay(10); } //------------------ void digitalClockLcdyyyyss(){ ------------------------------------------ void digitalClockLcdyyyyss(){ // digital clock display of the time lcd.print(year()); lcd.print(" "); printlcdDigits(hour()); lcd.print(":"); printlcdDigits(minute()); lcd.print(":"); printlcdDigits(second()); lcd.print(" "); delay(10); } //------------- void digitalClockLcdHauptmenue(){ ------------------------------------------ void digitalClockLcdHauptmenue(){ // digital clock display of the time printlcdDigits(day()); lcd.print("."); printlcdDigits(month()); lcd.print(" "); printlcdDigits(hour()); lcd.print(":"); printlcdDigits(minute()); lcd.print(":"); printlcdDigits(second()); lcd.print(" "); delay(10); } //------------- void digitalClockDisplay(){ ------------------------------------------ void digitalClockDisplay(){ // digital clock display of the time printlcdDigits(day()); lcd.print("."); printlcdDigits(month()); lcd.print("."); lcd.print(year()-2000); lcd.print(""); printlcdDigits(hour()); lcd.print(":"); printlcdDigits(minute()); lcd.print(":"); printlcdDigits(second()); lcd.print(" "); delay(10); } //------------- void printDigits(int digits){ ------------------------------------------------ void printDigits(int digits){ // utility function for digital clock displaySerial: prints preceding colon and leading 0 if(digits < 10) Serial.print('0'); Serial.print(digits); } //------------- void printlcdDigits(int digits){ ----------------------------------------- void printlcdDigits(int digits){ // utility function for digital clock displayLCD: prints preceding colon and leading 0 if(digits < 10) lcd.print('0'); lcd.print(digits); } //------------- void morseout() { ----------------------- void morseout() { // Status Ausgabe auf Lautsprecher or LED Pin 13 in morsecode // Meßwert einlesen und für die Anzeige umrechnen int M06 = analogRead(A5); float AnzM06 = (M06*15/1024); char buffer6[5]; Morse morse(13, 20, 1); if (AnzM06 < 10.00) morse.sendmsg("E"); // EMPTY if (AnzM06 > 14.40) morse.sendmsg("O"); // overload if (AnzM06 > 13.80 && AnzM06 < 14.40) morse.sendmsg("L"); // loading if (AnzM06 > 12.00 && AnzM06 < 13.80) morse.sendmsg("R"); // READY if (AnzM06 > 10.00 && AnzM06 < 12.00) morse.sendmsg("N"); // need LOAD } //------------- void AusgabeLcdMesswerte() { ----------------------------- void AusgabeLcdMesswerte() { // Meßwert einlesen und für die Anzeige umrechnen int M01 = analogRead(A0); float AnzM01 = (M01/10.24); char buffer1[5]; int M02 = analogRead(A1); float AnzM02 = (M02/51.20); char buffer2[5]; int M03 = analogRead(A2); float AnzM03 = (M03/51.20); char buffer3[5]; int M04 = analogRead(A3); float AnzM04 = (M04/51.20); char buffer4[5]; int M05= analogRead(A4); float AnzM05 = (M05/10.24); char buffer5[5]; int M06= analogRead(A5); float AnzM06 = ((M06*15)/1024); char buffer6[5]; int M07= analogRead(A0); float AnzM07 = (M07/10.24); char buffer7[5]; int M08= analogRead(A1); float AnzM08 = (M08/10.24); char buffer8[5]; int M09= analogRead(A2); float AnzM09 = (M09/10.24); char buffer9[5]; int M10= analogRead(A3); float AnzM10 = (M10/10.24); char buffer10[5]; int M11= analogRead(4); float AnzM11 = (M11/10.24); char buffer11[5]; int M12= analogRead(A5); float AnzM12 = ((M12*15)/1024); char buffer12[5]; // Anzeige LCD - Display 1 lcd.clear(); lcd.begin(16, 4); lcd.setCursor(0,0); lcd.print("01 "); lcd.print(AnzM01); lcd.setCursor(9,0); lcd.print("02 "); lcd.print(AnzM02); lcd.setCursor(0,1); lcd.print("03 "); lcd.print(AnzM03); lcd.setCursor(9,1); lcd.print("04 "); lcd.print(AnzM04); lcd.setCursor(16,0); lcd.print("05 "); lcd.print(AnzM05); lcd.setCursor(25,0); lcd.print("06 "); lcd.print(AnzM06); lcd.setCursor(16,1);digitalClockDisplay() ; delay(2000); // Anzeige LCD - Display 2 lcd.clear(); lcd.setCursor(0,0); lcd.print("07 "); lcd.print(AnzM07); lcd.setCursor(9,0); lcd.print("08 "); lcd.print(AnzM08); lcd.setCursor(0,1); lcd.print("09 "); lcd.print(AnzM09); lcd.setCursor(9,1); lcd.print("10 "); lcd.print(AnzM10); lcd.setCursor(16,0); lcd.print("11 "); lcd.print(AnzM11); lcd.setCursor(25,0); lcd.print("12 "); lcd.print(AnzM12); lcd.setCursor(16,1);digitalClockDisplay(); delay(1); } //------------- void AusgabeSerial() { -------------------------- void AusgabeSerial() { // Meßwert einlesen und für die Anzeige umrechnen int M01 = analogRead(A0); float AnzM01 = (M01/10.24); char buffer1[5]; int M02 = analogRead(A1); float AnzM02 = (M02/51.20); char buffer2[5]; int M03 = analogRead(A2); float AnzM03 = (M03/51.20); char buffer3[5]; int M04 = analogRead(A3); float AnzM04 = (M04/51.20); char buffer4[5]; int M05= analogRead(A4); float AnzM05 = (M05/10.24); char buffer5[5]; int M06= analogRead(A5); float AnzM06 = ((M06*15)/1024); char buffer6[5]; int M07= analogRead(A0); float AnzM07 = (M07/10.24); char buffer7[5]; int M08= analogRead(A1); float AnzM08 = (M08/10.24); char buffer8[5]; int M09= analogRead(A2); float AnzM09 = (M09/10.24); char buffer9[5]; int M10= analogRead(A3); float AnzM10 = (M10/10.24); char buffer10[5]; int M11= analogRead(4); float AnzM11 = (M11/10.24); char buffer11[5]; int M12= analogRead(A5); float AnzM12 = ((M12*15)/1024); char buffer12[5]; digitalClockSerial(); // Date und Time STAMP Serial.print(itoa((M01), buffer1, 10)) ; Serial.print (";"); Serial.print(itoa((M02), buffer2, 10)) ; Serial.print (";"); Serial.print(itoa((M03), buffer3, 10)) ; Serial.print (";"); Serial.print(itoa((M04), buffer4, 10)) ; Serial.print (";"); Serial.print(itoa((M05), buffer5, 10)) ; Serial.print (";"); Serial.print(itoa((M06), buffer6, 10)) ; Serial.print (";"); Serial.print(itoa((M07), buffer7, 10)) ; Serial.print (";"); Serial.print(itoa((M08), buffer8, 10)) ; Serial.print (";"); Serial.print(itoa((M09), buffer9, 10)) ; Serial.print (";"); Serial.print(itoa((M10), buffer10, 10)); Serial.print (";"); Serial.print(itoa((M11), buffer11, 10)); Serial.print (";"); Serial.print(itoa((M12), buffer12, 10)); Serial.print (";"); Serial.println (); } //------------- void hauptmenue{ ----------------------------------------- void hauptmenue() { // Display-LCD-hauptmenue lcd.setCursor(0,0); // beginning ROW 1 lcd.print ("(c)by DL2FP 2014"); lcd.setCursor(0,1); // beginning ROW 2 lcd.print (" Haupt-Menue "); lcd.setCursor(16,0); // beginning ROW 3 lcd.println("Taster => Menues"); lcd.setCursor(16,1); // beginning ROW 4 digitalClockLcdHauptmenue(); } //-------- void menue1 Alle Messwerte auf LCD ausgeben -------------------------- void menue1() { // Display-LCD-menue1 AusgabeLcdMesswerte(); delay(500); } //------------- void menue2 ??? ----------------------------------------- void menue2() { // Display-LCD-menue2 lcd.setCursor(0,0); lcd.print(" Menue 2 "); lcd.setCursor(0,1); lcd.println("Anzeige in Volt "); lcd.setCursor(16,0); lcd.print("Spannungs Werte "); lcd.setCursor(16,1); digitalClockDisplay(); } //------------- void menue3 ??? ----------------------------------------- void menue3() { // Display-LCD-menue3 lcd.setCursor(0,0); lcd.print(" Menue 3 "); lcd.setCursor(0,1); lcd.println(" Anzeige in AMP "); lcd.setCursor(16,0); lcd.print(" Strom Messwerte "); lcd.setCursor(16,1); digitalClockDisplay(); } //------------- void menue4 Jahr + Sekunde aendern ----------------------------------------- void menue4() { // Display-LCD-menue4 Jahr + Sekunde aendern lcd.setCursor(0,0); lcd.print ("Menue 4 yyyy+ss"); lcd.setCursor(0,1); lcd.print ("Schnell == Jahr "); lcd.setCursor(16,0); lcd.println("Langsam = Second"); lcd.setCursor(16,1); digitalClockLcdyyyyss(); long newRight; long positionRight; newRight = knob.read()+500; if (newRight != positionRight) { positionRight = newRight; } delay(500); // Datum aendern // T1405944000 init-Time = 21.07.2014 12:00:00, 1405944000 wird mit (now) gelesen. unsigned long mytime; mytime=(now()); unsigned long change_sec; change_sec=1; unsigned long change_yy; change_yy=31104000; if (positionRight > 500&&positionRight<520) { mytime=mytime+change_sec; //Tag ändern plus !!! setTime(mytime); knob.write(0); // reset Knob } if (positionRight < 500&&positionRight>480) { mytime=mytime-change_sec; //Tag ändern minus !!! setTime(mytime); knob.write(0); // reset Knob } if (positionRight > 520) { mytime=mytime+change_yy; //Monat ändern plus !!! setTime(mytime); knob.write(0); // reset Knob } if (positionRight < 480) { mytime=mytime-change_yy; //Monat ändern minus !!! setTime(mytime); knob.write(0); // reset Knob } knob.write(0); // reset Knob } //------------- void menue5 Datum aendern ----------------------------------------- void menue5() { // Display-LCD-menue5 Datum aendern lcd.setCursor(0,0); lcd.print("Menue 5 Datum"); lcd.setCursor(0,1); lcd.print("Langsam == TAG "); lcd.setCursor(16,0); lcd.println("Schnell == Monat"); lcd.setCursor(16,1); digitalClockLcdDatum(); long newRight; long positionRight; newRight = knob.read()+500; if (newRight != positionRight) { positionRight = newRight; } delay(500); // Datum aendern // T1405944000 init-Time = 21.07.2014 12:00:00, 1405944000 wird mit (now) gelesen. unsigned long mytime; mytime=(now()); unsigned long change_dd; change_dd=86400; unsigned long change_mon; change_mon=2592000; if (positionRight > 500&&positionRight<520) { mytime=mytime+change_dd; //Tag ändern plus !!! setTime(mytime); knob.write(0); // reset Knob } if (positionRight < 500&&positionRight>480) { mytime=mytime-change_dd; //Tag ändern minus !!! setTime(mytime); knob.write(0); // reset Knob } if (positionRight > 520) { mytime=mytime+change_mon; //Monat ändern plus !!! setTime(mytime); knob.write(0); // reset Knob } if (positionRight < 480) { mytime=mytime-change_mon; //Monat ändern minus !!! setTime(mytime); knob.write(0); // reset Knob } knob.write(0); // reset Knob } //------------- void menue6 Zeit aendern--------------------------------- void menue6() { // Display-LCD-menue6 Zeit aendern lcd.setCursor(0,0); lcd.print ("Menue 6 ZEIT"); lcd.setCursor(0,1); lcd.print ("Langsam = Minute"); lcd.setCursor(16,0); lcd.println("SCHNELL = Stunde"); lcd.setCursor(16,1); digitalClockLcdZeit(); long newRight; long positionRight; newRight = knob.read()+500; if (newRight != positionRight) { positionRight = newRight; } delay(500); // Zeit aendern // T1405944000 init-Time = 21.07.2014 12:00:00, 1405944000 wird mit (now) gelesen. unsigned long mytime; mytime=(now()); unsigned long change_min; change_min=60; unsigned long change_hh; change_hh=3600; if (positionRight > 500&&positionRight<510) { // langsam rechtsrum drehen mytime=mytime+change_min; // Minute ändern plus!!! setTime(mytime); knob.write(0); // reset Knob } if (positionRight < 500&&positionRight>490) { // langsam linksrum drehen mytime=mytime-change_min; // Minute ändern minus!!! setTime(mytime); knob.write(0); // reset Knob } if (positionRight > 510) { // schnell rechtsrum drehen mytime=mytime+change_hh; // Stunde ändern plus!!! setTime(mytime); knob.write(0); // reset Knob } if (positionRight < 490) { // schnell linksrum drehen mytime=mytime-change_hh; // Stunde ändern minus!!! setTime(mytime); knob.write(0); // reset Knob } knob.write(0); // reset Knob } // ------------------------------ Ende VOID - Unterprogramme ------------------------------------- //END /* ----------------------------Benötigte Hardware------------------------- 1 x PC, Laptop o.ä. zum Daten speichern und zum programmieren des Arduino 1 x Arduino Leonardo 1x LCD-Display 16x4 1x Poti 1k Ohm für LCD-Display-Contrast 1x Lautsprecher 1x LED und R 1K Ohm 1x Drehimpulsgeber mit Taster 1x LDR und 2 Wiederstaende , Werte ???? 1x Temeraturfühler, z.B. DS1208 sihe http://wiki.fox11.de Temperatur Logger sowie Vorwiederstände an den Messtellen für Spannungs-Messung, z.B. 4x 10K Ohm um 20V+ zu messen. sowie Shunt-Widerstände bei den Strom Messungen. */ // ------------------------- benötigte Software ---------------------- /* Arduino V 1.0.5-r2 RS232 Datalogger, zu finden auf http://www.eltima.com */ // --- PIN Belegungen ----------------------------------------------- // vom Arduino Leonardo /* Arduino Pins !!! ___________________ mini USB !!! EPC DC Buchse (+5 bis +20V) ISP 6 POL IOREF Reset (Hardware - Reset) +3,3 V (Power) +5 V (Power) !!! Versorgungsspannung GND (Power) !!! Versorgungsspannung GND (Power) +Vin (Power) (+5 - +20V) A0 analog in (MUB1), (MIB1) A1 analog in (MUB2), (MIB2) A2 analog in (MUS1), (MIS1) A3 analog in (MUS2), (MIS2) A4 analog in (MUNT), (MINT) A5 analog in (Temp), (Light) SCL (CAN-BUS 1) SDA (CAN-BUS 2) AREF (Hardware-Interrupt) GND -13 digital PWM Lautsprecher(morse) or LED (intern LED) 12 digital Taster -11 digital PWM !!! LCD-Display 4 RS selcting Registers -10 digital PWM !!! LCD-Display 6 DATA enable signal for write/read data -9 digital PWM !!! LCD-Display 11 DATA 4 8 digital !!! LCD-Display 12 DATA 5 7 digital !!! LCD-Display 13 DATA 6 -6 digital PWM !!! LCD-Display 14 DATA 7 -5 digital PWM Reset 4 digital Relais Leitungsmultiplexer -3 digital PWM Drehimpulsegeber 1 // Pins 2+3 wegen der Interruptfähigkeit 2 digital Drehimpulsegeber 2 // dadurch funktioniert der Drehgeber besser TX->1 RX<-0 */ // vom LCD Display /* LCD - Display pins: initialize the LCD-Display library with the numbers of the interface pins 4K7 Ohm nach GND, 1k2 Ohm nach +5V, Mitte an Pin3 anstelle des Poti! Contrast Pin 3 benötigt ca. 1V + --------------- LCD 16x4 pins 1 GND || GND 2 +5V || +5V 3 Poti || Mittelpin Poti // Contrast 4 RS selcting Registers || pin 11 am Arduino 5 GND L = write Mode || GND 6 DATA enable signal for writze/read data || pin 10 am Arduino 7 DATA 0 8 DATA 1 9 DATA 2 10 DATA 3 11 DATA 4 || pin 9 am Arduino 12 DATA 5 || pin 8 am Arduino 13 DATA 6 || pin 7 am Arduino 14 DATA 7 || pin 6 am Arduino 15 (Backlight +5V) 16 (Backlight GND) */ // Belegung der Mess-Stellen /* -------- Messwerte für erstes Display---------- M01 = U Womo Batterie M02 = U Auto Batterie M03 = U Slo1 M04 = U Sol2 M05 = U Ladegerät +14,4V M06 = U 230V -------- Messwerte für zweites Display---------- M07 = I Womo M08 = I Auto M09 = I Sol1 M10 = I Sol2 M11 = Temp M12 = Licht */