In C würde es heißen : If cText(i) == "ä" Then
= ist ein Zuweisungsoperator
== ein Vergleichsoperator
Abend zusammen,
ich würde gerne auf meinem KS0066-LCD Umlaute ausgeben. Die in der internen Zeichentabelle des LCD abgelegten Zeichen ä, ö, ü lassen sich problemlos anzeigen, indem ich die Codes 238, 239 und 245 übertrage.
Nun will ich, dass die Umlaute automatisch korrekt angezeigt werden, wenn ich einen String ausgebe, der ein oder mehrere dieser Umlaute enthält.
Bevor ich also ein Char-Array an das Display übermittle, möchte ich jedes Zeichen auf einen Umlaut prüfen und ggf. durch den entsprechenden internen LCD-Code ersetzen.
Eigentlich müsste es doch folgendermaßen funktionieren:
Der Compiler schmeißt aber immer diesen Fehler:Code:Sub LCD_WriteText_I2C(ByRef cText As Char) Dim i As Integer i = 0 'Übergebenes Char-Array ausgeben. Do While cText(i) > 0 If cText(i) = "ä" Then LCD_Write_I2C(1, 238) Else LCD_Write_I2C(1, cText(i)) End If i = i + 1 End While End Sub
Semantik Fehler - Operator '=' für Typ overflow nicht erlaubt
Was mache ich falsch?
Danke Euch.
Gruß
In C würde es heißen : If cText(i) == "ä" Then
= ist ein Zuweisungsoperator
== ein Vergleichsoperator
In Bascom dürfte das mit 1 = schon stimmen.
Kannst du mal das komplette Programm zeigen, so dass man's auch mal kompilieren kann?
#ifndef MfG
#define MfG
cText mal als Char, mal als Array ... char? noch nie gesehn bei bascom, man lernt nie aus.
ByRef?
cText(i) = "ä" ... Bytewert oder was?
Vor den Erfolg haben die Götter den Schweiß gesetzt
Oh, Entschuldigung, sind hier in C-Basic, das Programm läuft auf ner C-Control PRO per I2C über einen PCF8574.
Hier etwas mehr Code:
Code:Sub main() I2C_Init(I2C_100kHz) LCD_Init_I2C(abInitOptions) LCD_Clear_I2C() LCD_Locate_I2C(2, 1) LCD_WriteText_I2C("Hälli hällo!") End Sub Sub LCD_WriteText_I2C(ByRef cText As Char) Dim i As Integer i = 0 'Übergebenes Char-Array ausgeben. Do While cText(i) > 0 If cText(i) = "ä" Then LCD_Write_I2C(1, 238) Else LCD_Write_I2C(1, cText(i)) End If i = i + 1 End While End Sub Sub LCD_Write_I2C(bIsData As Byte, bData As Byte) Dim bDataOut As Byte 'RS high setzen falls Datenausgabe gewünscht (bRS = 1). If bIsData > 0 Then : bIsData = LCD_RS : End If '*** High Nibble *** bDataOut = bIsData Or (bData >> 4) I2C_Out(bDataOut, 1) '*** Low Nibble *** bDataOut = bIsData Or (bData And 0x0F) I2C_Out(bDataOut, 1) End Sub Sub I2C_Out(bData As Byte, bPulseE As Byte) If bPulseE > 0 Then I2C_Start() I2C_Write(I2C_PCF_ADDR) I2C_Write(bData Or LCD_EN) I2C_Stop() AbsDelay(1) End If I2C_Start() I2C_Write(I2C_PCF_ADDR) I2C_Write(bData) I2C_Stop() End Sub
Oha, hier ist wohl durch die Forumsumstellung ein Beitrag verloren gegangen.
Also mit Verwendung des ASCII-Codes statt "ä" funktioniert es. Hätte ich auch drauf kommen können und ist ja nun eigentlich auch logisch.
Danke an den Verfasser des abhanden gekommenen Beitrags!
Stimmt, mein Beitrag scheint weg zu sein. Auch vermisse ich einen anderen Beitrag von mir in einem anderen Thread...
Wenn das Herz involviert ist, steht die Logik außen vor! \/
Lesezeichen