INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Fehlerhafte Anzeige der LiquidCrystal und debug.h
13.07.2018, 18:39
Beitrag #1
Fehlerhafte Anzeige der LiquidCrystal und debug.h
Hallo Forenmitglieder,

ich habe Probleme mit den beiden o. g. Einträgen.

Dazu zwei Verständnisfragen:
ein Anzeige der nach Raute include in Klammer angezeigten Lib in ROTER Farbe bedeutet doch einen Fehler, was bedeutet es aber wenn bei gleicher Konfiguration der gleiche Aufruf in blauer Farbe dargestellt wird?

Danke im voraus
Armin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
13.07.2018, 22:26
Beitrag #2
RE: Fehlerhafte Anzeige der LiquidCrystal und debug.h
Keine Ahnung, die Farben haben mich noch nie interessiert, da ich mit einem externen Editor arbeite (Notepad++).

Kompiliere doch einfach und gib uns die komplette Fehlermeldung und den Sketch. Setze beides bitte in Codetags. Wie das geht, steht hier.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
13.07.2018, 22:51
Beitrag #3
RE: Fehlerhafte Anzeige der LiquidCrystal und debug.h
(13.07.2018 18:39)do1xxy schrieb:  ein Anzeige der nach Raute include in Klammer angezeigten Lib in ROTER Farbe bedeutet doch einen Fehler, was bedeutet es aber wenn bei gleicher Konfiguration der gleiche Aufruf in blauer Farbe dargestellt wird?

Woher hast du diese Information zu den farblichen Darstellungen?
Kann mann das irgendwo nachlesen?

Gruß Fips

Meine Esp8266 & ESP32 Projekte
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
14.07.2018, 09:08
Beitrag #4
RE: Fehlerhafte Anzeige der LiquidCrystal und debug.h
(13.07.2018 18:39)do1xxy schrieb:  Hallo Forenmitglieder,

ich habe Probleme mit den beiden o. g. Einträgen.

Dazu zwei Verständnisfragen:
ein Anzeige der nach Raute include in Klammer angezeigten Lib in ROTER Farbe bedeutet doch einen Fehler, was bedeutet es aber wenn bei gleicher Konfiguration der gleiche Aufruf in blauer Farbe dargestellt wird?

Danke im voraus
Armin

Dies ist der Sketch in dem die Einträge Arduino.h und LiquidCrystal.h in blauer Schrift angezeigt werden:
Code:
// Programm für Batteriecontroller
#include "Arduino.h"
#include "LiquidCrystal.h" //Libary LCD einbinden

// LCD Anschlüsse definieren
#define RS 12     //LCD-Register Select Pin
#define EN 11     //LCD-Enable Pin
#define D4 5      //LCD-Daten Pin 4
#define D5 4      //LCD-Daten Pin 5
#define D6 3      //LCD-Daten Pin 6
#define D7 2      //LCD-Daten Pin 7
#define COLS 16   //Anzahl LCD-Spalten
#define ROWS 2    //Anzahl LCD-Zeilen
#define LightPIN 10 // Pin mit PWM für Displaybeleuchtung
byte LIGHT = 40;  // Helligkeit Displaybeleuchtung Vorbesetzung
#define LIGHT_max 100 // max. Helligkeit
#define LIGHT_min 20  // min. Helligkeit
LiquidCrystal lcd(RS,EN,D4,D5,D6,D7); //Instanziierung LCD

// Bedienoberfläche
byte Taste = 0;     // Tastenwert zur weiteren Auswertung
byte scroll = 0;    // Scrollwert zum Durchblättern der Möglichkeiten
byte Status = 0;   // Status für state machine

// Schnittstellen zur Messung der Batteriedaten
#define U1PIN  0   // an diesem Pin wird die Spannung der Batterie 1 eingelesen
#define U2PIN  1   // an diesem Pin wird die Spannung der Batterie 2 eingelesen
#define I1PIN  2   // an diesem Pin wird der Strom der Batterie 1 eingelesen
#define I2PIN  3   // an diesem Pin wird der Strom der Batterie 2 eingelesen

