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
Arudrino Leonardo mit Display hängt sich auf
26.08.2015, 20:33 (Dieser Beitrag wurde zuletzt bearbeitet: 26.08.2015 20:34 von EvilKnivel.)
Beitrag #1
Shocked Arudrino Leonardo mit Display hängt sich auf
Hallo zusammen,

vielen Dank erstmal für dieses Coole Forum. Durch mitlesen wurde mir hier schon oft geholfen Wink

Leider komme ich an einem Punkt in meinem Projekt nicht weiter.

Ich habe ein Leonardo mit einem 20x4 LCD Display (china). Auf diesem liefen das "Hello World" etc Problemlos.

Also habe ich es in mein Projekt implementiert. Unten der Code ist eine abgespeckte Version aber zeigt den selben Effekt. Was ich auf dem Display anzeigen möchte ist u.A. der Status von drei Tastern.

Mein Code läuft problemlos, solang ich die Taster nicht abfrage. Sobald ich die "AbfrageZeit()" mit einbaue stürzt das Programm ab und das Display zeigt nichts mehr richtig an.

Und jetzt wird richtig komisch: Das hat scheinbar auch dazu geführt, dass mein Leonardo sich nicht mehr bespielen lässt. Es wird vom PC nicht mehr erkannt. Hatte zuerst gedacht das ich die USB Verbindung im falschen Moment beim Programmieren getrennt hab oder so - und es so geschossen hab. Aber auch bei meinem zweiten Leonardo trat das Problem auf. Zuerst wurde es nicht mehr erkannt aber glücklicherweise konnte ich es nach einiger Zeit wieder bespielen. Traue mich aber nicht weiter zu machen, da ich den Fehler nicht verstehe.

Was ist an der Abfrage falsch (mit Serial.print ohne Display funktioniert es)?
Warum kann ich scheinbar mit dem Programm den Bootloader zerstören? (Komischerweise hat ein neu aufspielen des Bootloaders beim defekten Leonardo vom funktionierenden Leonardo auch nicht funktioniert, hab mich damit aber noch nicht weiter befasst)

Hoffentlich könnt ihr mir weiter helfen?

Code:
#include <LiquidCrystal.h>
#include <Wire.h>


LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
//----> switches config

int switchPinT1 = 4;  /*Timer gelb*/
int switchPinT2 = 5;  /*Timer rot*/
int switchPinT3 = 3;  /*Timer gruen*/


//----> switch status
int lastStateT[2];
int newStateT[2];

//---->
int selectHeat = 5;
int selectGroup = 11;
char* PilotName[] = {"Mustermann", "Beispiel", "Egal"};
char* PilotVorname[] = {"Max", "Moritz", "Franz"};
int indent = 1;
long Timeout = 0;
int idPt[2];
int idP1[2];
int idP2[2];
int idP3[2];
unsigned long currentTime;

void setup() {
  pinMode(switchPinT1, INPUT);
  pinMode(switchPinT2, INPUT);
  pinMode(switchPinT3, INPUT);
  lcd.begin(20, 4);
  DisplayIndentSetup();
  
}

void loop() {
  AbfrageZeit(); // Wenn diese Funktion aktiv ist stürzt das Porgramm ab, Leonardo nicht mehr bespielbar!
  currentTime = millis();
  DisplayIndent();
  delay(100);
}

void DisplayIndent()
{
  
  int i=0;
  i = indent;
    if(PilotVorname[i] != "NA"){
      
        if(currentTime -  Timeout < 400)
          {
          lcd.setCursor(12,i+1);
          lcd.print("T"); lcd.print(" ");
          lcd.print("1"); lcd.print(" ");
          lcd.print("2"); lcd.print(" ");
          lcd.print("3"); lcd.print(" ");
          
          return;}
        if (currentTime -  Timeout > 1500){Timeout = currentTime;}
        
      lcd.setCursor(12,i+1);
      lcd.print("T"); if(idPt[0] == 1){lcd.print((char)255);} else {lcd.print((char)219);} //eigentlich idP1[i], zu testzwecken idPt[0]
      lcd.print("1"); if(idPt[1] == 1){lcd.print((char)255);} else {lcd.print((char)219);} //eigentlich idP1[i], zu testzwecken idPt[1]
      lcd.print("2"); if(idPt[2] == 1){lcd.print((char)255);} else {lcd.print((char)219);} //eigentlich idP2[i], zu testzwecken idPt[2]
      lcd.print("3"); if(idP3[i] == 1){lcd.print((char)255);} else {lcd.print((char)219);}
    
    }
  
}
void DisplayIndentSetup()
{
  lcd.clear();
  lcd.print("Heat: "); lcd.print(selectHeat, DEC); lcd.print(" Group: "); lcd.print(selectGroup, DEC);
  for (int i=0;i<3;i++) {
    if(PilotVorname[i] != "NA"){
      lcd.setCursor(0,i+1);
      lcd.print(PilotVorname[i][0]); lcd.print("."); lcd.print(PilotName[i]);
    }
  }
}

//------------------------------------------------------------------------------
// Wenn diese Funktion aktiv stürzt das Porgramm ab, Leonardo nicht mehr bespielbar!
void AbfrageZeit() {
  newStateT[0] = digitalRead(switchPinT1);
  newStateT[1] = digitalRead(switchPinT2);
  newStateT[2] = digitalRead(switchPinT3);
  for (int i=0;i<3;i++){
    if(newStateT[i]!=lastStateT[i])
    {
      if(newStateT[i]==HIGH) {idPt[i] = 1; }
      lastStateT[i] = newStateT[i];
    }
  }
}

Danke & Gruß

Christoph
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Arduino UNO hat sich Aufgehängt?? huber5093 24 1.232 28.04.2017 19:58
Letzter Beitrag: Tommy56
  Waveform auf Nextion Display GuaAck 6 382 12.04.2017 19:08
Letzter Beitrag: SkobyMobil
  neues OLED Display nötig an vorhandenem uC Systemswerlich Ersatz hd311 7 248 26.03.2017 11:16
Letzter Beitrag: hd311
  Pinbelegung TFT-Display ILI9341 mingo 19 753 23.03.2017 17:49
Letzter Beitrag: oOSpikeOo
Bug ESP8266 ESP-12E & DHT22 hängt sporadisch Lurchi 6 549 31.01.2017 17:42
Letzter Beitrag: NormanIGB
  Arduino Läst sich nicht Programmieren Micha06 4 403 29.01.2017 17:27
Letzter Beitrag: Micha06
  Display über I2-Bus betreiben mfri 22 1.024 23.01.2017 11:06
Letzter Beitrag: renid55
  Arduino hängt beim Upload deranda 14 1.139 20.01.2017 16:14
Letzter Beitrag: renid55
  Leonardo futsch? kpc 7 354 14.12.2016 23:53
Letzter Beitrag: Tommy56
  matrix display elegoo uno R3 starter set lecker16 7 819 23.11.2016 21:14
Letzter Beitrag: Bitklopfer

Gehe zu:


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