LiquidCrystal lcd.setCursor(0, 1) setzt nicht auf 1. Zeichen

Benutze ein 16*2 LCD Display und kann in der 2. Zeile den Cursor nicht auf die Anfangsposition setzen. Geschrieben wird in der Regel beginnend von Pos. 7. Nach einem Restart auch auf Pos. 3.
Für die erste Zeile funktioniert alles. Kann als neuer Benutzer Datei nicht hochladen, deshalb diesr Weg.

void LCD_Message_0x3F_Small::print_LCD_Message (String LCD_Msg_Line_1, String LCD_Msg_Line_2) {
	LiquidCrystal_I2C lcd(I2C_Address_LCD, LCD_Colums_16, LCD_Rows_2); 
	uint8_t l;										// temp. Variable zum Zentrieren
	String s;										// temp. Variable zum Zentrieren						
	// Ausgabe untere Zeile
	lcd.backlight();
	if (LCD_Msg_Line_2 == ""){			
		Serial.println("Zeile 1 - Nichts tun");
	}
	else{										
		Serial.println("LCD_Msg_Line_2");
		lcd.setCursor(0,1 );
		lcd.backlight();
		s =LCD_Msg_Line_2;
		l = LCD_Colums_16 - s.length();
		if (l <= 0){							// werden nur die ersten 16 Zeichen des Strings ausgegeben	
			lcd.print(s);						// Ausgabe untere Zeile	
			Serial.println(s);					
		}
		else{
			lcd.setCursor(l/2,1 );
			lcd.print("                ");		// lösche untere Zeile - leerzeichen
			lcd.print(s);						// Ausgabe untere Zeile	
			Serial.println(s);		
		};
	};	
}

Vllt. hat jemand eine Idee.
Danke und schönen Montag.

Zeige ales, hier kann man nicht sehen um was es geht. Wen l/2 wird keine Ganzzahl werschiebt sich um 1
3÷2 wird im Display in pos 1,1 geschrieben wen so ist must man "Runden"

wird nie verwendet, ist das Absicht?
und warum wird das Objekt lcd immer wieder neu erzeugt ?

Je nach Controler auf dem LCD können die Speicherbereiche unterschiedlich sein.
Mach mal ne Schleife
, schieb immer 1 Zeichen raus und schau, wann die 2. Zeile drankommt.

wird für die 1. zeile verwendet, die habe ich nicht mit gepostet, wegen des platzes. Daher weiß ich ja, dass es für die 1. Zeile geht. Code ist ja nur anzupassen.
Die Objekterzeugung resultiert aus dem stufenweise testen, wird später noch entfernt. Wenn auch nicht schön, sollte aber nicht schädlich sein.

Gruss M.

danke, das werde ich tun. Bin gerade beim Löten, um Hardwaremacke auszuschließen. (I2C.Adapter auf neues LCD).
Gruß M.

3/2 kann in pos 1,1 geschrieben werden. das runden war mir egal, da es nur Auswirkungen um eine Stelle hat. Code konte ich nicht posten, muss der Mod mir erst erlauben.

Gruß M.

Du kannst den gesamten Code so posten, wie oben den teil. Also nix, was zusätzlichem Einsatz benötigt.

Komischer Code.

Ich würde das SO schreiben :

l =( LCD_Colums_16 / 2) - (s.length() / 2);
lcd.setCursor(l,1 );

Ich weiß nur nicht, ob die Funktion "lcd.setCursor" Kommazahlen akzeptiert.
Ansonsten einfach in eine Festzahl (Integer) umwandeln.

Aus Erfahrung kann ich dir sagen, das es ist wie bei einer Frau. Schwanger oder nicht Schwanger. Ein Zwischending gibt es nicht.
Dann spinnt beim ersten Befehl das ganze Display, wenn da eine fehlerhafte Lötstelle ist.

Kleiner Hinweis am Rande:

Gruß

Pucki

Das ist jetzt nicht Dein ernst:

Was hast Du denn an dem Code nicht verstanden?

Vollkommender Unsinn.

Keine Ahnung was du meinst.

Der TO will nur in der 2. Zeile ein Text zentieren.
Und wenn bei Ergebnis der Start-Pos eine Kommazahl raus kommt.... ?

Gruß

Pucki

Das ist puckies Superkraft

2 Likes

Wie soll das gehen?
Und was ist ein cast?
Fragen über Fragen - aber die solltest Du Dir stellen, bevor... Aber das weisst Du ja.

Text_lang = 5;
Display_lang = 16;
l = (Display_lang/2) - (Text_lang /2);

//StartPos = 8 - 2,5 = 5,5 Also ... ?!!?!?!?!?

Gruß

Pucki

Du sollst nicht auf einem Taschenrechner irgendwas eintippen, sondern lernen wie die Sprache funktioniert die Du benutzt!
Hast Du nicht erst gestern geschrieben, über welches Alter und Jahrzehnte Wissen Du verfügst?

Labere weiter die TO voll mit "wie funktioniert ein Forum".

Ich habe den selben Code bei mir laufen und er funktioniert. Er einige Unterschied ist, das der Text den ich Zentriere grundsätzlich 4 Stellig ist. Weshalb ich das Problem nicht habe.

Gruß

Pucki

Oh, was nu? Bist doch sonst nicht so weich gespült.
Immerhin habe ich nichts von "wie ein Forum funktioniert" geschrieben. Du scheinst zu fiebern. Anders ist das nicht zu erklären.

Alzheimer ist eine echt schlimme Krankheit.

Gruß

Pucki

Du hast irgendwie Fantasien.
Zum Glück weiss der TO bereits wie das geht, da muss ich also nix erklären.
Nimm etwas Baldrian und eine Auszeit.
Ich mache mir Sorgen um Deine Herzkranzgefäße.
(Du weisst doch - das wird nicht besser mit zunehmendem Alter)

Dann schreib doch eine Testfunktion mit nur einem String. (Die geht? aber nur wenn sie in Zeile 1 schreiben soll?) Dann mach einen kompletten, aber minimalen Sketch.

Oft verschwindet der Fehler (oder tritt erstmals auf) bei einer Änderung, wo du es nicht vermutet hättest. Kannst dann gern auch selbst die Lösung präsentieren :slight_smile:

1 Like