// Umrechnungsfaktoren für Strom und Spannung
float Aufl_U =  33.3 / 1024; // Wert in V für jeden Digitalwert
float Aufl_I20A = 0.0390625; // Wert in A für jeden Digitalwert 20A Sensor
float Aufl_I50A = 0.09765625; // Wert in A für jeden Digitalwert 50A Sensor
float Aufl_I100A = 0.1553125; // Wert in A für jeden Digitalwert 100A Sensor
float Aufl_I150A = 0.29296875; // Wert in A für jeden Digitalwert 150A Sensor
float Aufl_I200A = 0.390625; // Wert in A für jeden Digitalwert 200A Sensor

// Für das Einlesen der drei Taster wird ein vorhandener AD-Wandler benutzt,
// an den sie über einen Spannungsteiler angeschlossen sind
#define KeyPIN 4      // Anschluss Tasten
#define Prellzeit 60  // 100 ms Entprellzeit für Taster
#define DWN 1         // Nach unten Taste
#define UP 2          // Nach oben Taste
#define SET 3         // Auswahltaste
boolean single = false; // Sicherstellen, dass ein tastendruck nur einmal ausgewertet wird

// Testeinstellungen
#define ledPin 13 // Diode blinkt mit der Interruptroutine
float hilfe_1;    // Hilfsvariable für alles Mögliche
unsigned int hilfe;

// Einstellungen für Interruptroutine 1 Sekunde
int timer2Counter = 250;      // Werte für 16 MHz Quarz timer2Counter 250, TimerPre 250, Speed 1
#define TimerPre 250          // Werte für 8 MHz Quarz timer2Counter 250, TimerPre 125, Speed 2
unsigned int Timer = TimerPre; // Wert für 4,194304 Quarz timer2Counter 256 TimerPre 64; Speed 4
byte Speed = 1;

//Variable Daten in der Interrupt routine
float I_Intd = 0;
float I_Int = 0;
float Aufl = 0;
byte timeout = 0;
#define timeout_set 10       // max. Zeit für Timeout
// Batteriedaten
byte Bat = 1;     // Variable für aktuell bearbeitete Batterie
byte EBat =1;     // Wariable für die einzustellende Batterie
byte Bat_anz = 1; // Variable für aktuell angezeigte Batterie
#define AnzBat 2  // Anzahl der anschließbaren Batterien
#define Bat1 1    // Batterie 1
#define Bat2 2    // Batterie 2
// Die Batteriedaten werden in einem mehrdimensionalem (Anzahl Batterien) Array abgelegt
byte Sensetype_1 = 1;     // Sensortypen für Bat 1 u. 2 festlegen vorbesetzt mit 20 A
byte Sensetype_2 = 2;
unsigned int U_dig = 0;   // Digitalwert der Batteriespannung
unsigned int I_dig = 0;   // Digitalwert des Stromes
unsigned int Sensetype = 1; // Typ des Stromsensors, vorbesetzt mit 20 A
unsigned int Ah_dig = 0;    // 10-facher Wert der Amperestunden
unsigned int Batdaten [AnzBat] [4] = {U_dig, I_dig, Sensetype, Ah_dig};   // Arrays für Batteriedaten

// Floatbatteriedaten weil float im Array irgendwie nicht funktioniert
// Batterie 1
float I_1 = 0;              
float I_Aufl_1 = Aufl_I20A;
float As_1 = 0; //Amperesekunden
float Ladefaktor_1 = 0.9;     // Ladefaktor
//Batterie 2
float I_2 = 0;              
float I_Aufl_2 = Aufl_I20A;
float As_2 =0;
float Ladefaktor_2 = 0.9;

void setup() {  
  // Display Initialisieren
  analogWrite (LightPIN,(LIGHT)); // Beleuchtung Display einschalten
  lcd.begin (COLS,ROWS);  //Anzahl Zeilen u. Spalten
  
  // Interuptsservice ISR initialisieren
  // Die Erfassung der Batteriewerte erfolgt im Sekundenrhytmus in der ISR
  pinMode (ledPin, OUTPUT);  //Led-Pin als Ausgang
  noInterrupts();            // Alle Interrupts dekativieren
  TCCR2A = 0;                // Bits von TCCR2A löschen
  TCCR2B = 0;                // Bits von TCCR2B löschen
  TCNT2 = timer2Counter;    // Vorbesetzen von Timer 2
  TCCR2B |= (1 << CS21);    // Prescaler 64
  TCCR2B |= (1 << CS22);
  TIMSK2 |= (1 << TOIE2);  // enable Timeroverflow Interrupt
  interrupts();             //alle Interrupts aktivieren  
  
  // Startdisplay anzeigen
  lcd.clear ();             // LCD löschen
  lcd.print ("Batteriemonitor");
  lcd.setCursor (0, 1);     // Cursor in zweite Zeile
  lcd.print ("www.sy-merger.de");
  delay (5000/Speed);       // Startbildschirm 5 Sek anzeigen
  lcd.clear ();             // LCD wieder löschen
}


  



