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 | void lcd_string_scroll(char *text, unsigned char line) |
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 | static unsigned char pos[LCD_LINES]; |
15 | // Speichert das letzte Array, um zu uberpruefen,
|
16 | // ob bei einem erneutet Aufruf der Text angepasst wurde
|
17 | static char *lastText[LCD_LINES]; |
18 | |
19 | // Vergleicht Zeichenketten, setzt die Positon auf Anfang,
|
20 | // wenn diese sich unterscheiden
|
21 | if(strcmp(text, lastText[line]) != 0) pos[line] = LCD_ROWS; |
22 | |
23 | // Laenge der Zeichenkette bestimmen
|
24 | unsigned char lenText = strlen(text); |
25 | |
26 | unsigned char i; |
27 | for(i = 0; i < LCD_ROWS; i++) { |
28 | lcd_data(text[pos[line]]); |
29 | }
|
30 | |
31 | if(pos[line] >= lenText) pos[line] = LCD_ROWS; |
32 | }
|