Du bör nog använda char TextLCD[] = "å - Bra gjort!"; (alltså tomt mellan [ och ]) för att inte riskera overflow, särkilt när du använder multi-byte-characters som å, ä, ö o.s.v. Det löser dock inte det aktuella problemet.Albireo skrev:Är det raden .: char TextLCD[16] = "å - Bra gjort!"; som ska hanteras på annat sätt?
ex. String TextLCD = "å - Bra gjort!"; (ingen aning vad som skiljer)
Grundproblemet är att 'å' tar upp två "platser" i strängen. Det gör att det inte är möjligt att göra en enkel replace av å/ä/ö o.s.v. med ett "vanligt" tecken - det blir ju en plats över i strängen om man gör det!
å, ä, ö, Å, Ä, Ö lagras var och en med två bytes (se t.ex. denna teckentabell):
å: c3 a5
ä: c3 a4
ö: c3 b6
Å: c3 85
Ä: c3 84
Ö: c3 96
Eftersom alla dessa börjar med 0xc3 så är det enkelt att detektera dessa specialtecken i strängen och behandla dem skiljt från övriga. Nåt sånt här borde funka (obs otestad kod):
Kod: Markera allt
/*
å c3 a5
ä c3 a4
ö c3 b6
Å c3 85
Ä c3 84
Ö c3 96
*/
void loop()
{
int strpos = 0;
int lcdpos = 0;
while (strpos < strlen(TextLCD)) {
lcd.setCursor(lcdpos, 0);
lcdpos += 1;
// Check for UTF char
if (TextLCD[strpos] == 0xc3) {
strpos += 1;
if (TextLCD[strpos] == 0xa5) // å
lcd.print(1);
if (TextLCD[strpos] == 0xa4) // ä
lcd.print(2);
// etc...
} else {
lcd.print(TextLCD[strpos]);
}
strpos += 1;
delay(500);
}
delay(1000);
lcd.clear();
}