void loop() {
  // Hauptprogramm als Endlosschleife
Status = 0;                           // Status setzen
if (Bat_anz == 1) showbat_1 ();       // Daten Batterie 1 anzeigen
if (Bat_anz == 2) showbat_2 ();       // Daten Batterie 2 anzeigen

Taste = read_Keys();                  // Tastenwert einlesen
if (Taste == DWN) Lightlow ();        // Displaybeleuchtung dunkler machen
if (Taste == UP) Lightbright ();      // Displabeleuchtung heller machen
if (Taste == SET) Anzeige ();   // Einstellungsmenüe aufrufen
  
  
  
  

  delay (100);
  
  
}




void Bat_Werte_einstellen () {        // Untermenue für Batterie einstellen
Status5:
  lcd.clear ();
  lcd.print ("Einstellen Bat ");
  lcd.print (EBat);
Status54:
  lcd2clear ();
  lcd.print ("Ladefaktor");
Status51:                             // Ladefaktor einstellen  
    
    
    timeout = timeout_set;            // Timeout aufziehen
while (timeout > 0) {
  Taste = read_Keys ();               // Tasten einlesen
  if (Taste == DWN) goto Status53;    //
  if (Taste == UP) goto Status52;     //
  if (Taste == SET){
    Ladef_einst ();                   // Menue für Ladefaktoreinstellenaufrufen
  goto Status53;  
  }
else goto Status51;}
//goto Status5end;
  
Status52:                            // Stromsensor auswählen
    lcd2clear ();
    lcd.print ("Stromsensor ");
timeout = timeout_set;                // Timeout aufziehen
while (timeout > 0) {
  Taste = read_Keys ();               // Tasten einlesen
  if (Taste == DWN) goto Status54;
  if (Taste == UP) goto Status53;     //
  if (Taste == SET){
  Stroms_einst ();                    // Menue zur Wahl des Stromsensors aufrufen
  Bat_Werte_einstellen ();
   goto Status5end;  
  }}
goto Status5end;
    
Status53:                            // Einstellungen der Batteriedaten
    lcd2clear ();
    lcd.print ("fertigstellen");
timeout = timeout_set;                // Timeout aufziehen
while (timeout > 0) {
  Taste = read_Keys ();               // Tasten einlesen
  if (Taste == DWN) goto Status52;
  if (Taste == UP) goto Status54;     //
  if (Taste == SET){
  goto Status5end;                    // fertig und abschließen
  }}
goto Status5end;
  
Status5end:
lcd.clear ();                         // LCD löschen und wieder zurück ins Hauptprogram
return;
  }

void Stroms_einst () {                // Stromsensor auswählen
byte Sensor = 0;                      // aktueller Sensortype
float sense_f = 0;                    // lokaler Merker für Stromfaktor
Status6:
if (EBat ==1) Sensor = Sensetype_1;     // aktuellen Sensortype einlesen
else Sensor = Sensor = Sensetype_2;
Status61:
lcd.setCursor (12,1);                   // Cursor positionieren
switch (Sensor){
  case 1:
  lcd.print (" 20A");
  break;
  case 2:
  lcd.print (" 50A");
  break;
  case 3:
  lcd.print ("100A");
  break;
  case 4:
  lcd.print ("150A");
  break;
  case 5:
  lcd.print ("200A");
  break;  
}
  timeout = timeout_set;                // Timeout aufziehen
Status62:
  while (timeout > 0)
  {

    Taste = read_Keys ();                // Tastenwert einlesen
  if (Taste == UP)
    {
    if (Sensor == 5) Sensor = 1;
    else Sensor ++;
    goto Status61;
    }
  if (Taste == DWN)
    {
    if (Sensor == 1) Sensor = 5;
    else Sensor --;
    goto Status61;
    }
  if  (Taste == SET)
    {                              // wenn SET aktuellen Wert übernehmen
    switch (Sensor)
      {
      case 1:
      sense_f = Aufl_I20A;
      break;
      case 2:
      sense_f = Aufl_I50A;
      break;
      case 3:
      sense_f = Aufl_I100A;
      break;
      case 4:
      sense_f = Aufl_I150A;
      break;
      case 5:
      sense_f = Aufl_I200A;
      break;
      }
    if (EBat == 1) I_Aufl_1 = sense_f;     // Auflösung für aktuellen Sensortype setzen
     else I_Aufl_2 = sense_f;  
  return;  }
  }
}

