PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Arduino Mega und LCD Display code Fehler



RoboterSindCool
18.12.2016, 13:05
Guten 4 Advent!

Ich bin gerade dabei eine Steuerung für einen Roboter zu Programmieren (Steuerung ist damit man dem Roboter Sagen kann was er tun soll). Diese Steuerung besteht aus 2 Displays und zu jedem Display gehören 5 knöpfe (wie ein Steuerkreuz angeordnet). Ich will, dass auf dem Display 1 verschiedene Funktionen angezeigt werden, die er Roboter ausführen kann. Dann soll man per Knopfdruck die gewünschte Funktion auswählen und dann mit der Mitteltaste diese bestätigen. Die Funktionen (die der Roboter können soll) stehen in dem "funktionen" Array (siehe im code). Das Problem:
Wenn ich das LCD direkt anspreche also wie im ersten Beispiel, dann funktioniert das. Wenn ich aber probiere mit einer Schleife die jeweilige funktion aus dem Array auszulesen und diese dann immer in die nächste Zeile zu schreiben funktionert es nicht und der Display zeigt sogar nur noch "qqqqqqqqqqqqqqqqq" oder so ein ähnliches Zeichen an. Der ganze Display ist dann mit diesen Zeichen gefüllt.

Beispiel 1 (so funktioniert es) :

LCD_Mod1.setCursor(0,0);
LCD_Mod1.print(funktionen[0]);
LCD_Mod1.setCursor(0,1);
LCD_Mod1.print(funktionen[1]);
LCD_Mod1.setCursor(0,2);
LCD_Mod1.print(funktionen[2]);


Beispiel 2 (so funktioniert es nicht):

void BIB_Roboterbedienung :: LCD_Aktualisieren(){


LCD_Mod1.clear();



for(int z = 0; z <= (sizeof(funktionen) - 1); z++){ //funktionen ist der Array mit den Funktionen

if(z == LCD_counter){ //Das ist, damit die gerade ausgewählte funktion erkennbar ist
LCD_Mod1.setCursor(0, z);
LCD_Mod1.print(" * ");
LCD_Mod1.setCursor(3, z);
LCD_Mod1.print(funktionen[z]);
}
else{
LCD_Mod1.setCursor(0, z);
LCD_Mod1.print(funktionen[z]);
}
}


}

Peter(TOO)
18.12.2016, 22:25
Hallo,

Was jetzt noch fehlt ist die Deklaration von funktionen[] ?

Nehmen wir mal als Beispiel:

int i[3];
Weiter nehmen wir an int ist 32-Bit, also 4 Byte.

sizeof(i) liefert nun den Speicherbedarf von i in Bytes, also
3*4 = 12

In einer for-Schlaufe würde dann i[0] bis i[11] abgearbeitet, was nicht so ganz das gewünschte Ergebnis liefert :-(

richtig wäre
((sizeof(i)/sizeof(i[0]))

in diesem Falle wäre auch
((sizeof(i)/sizeof(int))
möglich. Das macht dann aber Probleme, wenn du z.B. i von int in long änderst. Du musst dann den Source an zwei Stellen ändern!

MfG Peter(TOO)

RoboterSindCool
19.12.2016, 16:41
Hi vielen vielen Dank ! ich hab leider ausversehen 2 Threads erstellt! Das andere Thread ist hier
https://www.roboternetz.de/community/threads/69985-Arduino-Mega-und-LCD-Display-code-Fehler-%28Display-20x-4%29
und schon beantwortet. Ich würde gerne meine erstellten Threads als "Beantwortet" Markieren, raff aber nicht so richtig wie das gehen soll`?