Underbart!!
Tack till alla som engagerat sig...
Jag har inte förstått skillnaden mellan "innanför" / "utanför" void setup()
Är void setup() en "vanlig" funktion som endast utförs en gång?
(Kunde setup() ha namngetts med vad som helst? eller måste den heta setup() )
Om jag förstått rätt finns nu åäöÅÄÖ i det icke flyktiga minnet CGROM och kommer att finnas kvar till något annat skrivs i dessa celler. (och behöver inte skapas igen - kan vara viktigt med Arduino UNO:s begränsade minne.)
Har ingen aning om Arduino editorn sparar sina filer i UTF-8 eller...
Har förstått att det finns LCD-displayer med olika ROM. Finns med Asiatisk eller Europeisk ASCII tabell.
Kanske är mitt CGROM Asiatiskt, även om LCD-displayen köptes från Tyskland.
Har inte heller testat om alla adresser i LCD-displayen går att förändra.
(inte bara de 8 adresser som är dedikerade till egna tecken)
Måste först kunna hantera displayen - t.ex. spara nuvarande ASCII-tabell...
Slutresultatet för hantering av åäö resulterade till följande kod
.:
Kod: Markera allt
/*-----( Import needed libraries )-----*/
#include <Wire.h> // Comes with Arduino IDE
#include <LiquidCrystal_I2C.h>
/* -----( Declare Constants )----- */
byte AwithRing[8] = { //å
B00100,
B01010,
B01110,
B00001,
B01111,
B10001,
B01111,
};
byte AwithDots[8] = { //ä
B01010,
B00000,
B01110,
B00001,
B01111,
B10001,
B01111,
};
byte OwithDots[8] = { //ö
B01010,
B00000,
B01110,
B10001,
B10001,
B10001,
B01110,
};
byte BigAwithRing[8] = { //Å
0b00100,
0b01010,
0b01110,
0b10001,
0b11111,
0b10001,
0b10001,
0b00000
};
byte BigAwithDots[8] = { //Ä
0b01010,
0b00000,
0b01110,
0b10001,
0b11111,
0b10001,
0b10001,
0b00000
};
byte BigOwithDots[8] = { //Ö
0b01010,
0b01110,
0b10001,
0b10001,
0b10001,
0b10001,
0b01110,
0b00000
};
/*
byte Minus[8] = {
0b00000,
0b00000,
0b00000,
0b00000,
0b11111,
0b00000,
0b00000,
0b00000
};
*/
/* -----( Declare objects )----- */
// set the LCD address to 0x27 for a 16 chars 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);
// String message = "åäö - ÅÄÖ - öäå";
String message = "å -What I want!";
char TextLCD[30] = "";
/*----( SETUP: RUNS ONCE )----*/
void setup() {
Serial.begin(115200); // Used to type in characters
lcd.init();
//-------- Write characters on the display ------------------
lcd.createChar(1, AwithRing); //å
lcd.createChar(2, AwithDots); //ä
lcd.createChar(3, OwithDots); //ö
lcd.createChar(4, BigAwithRing); //Å
lcd.createChar(5, BigAwithDots); //Ä
lcd.createChar(6, BigOwithDots); //Ö
message.replace("å", "\1");
message.replace("ä", "\2");
message.replace("ö", "\3");
message.replace("Å", "\4");
message.replace("Ä", "\5");
message.replace("Ö", "\6");
message.toCharArray(TextLCD, 30);
lcd.backlight();
} /*--(end setup )---*/
void loop() { /*----( LOOP: RUNS CONSTANTLY )----*/
int pos = 0;
while (pos < strlen(TextLCD)) {
lcd.setCursor(pos, 0); // pos & col
lcd.print(TextLCD[pos]);
delay(500);
pos += 1; // Nästa tecken
}
delay (1000);
lcd.clear();
delay (1000);
En annan finess jag misslyckades med, var att påverka fördröjningen mellan varje tecken.
Om tecknet INTE är ett blanksteg = fördröjning på 0,5s, annars ingen fördröjning.
t.ex.
if (TextLCD[pos] <> " "); delay(500);
Men det kan bli en senare fråga...