void Ladef_einst () {                  // Ladefaktor einstellen
  float Ladef = 0;                      // Lokaler Speicher zur Bearbeitung des Ladefaktors
  if (EBat == 1) Ladef = Ladefaktor_1; // aktuellen Ladefaktor der zu bearbeitenden Batterie laden
  else Ladef = Ladefaktor_2;
  lcd2clear ();                        // 2. Zeile löschen
  lcd.print ("Ladefaktor: ");
  
Ladefak:
  lcd.setCursor (12,1);
  lcd.print (Ladef);                   // aktuellen Ladefaktoranzeigen
Ladefak_1:
  timeout = timeout_set;                // Timeout aufziehen
Ladefak_2:
  while (timeout > 0)
  {

    Taste = read_Keys ();                // Tastenwert einlesen
  if (Taste == UP)
    {
    if (Ladef < 0.95) Ladef = Ladef + 0.05;
    goto Ladefak;
    }
  if (Taste == DWN)
    {
    if (Ladef > 0.50) Ladef = Ladef - 0.05;
    goto Ladefak;
    }
  if  (Taste == SET)
    {                              // wenn SET eingestellten Wert übernehmen
    if (EBat == 1) I_Aufl_1 = Ladef;
    else {I_Aufl_2 = Ladef;}
    goto Ladefak_end;
    }
  }
Ladefak_end:
return;
}


void Einstellungen () {                // Batterie für Einstellung auswählen
Status4:
lcd.clear ();                         // Anzeige löschen
lcd.print ("Einstellungen");
Status41:                             // Batterie 1
    lcd2clear ();
    lcd.print ("Batterie 1");
timeout = timeout_set;                // Timeout aufziehen
while (timeout > 0) {
  Taste = read_Keys ();               // Tasten einlesen
  if (Taste == DWN) goto Status43;    //
  if (Taste == UP) goto Status42;     //
  if (Taste == SET){
   EBat = 1;                         // Einstellmenue für Bat 1 aufrufen
   Bat_Werte_einstellen ();
   goto Status4end;  
  }}
goto Status4end;
  
Status42:                            // Batterie 2
    lcd2clear ();
    lcd.print ("Batterie 2");
timeout = timeout_set;                // Timeout aufziehen
while (timeout > 0) {
  Taste = read_Keys ();               // Tasten einlesen
  if (Taste == DWN) goto Status41;
  if (Taste == UP) goto Status43;     //
  if (Taste == SET){
  EBat = 2;                          // Einstellmenue  für Batterie 2 aufrufen
  Bat_Werte_einstellen ();
   goto Status4end;  
  }}
goto Status4end;
    
Status43:                            // Einstellungen der Batteriedaten
    lcd2clear ();
    lcd.print ("fertigstellen");
timeout = timeout_set;                // Timeout aufziehen
while (timeout > 0) {
  Taste = read_Keys ();               // Tasten einlesen
  if (Taste == DWN) goto Status42;
  if (Taste == UP) goto Status41;     //
  if (Taste == SET){
  goto Status4end;                    // fertig und abschließen
  }}
goto Status4end;
  
Status4end:
lcd.clear ();                         // LCD löschen und wieder zurück ins Hauptprogram
return;
}

  
  
