Hallo, ich versuche eine Laufschrift mit einem LCD zu realisieren. Es
handelt sich hier um ein LCD Display mit 4 Zeilen und 20 Spalten.
Angesteuert wird es direkt im 4Bit Mode über einen Raspberry. Als GPIO
Schnittstelle dient PIGPIO.
Nun habe ich aber das Problem, dass meine Funkion nicht so will, wie ich
mir es gedacht habe.
Ich möchte, dass mit jedem Aufruf der Funktion die Stelle um eins nach
links wandert. Der Text ist in der Regel kürzer als 50 Zeichen.
Als Ausgabe bekomme ich nur "sigHandler : Unhandled signal 11,
terminating."
1
voidlcd_string_scroll(char*text,unsignedcharline)
2
/* Text soll links stehend starten und nach links verschwinden.
3
* Hinter dem letzten Zeichen soll ein Trenner zB. " *** "
4
* eingebaut werden und danach den Text wiederholen.
5
* | H a l l o _ W e
6
* | a l l o _ W e l
7
* | l l o _ W e l t
8
* | ....
9
* | l t _ * * * _ H
10
* | t _ * * * _ H a
11
*/
12
{
13
//Speichert aktuelle Position
14
staticunsignedcharpos[LCD_LINES];
15
// Speichert das letzte Array, um zu uberpruefen,
16
// ob bei einem erneutet Aufruf der Text angepasst wurde
17
staticchar*lastText[LCD_LINES];
18
19
// Vergleicht Zeichenketten, setzt die Positon auf Anfang,
Hallo Max,
mehr gibt er nicht aus. Er kompiliert soweit korrekt.
Sobald in das kompilierte File starte, erhalte ich in der Konsole die
Rückmeldung
"sigHandler : Unhandled signal 11,
und das Programm wird unerwartet beendet.
Der Text wird nicht mehr ausgegeben. Lediglich Zeile 1 wird beschrieben,
hier ist aber nur die lcd_string (aus dem Wiki hier) eingebaut.
Du zeigst, wie EINE Zeile von rechts nach links durchwandert.
Was soll mit den anderen 3 Zeilen passieren?
Sollen die sich "hochschrauben"?
Oder sollen sie parallel dazu durchlaufen?
Wie soll das aussehen, wenn die 4 Zeilen unterschiedliche
Länge haben? Das wird UNLESBAR!
Bevor du fragst, wie man es programmieren kann, solltest du
dir erst mal klarmachen, wie es aussehen soll.
Hallo Oldie,
da gebe ich dir Recht, das scheint noch nicht optimal zu sein.
Ggf. versuche ich es, das ganze noch etwas auszugliedern.
In der main wird eine Setz-Funktion aufgerufen, wenn sich der Inhalt
geändert hat. Damit wird dann der Inhalt einer einzelnen Zeile geändert.
Eine weitere Funktion, die dann 2mal die Sekunde aufgerufen wird und
alle Zeilen um eins nach links shiftet.
Also das die Texte unterschiedlich lang sind, ist nicht das Problem. Es
geht um eine Anzeige für MPClient.
In der ersten Zeile wird der Artist - Titel ausgegeben. Dieser ist in
der Regel immer länger als 20 Zeichen. In der 2. Zeile befindet sich da
Album, falls verfügbar. Wenn der Text ausreicht fürs Display, wird hier
nicht geshiftet.
Laufschrift LCD schrieb:
sigHandler : Unhandled signal 11,
Mal kopiert und im Suchfeld von Google eingegeben.
ok dann noch ein "Raspberry " davor getippt -->
Scheinst nicht der einzige zu sein, der mit dem Problem bei Verwendung
von PIGPIO zu kämpfen hat..
https://www.raspberrypi.org/forums/viewtopic.php?f=81&t=77337
Hoffe, dass die Anregung hilft..
Und es wäre schön, wenn hier die Lösung gepostet würde.
BirgerT schrieb:> Laufschrift LCD schrieb:> sigHandler : Unhandled signal 11,>> Mal kopiert und im Suchfeld von Google eingegeben.
Da brauchst du nicht lange suchen.
Wer mit NULL-Pointer in strcmp reingeht, braucht sich nicht wundern wenn
alles abkratzt.
Fazit: wieder mal viel zu viel 'Funktionalität' auf einmal programmiert.
Das hier
1
unsignedchari;
2
for(i=0;i<LCD_ROWS;i++){
3
lcd_data(text[pos[line]]);
4
}
ist auch Unsinn.
Fang langsam an!
Erst mal einen Text ausgeben. Von nur einer Zeile.
Dann überlegen, wie man die Startadresse des Textanfangs bei jedem
Aufruf durch die Zeile durchzieht.
Und dann erst die ganzen Spezialfunktionalitäten, wie zb das
Berücksichtigen eines Textwechsels. Oder dass die Funktion mit mehreren
Zeilen umgehen kann.
Schrittweise vorgehen und lieber kleine Schritte machen als einen
grossen und dann auf die Schnauze zu fallen.