void Anzeige () {                     // Batterie zur Anzeige auswählen und Einstieg in die Einstellungen
Status3:
lcd.clear ();                         // Anzeige löschen
lcd.print ("Anzeige");
Status31:                             // Batterie 1
    lcd2clear ();
    lcd.print ("Batterie 1");
timeout = timeout_set;                // Timeout aufziehen
while (timeout > 0) {
  Taste = read_Keys ();               // Tasten einlesen
  if (Taste == DWN) goto Status33;    //
  if (Taste == UP) goto Status32;     //
  if (Taste == SET){
   Bat_anz = 1;                       // Anzeige für Batterie 1 einschalten
   goto Status3end;  
  }}
goto Status3end;
  
Status32:                            // Batterie 2
    lcd2clear ();
    lcd.print ("Batterie 2");
timeout = timeout_set;                // Timeout aufziehen
while (timeout > 0) {
  Taste = read_Keys ();               // Tasten einlesen
  if (Taste == DWN) goto Status31;
  if (Taste == UP) goto Status33;     //
  if (Taste == SET){
   Bat_anz = 2;                       //Anzeige für Batterie 1 einschalten
   goto Status3end;  
  }}
goto Status3end;
    
Status33:                            // Einstellungen der Batteriedaten
    lcd2clear ();
    lcd.print ("Einstellungen");
timeout = timeout_set;                // Timeout aufziehen
while (timeout > 0) {
  Taste = read_Keys ();               // Tasten einlesen
  if (Taste == DWN) goto Status32;
  if (Taste == UP) goto Status31;     //
  if (Taste == SET){
   Bat_anz = 1;                       //Anzeige für Batterie 1 einschalten
   Einstellungen ();                  // Einstellunsmenue für Batterien aufrufen
   goto Status3end;  
  }}
goto Status3end;
  
Status3end:
lcd.clear ();                         // LCD löschen und wieder zurück ins Hauptprogram
return;
}

void lcd2clear (){                    // 2. Zeile des Displays löschen und Cursor auf Anfang der Zeile
  lcd.setCursor (0,1);
  lcd.print ("                ");     // 16 Blanks ausgeben
  lcd.setCursor (0,1);
  }

void Lightlow () {                    // Displaybeleuchtung dunkler
  if (LIGHT > LIGHT_min) LIGHT = LIGHT - 10;
  analogWrite (LightPIN,(LIGHT));
  }
  
  
void Lightbright (){                  // Displaybeleuchtung heller
  if (LIGHT < LIGHT_max) LIGHT = LIGHT + 10;
  analogWrite (LightPIN,(LIGHT));
  }
  
  
// Tasten einlesen
byte read_Keys () {
  unsigned int keyvalue = analogRead (KeyPIN);        // Wert von Taste einlesen
  byte key = 0;
  if (keyvalue > 50) {delay(Prellzeit);       // auf Entprellung warten
  keyvalue = analogRead (KeyPIN);
  if (keyvalue < 50)return key;              // Prüfen  Taste immer noch gedrückt, wenn nein zurück
  }
  else {single = false;
  return key;                            // Keine Taste gedrückt zurück
  }
  
  // Tastenauswertung
  if (single == true){                  // Wenn gedrückte Taste schon erkannt nicht mehr zurückgeben
    key = 0;
    return key;
    }
  if ((keyvalue > 200)
  && (keyvalue < 240)) key = DWN;               // Down-Taste erkannt
  else {if ((keyvalue > 400)
  && (keyvalue < 440)) key = UP;               // Up-Taste erkannt
  else  {if ((keyvalue > 640)
  && (keyvalue < 680)) key = SET;}}   // Set-Taste erkannt
  single = true;                     // Merker für erstmaliges erkennen
  return key;  
  }

//Anzeige Werte der Batterie 1
  void showbat_1 (){
  lcd.setCursor (0,0);
  lcd.print ("Bat:1       ");
  hilfe_1 = abs (As_1/3600);
  if (hilfe_1 != 0) {
  if (hilfe_1 >= 100) lcd.setCursor (7,0); // für 3-stellige Ah-Zahlen
  if (hilfe_1 < 10) lcd.setCursor (9,0);   // für 1-stellige Ah-Zahlen
  else lcd.setCursor (8,0);             // für 2-stellige Ah-Zahlen
  lcd.print (As_1/3600);      //Ah anzeigen
  lcd.print ("Ah");}
  else {
  lcd.setCursor (7,0);
  lcd.print ("   0.00Ah");}
  
  lcd.setCursor (0,1);       //Cursor in die zweite Zeile positionieren
  lcd.print (analogRead (U1PIN)* Aufl_U); //Spannung anzeigen
  lcd.print ("V     ");
  if (I_1 >=10) lcd.setCursor (10,1);       // für 2-stellige positive A-Zahlen
  if (I_1 < 10) lcd.setCursor (11,1);       // für 1-stellige positive A-ZAhlen
  if (I_1 < 0) lcd.setCursor (10,1);        // für 1-Stellige negative A-Zahlen
  if (I_1 <= -10) lcd.setCursor (9,1);      // für 2-stellige negative A-Zahlen
  lcd. print (I_1);          // Strom anzeigen
  lcd.print ("A");
  }


//Anzeige Werte der Batterie 2
void showbat_2 (){
  lcd.setCursor (0,0);
  lcd.print ("Bat:2      ");
  hilfe_1 = abs (As_2/3600);
  if (hilfe_1 != 0) {
  if (hilfe_1 >= 100) lcd.setCursor (7,0); // für 3-stellige Ah-Zahlen
  if (hilfe_1 < 10) lcd.setCursor (9,0);   // für 1-stellige Ah-Zahlen
  else lcd.setCursor (8,0);             // für 2-stellige Ah-Zahlen
  lcd.print (As_2/3600);      //Ah anzeigen
  lcd.print ("Ah");}
  else {
  lcd.setCursor (7,0);
  lcd.print ("   0,00Ah");}
  
  lcd.setCursor (0,1);       //Cursor in die zweite Zeile positionieren
  lcd.print (analogRead (U1PIN)* Aufl_U); //Spannung anzeigen
  lcd.print ("V     ");
  if (I_2 >=10) lcd.setCursor (10,1);       // für 2-stellige positive A-Zahlen
  if (I_2 < 10) lcd.setCursor (11,1);       // für 1-stellige positive A-ZAhlen
  if (I_2 < 0) lcd.setCursor (10,1);        // für 1-Stellige negative A-Zahlen
  if (I_2 <= -10) lcd.setCursor (9,1);      // für 2-stellige negative A-Zahlen
  lcd. print (I_2);          // Strom anzeigen
  lcd.print ("A");
  }



// Interruptserviceroutine ISR
ISR(TIMER2_OVF_vect) {
  TCNT1 = timer2Counter;   // Preload des Timers1
  if (Timer > 0)
  {Timer --;}              // Timer dekrementieren
  else
  {Timer = TimerPre;       // Timer wieder vorbesetzen
  
  Bat = Bat1;         // aktuelle Daten der Batterie 1 einlesen und verrechnen
  Batdaten [Bat] [U_dig] = analogRead(U1PIN); //Spannung
  I_1 = I_Aufl_1 * (analogRead (I1PIN)-512); // Strom einlesen und mit Auflösung des Sensors verrechnen
  if (I_1 > 0) As_1 = As_1 + I_1 * Ladefaktor_1;     // Ladestrom evt. um Ladefaktor korrigieren
  else As_1 = As_1 + I_1;                           //und zu Speicher von Amperesekunden addieren
  if (As_1 > 0) As_1 = 0;
  
  Bat = Bat2;         // aktuelle Daten der Batterie 2 einlesen
  Batdaten [Bat] [U_dig] = analogRead(U2PIN); //Spannung
  I_2 = I_Aufl_2 * (analogRead (I2PIN)-512); // Strom einlesen und mit Auflösung des Sensors verrechnen
  if (I_2 > 0) As_2 = As_2 + I_2 * Ladefaktor_2;     // Ladestrom evt. um Ladefaktor korrigieren
  else As_2 = As_2 + I_2;                           // und zu Speicher von Amperesekunden addieren
  if (As_2 > 0) As_2 = 0;
  
  timeout --; // Timeoutzähler dekrementieren
  digitalWrite(ledPin, digitalRead(ledPin) ^ 1);} //LED zur Kontrolle der ISR blinken lassen
  }

Dies ist der Sketch in dem der Eintrag LiquidCrystal.h in roter Farbe angezeigt wird:

Code:
//Akkutester

#include <LiquidCrystal.h>

// Arduino Pins
#define  PINUbatt   0       // Analog PIN Batteriespannung
#define  PINUDS     1       // Analog PIN Spannungsabfall am FET (Drain-Source)
#define  PINStart   4       // Digital PIN Startknopf
#define  PINRelais  5       // Digital PIN Relais oder MOSFET
#define  PINLCD_RS  8       // Digital PIN LCD RS
#define  PINLCD_EN  9       // Digital PIN LCD EN
#define  PINLCD_D4  10      // Digital PIN LCD D4
#define  PINLCD_D5  11      // Digital PIN LCD D5
#define  PINLCD_D6  12      // Digital PIN LCD D6
#define  PINLCD_D7  13      // Digital PIN LCD D7
//
#define  Umin 950           // mV Spannung bei der Entladung abgebrochen wird
#define  INTERVAL  2000     // Zeit fuer Schleife

//4bit RW on GND LiquidCrystal(rs, enable, d4, d5, d6, d7)
LiquidCrystal lcd(PINLCD_RS,PINLCD_EN,PINLCD_D4,PINLCD_D5,PINLCD_D6,PINLCD_D7);  

// div. Globals
long loopTime = INTERVAL;
long loopUsedTime = INTERVAL;
long loopStart = 0;
float U = 0;
float Ufet = 0;
float I = 0;
float P = 0;
float Q = 0;
long loopCount = 0;
boolean start = false;
boolean ende = false;

void setup()  {
  //Serial.begin(19200);
  pinMode(PINRelais, OUTPUT);
  pinMode(PINStart, INPUT); // Start Taster
  digitalWrite(PINStart, HIGH);
  lcd.begin(20, 2);  
  lcd.print("  www.komputer.de");
  delay(2000);
  lcd.clear();
}

void loop()  {
  // erstmal Spannung messen  - solange der Starttknopf nicht gedrückt wurde - nach dem Test auch wieder hier rein...
  while (start==false) {
  U = analogRead(PINUbatt)*4.8828125;       // in mV
  //print_ser();
  print_lcd();
  if (digitalRead(PINStart)==LOW) {
  start = true;
  ende = false;
  }
  delay(2000);
  }
  
  digitalWrite(PINRelais,HIGH);   // Relais ein  
  
  loopStart = millis();
  U = analogRead(PINUbatt)*4.8828125;      // in mV
  Ufet = analogRead(PINUDS)*4.8828125;     // in mV
  I = U-Ufet/1.5;     // in mA
  P = (I*U)/1000;   // in mW
  Q += P * loopTime / 3600 / 1000;         // in mAh
  //print_ser();
  print_lcd();
  
  if(U <= Umin) {                     // wenn Batteriespannung unter eingest. Mindestspannung faellt
    digitalWrite(PINRelais,LOW);      // Test abbrechen
    start = false;
    Serial.println("Stop");
    ende = true;
   }
  
  loopCount++;
  loopUsedTime = millis()-loopStart;
  if(loopUsedTime < INTERVAL)         delay(INTERVAL - loopUsedTime);
  loopTime = millis() - loopStart;
}

void print_lcd()  {
  lcd.clear();
  lcd.print(U/1000,2);    // Spannung in Volt anzeigen
  lcd.print("V");
  lcd.setCursor(6,0);
  format_print(I);
  lcd.print("mA");
  lcd.setCursor(14,0);
  if (start==false && ende == false) lcd.print("START");   //  ST - Startknopf druecken
  if (start==true) lcd.print("RUN");                     //  RU - Test runnig...
  if (ende==true) lcd.print(" END");                      //  E  - Test Ende
  lcd.setCursor(0,1);
  format_print(Q);
  lcd.print("mAh");
  lcd.setCursor(11,1);
  lcd.print(loopCount/(60000/INTERVAL));                
  lcd.print(":");
  if(((loopCount%(60000/INTERVAL))*INTERVAL/1000)<10)  lcd.print("0");
  lcd.print((loopCount%(60000/INTERVAL))*INTERVAL/1000);  
  }

void format_print (float value){ // in Ausgabe passende Anzahl Spaces einfuegen - 4stellige Zahl
  if (value < 1000)lcd.print(" ");
  if (value < 100) lcd.print(" ");
  if (value < 10)  lcd.print(" ");
  lcd.print(value,0);
}

//void print_ser()  {
//  Serial.print(loopCount/(60000/INTERVAL));
//  Serial.print(":");
//  if(((loopCount%(60000/INTERVAL))*INTERVAL/1000)<10)  Serial.print("0");
//  Serial.print((loopCount%(60000/INTERVAL))*INTERVAL/1000);
//  Serial.print("    ");
//  Serial.print((int)U);                       Serial.print(" mV   ");
//  Serial.print((int)Ufet);                    Serial.print(" mV   ");
//  Serial.print((int)I);                       Serial.print(" mA   ");
//  Serial.print((int)P);                       Serial.print(" mW       ");
//  Serial.print((int)Q);                       Serial.println(" mAh");
//}

Die Libraries sind im Ordner Arduino/Documente abgelegt. Beide Sketche steuern das LCD-Display nicht an, wobei nicht auszuschließen dass in dem Display einen inkompatiblen Kontroller verbaut ist (China-Modell).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
14.07.2018, 10:08
Beitrag #5
RE: Fehlerhafte Anzeige der LiquidCrystal und debug.h
Die Libs gehören nach <Sketchbook>/libraries.

Wobei <Sketchbook> der Ordner bei Dir ist, in dem sich die Verzeichnisse der Sketche befinden, unter Windows oft Dokumente\Arduino.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
14.07.2018, 10:31
Beitrag #6
RE: Fehlerhafte Anzeige der LiquidCrystal und debug.h
(14.07.2018 10:08)Tommy56 schrieb:  Die Libs gehören nach <Sketchbook>/libraries.

Wobei <Sketchbook> der Ordner bei Dir ist, in dem sich die Verzeichnisse der Sketche befinden, unter Windows oft Dokumente\Arduino.

Gruß Tommy

Hallo Tommy,

da sind sie ohnehin drin. Weil bei einem anderen Sketch immer der Fehler auftritt dass die debug.h nicht gefunden wird, und als fehlender Ordner immer Arduino/Documents/ angegeben wird, habe ich alle Libs zusätzlich auch dahin kopiert.
Genutzt hat es allerdings nichts Sad, beim Kompilieren wird immer noch die fehlende debug.h bemängelt - das ist aber eine andere Baustelle.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
14.07.2018, 11:01 (Dieser Beitrag wurde zuletzt bearbeitet: 14.07.2018 11:02 von Tommy56.)
Beitrag #7
RE: Fehlerhafte Anzeige der LiquidCrystal und debug.h
Arduino/Documents ist kein gültiger Lib-Pfad und Libs mehrfach im Arduino-Verzeichnis zu halten ist eine der denkbar schlechtesten Ideen.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
14.07.2018, 13:06
Beitrag #8
RE: Fehlerhafte Anzeige der LiquidCrystal und debug.h
(14.07.2018 11:01)Tommy56 schrieb:  Arduino/Documents ist kein gültiger Lib-Pfad und Libs mehrfach im Arduino-Verzeichnis zu halten ist eine der denkbar schlechtesten Ideen.

Gruß Tommy

Hallo Tommy,

dann werde ich den Ordner leeren, mal sehen wie es dann läuft. Ich verstehe nicht wieso ich plötzlich Probleme habe, speziell bei dem rc_light Sketch. Damit habe ich für unsere Modellbauer schon einige Minis zum Einsatz gebracht. Und dann von einem auf den anderen Tag geht nichts mehr. Am Abend gab es ein großes W10 Update. Ich kann mir zwar nicht vorstellen dass das Update dafür verantwortlich ist, aber der kausale Zusammenhang scheint naheliegend.
Mal sehen wie es nach dem Aufräumen läuft.

Auf jeden Fall schon einmal danke für Deine bisherigen Ratschläge.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Problem mit TFT Display Anzeige wechseln Thor Wallhall 10 875 06.07.2018 20:51
Letzter Beitrag: Thor Wallhall
  Hilfe bei der Programmierung Digitaluhr ,mit Anzeige 32x8 Lora 1 416 10.03.2018 11:44
Letzter Beitrag: hotsystems
  NTC für LCD-Anzeige.Weiter bekomme ich nicht hin malsehen 17 1.339 09.03.2018 20:28
Letzter Beitrag: malsehen
  ILI9341 MEGA2560 keine BMP anzeige tillmg 4 490 08.02.2018 20:18
Letzter Beitrag: georg01
  Hilfe!!! bei 7-Segment Anzeige Markus2018 9 878 31.01.2018 21:14
Letzter Beitrag: Tommy56
  Anzeige von Daten FreDicnc 9 1.627 24.06.2017 11:09
Letzter Beitrag: FreDicnc
  DS18B20 Pool-Thermometer mit 7Seg.-Anzeige Evilgnievel 19 2.054 23.06.2017 09:27
Letzter Beitrag: Tommy56
  Zeitabhängige LED Anzeige mit 2x4 Input Abfrage do1xxy 2 839 05.03.2017 19:25
Letzter Beitrag: do1xxy
  TFT Anzeige Tellen 7 1.278 14.02.2017 22:04
Letzter Beitrag: hotsystems
  Anzeige ruhiger halten Franz54 9 1.507 19.12.2016 01:28
Letzter Beitrag: SkobyMobil

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste