Svenska tecken på LCD I2C display ( 2x16 ) - Arduino

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
arvidb
Inlägg: 4537
Blev medlem: 8 maj 2004, 12:56:24
Ort: Stockholm

Re: Svenska tecken på LCD I2C display ( 2x16 ) - Arduino

Inlägg av arvidb »

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)
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.

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();
}

Albireo
Inlägg: 73
Blev medlem: 30 november 2019, 00:29:39

Re: Svenska tecken på LCD I2C display ( 2x16 ) - Arduino

Inlägg av Albireo »

Intressant!
Gjorde nedastående förändringar, men kan inte se någon skillnad på LCD-skärmen.

Kod: Markera allt

char TextLCD[] = "å - Bra gjort!";

Kod: Markera allt

   void loop() {
      int strpos = 0;
      int lcdpos = 0;
        
      while (strpos < strlen(TextLCD)) {
        lcd.setCursor(lcdpos, 0);    // Pekare på .: Kolumn1 - Rad1
        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);
          if (TextLCD[strpos] == 0xb6) // ö
            lcd.print(3);
          if (TextLCD[strpos] == 0x85) // Å
            lcd.print(4);
          if (TextLCD[strpos] == 0x84) // Ä
            lcd.print(5);
          if (TextLCD[strpos] == 0x96) // Ö
              lcd.print(6);
        } else {
          lcd.print(TextLCD[strpos]);
        }
       
        strpos += 1;
        delay(500);
      }

      delay(1000);
      lcd.clear();
    }
_____________________________________________________________

Forsatte med mina försök med "replace" (känns enklare)
Detta exempel fungerar skriver ut önskad text direkt på skärmen, men när jag ska skriva ut tecken för tecken - fungerar det inte.

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);



/*----( SETUP: RUNS ONCE )----*/
void setup() { 
  Serial.begin(115200);  // Used to type in characters
  lcd.init();
  lcd.backlight();

//-------- 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);  //Ö

  String message = "åäö - ÅÄÖ - öäå";
  message.replace("å", "\1");
  message.replace("ä", "\2");
  message.replace("ö", "\3");
  message.replace("Å", "\4");
  message.replace("Ä", "\5");
  message.replace("Ö", "\6");
  
  lcd.setCursor(0, 1);
  lcd.print(message);
} /*--(end setup )---*/


void loop() {   /*----( LOOP: RUNS CONSTANTLY )----*/
}
Albireo
Inlägg: 73
Blev medlem: 30 november 2019, 00:29:39

Re: Svenska tecken på LCD I2C display ( 2x16 ) - Arduino

Inlägg av Albireo »

Tyckte att detta var lite svårt....
Gjorde ett nytt försök att skriva ut tecken för tecken på LCD I2C (16x2) display,
men även detta gav felmeddelanden.
I förra exemplet kunde alla åäö skrivas ut, utan problem.
Men i detta exempel försöker jag att konvertera en sträng till bokstäver med message.toCharArray(TextLCD, 30);.

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);



/*----( SETUP: RUNS ONCE )----*/
void setup() { 
  Serial.begin(115200);  // Used to type in characters
  lcd.init();
  lcd.backlight();

  char TextLCD[] = "";
  String message = "";
//-------- 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 = "åäö - ÅÄÖ - öäå";
  message.replace("å", "\1");
  message.replace("ä", "\2");
  message.replace("ö", "\3");
  message.replace("Å", "\4");
  message.replace("Ä", "\5");
  message.replace("Ö", "\6");

  message.toCharArray(TextLCD, 30);

} /*--(end setup )---*/


void loop() {   /*----( LOOP: RUNS CONSTANTLY )----*/
  int pos = 0;

  while (pos < strlen(TextLCD)) {
    lcd.setCursor(pos, 0);    // pos & col
    lcd.print(TextLCD[pos]);

    pos += 1;  // Nästa tecken
    
    delay(1000)
  }
Felmeddelandet som skapas är .: 'TextLCD' was not declared in this scope
Ett meddelande som jag inte förstår...
Användarvisningsbild
arvidb
Inlägg: 4537
Blev medlem: 8 maj 2004, 12:56:24
Ort: Stockholm

Re: Svenska tecken på LCD I2C display ( 2x16 ) - Arduino

Inlägg av arvidb »

Du deklarerar TextLCD inom setup()-funktionens måsvingar (i den funktionens stack), men försöker använda den utanför, i loop(), där den stacken inte existerar (d.v.s. där variabeln TextLCD är "out of scope").

Sen har du ett allvarligt fel till: du allokerar bara en enda byte i din TextLCD-array: tillräckligt för att rymma avslutande null i din tomma sträng. Ska du fylla i fler tecken senare så måste du allokera tillräckligt med plats för dem: char TextLCD[17] = ""; (rymmer 16 tecken + avslutande null).

Flytta ut deklarationen av TextLCD utanför (ovanför) setup()-funktionen så bör det funka.

PS. Ange alltid hela felmeddelandet, inklusive radnumret som kompilatorn anger.
Användarvisningsbild
sommarlov
Inlägg: 531
Blev medlem: 28 november 2015, 19:03:40
Ort: 08

Re: Svenska tecken på LCD I2C display ( 2x16 ) - Arduino

Inlägg av sommarlov »

Se till att din .ino/.pde fil inte sparas i ANSI utan i UTF8 format.

Edit: efter lite funderingar tror jag nog du redan har UTF8 format, så ignorera denna posten.
Albireo
Inlägg: 73
Blev medlem: 30 november 2019, 00:29:39

Re: Svenska tecken på LCD I2C display ( 2x16 ) - Arduino [Lö

Inlägg av Albireo »

Underbart!! :bravo: :bravo:
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...
Användarvisningsbild
Icecap
Inlägg: 26139
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Re: Svenska tecken på LCD I2C display ( 2x16 ) - Arduino

Inlägg av Icecap »

Om du kör C är rätt sätt:
if (TextLCD[pos] != ' ') {
delay(500);}
eller:
if (TextLCD[pos] != ' ') delay(500);

Ditt sätt består av två delar:
if (TextLCD[pos] <> " "); // Gör inget alls och ger nog inte fel av den anledning
delay(500); // Fördröjer
Så du jämför (på fel sätt, inte "<>" men "!=") - men gör inget med den jämförelse då du avslutar if() med ; innan delay(); kommer.
Sedan jämför du med sträng (" ") som rent byte-mäsigt innehåller 0x20, 0x00, alltså ett mellanslag och ett END_OF_STRING-tecken.

Är det ETT ENDA bokstav ska det omslutas av ', är det en STRÄNG ska den omslutas av " och det blir per automatik lagt in radslut i ändan. Alltså kommer en STRÄNG som anges till " " att ta 2 bytes minne, själva strängen plus den avslutande 0x00 som läggs till av kompilern.

Jämförsel i C sker INTE med <> (det är en BASIC-kommando) men med != (NOT EQUAL)
Användarvisningsbild
arvidb
Inlägg: 4537
Blev medlem: 8 maj 2004, 12:56:24
Ort: Stockholm

Re: Svenska tecken på LCD I2C display ( 2x16 ) - Arduino

Inlägg av arvidb »

Det kan väl vara bra att tillägga också att det överhuvudaget inte går att jämföra char-arrayer med varandra direkt i C; man måste använda någon funktion, t.ex. strncmp(). Anledningen är att "värdet" av ett stränguttryck i C är minnesadressen som strängen lagras på (adressen till första tecknet), och alltså inte har något alls med själva stränginnehållet att göra. Uttryck omgivna av citattecken tolkas som strängar av C, oavsett strängens längd.

Ett tecken mellan apostrofer tolkas istället som tecknets ASCII-värde och det går därför att jämföra enstaka ASCII-tecken rakt av.
Albireo
Inlägg: 73
Blev medlem: 30 november 2019, 00:29:39

Re: Svenska tecken på LCD I2C display ( 2x16 ) - Arduino

Inlägg av Albireo »

Tack!

Kod: Markera allt

    if (TextLCD[pos] != ' ')
      delay(500);
Verkar fungera (som önskat)!

Förstod tyvärr inte hur jag skulle använda strncmp()
char strncmp() eller char strncmp()=' ' eller ...
janno
Inlägg: 403
Blev medlem: 11 oktober 2009, 07:34:45
Ort: Västerås

Re: Svenska tecken på LCD I2C display ( 2x16 ) - Arduino

Inlägg av janno »

Jag är ingen Arduino expoert, men såg ett exempel där man använder String istället för char arrayer.
Kanske blir det lättare att göra all texthantering med den. Jag antar att det är samma String som finns i vanlig C++.
Googla lite på C++ och String, String har ju ett antal texthanteringsfunktioner för att göra stränghanteringen enklare.
Dock hjälper det inte mot UTF-8 problemet. Jag hade nog ändrat i editorn till nån icke UTF-8 kodning så man endast får åäöÅÄÖ som man skriver i kodfilen inom en byte. t.ex. ISO-8859-15 https://en.wikipedia.org/wiki/ISO/IEC_8859-15 nu går det kanske inte att ändra kodning i Arduino editorn utan man får skriva den texten i en annan editor (ex. Notepad++) och spara i den kodningen man vill ha.

Kod: Markera allt

// Read the first line of HTTP request
    String req = client.readStringUntil('\r');

    // First line of HTTP request looks like "GET /path HTTP/1.1"
    // Retrieve the "/path" part by finding the spaces
    int addr_start = req.indexOf(' ');
    int addr_end = req.indexOf(' ', addr_start + 1);
    if (addr_start == -1 || addr_end == -1) {
        Serial.print("Invalid request: ");
        Serial.println(req);
        return;
    }
    req = req.substring(addr_start + 1, addr_end);
    Serial.print("Request: ");
    Serial.println(req);

    String s;
    if (req == "/")
    {
        IPAddress ip = WiFi.localIP();
        String ipStr = String(ip[0]) + '.' + String(ip[1]) + '.' + String(ip[2]) + '.' + String(ip[3]);
        s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>Hello from ESP32 at ";
        s += ipStr;
        s += "</html>\r\n\r\n";
        Serial.println("Sending 200");
    }
    else
    {
        s = "HTTP/1.1 404 Not Found\r\n\r\n";
        Serial.println("Sending 404");
    }
    client.print(s);

BJ
Inlägg: 8224
Blev medlem: 11 april 2007, 08:14:53
Ort: En_stad

Re: Svenska tecken på LCD I2C display ( 2x16 ) - Arduino

Inlägg av BJ »

Och sen kommer någon längre fram och
sparar filen i utf-8, och förstår inte varför
det inte fungerar längre... :humm:
Nej, nu ska jag inte vara sådan. :)
janno
Inlägg: 403
Blev medlem: 11 oktober 2009, 07:34:45
Ort: Västerås

Re: Svenska tecken på LCD I2C display ( 2x16 ) - Arduino

Inlägg av janno »

Jo jag vet... Har hänt en gång för mycket, men för embedded så kör jag alltid 8-bitars teckenkodning. Det är för mycket kringsaker som inte tycker om UTF-8. Man lär sig snabbt vart felet kommer ifrån.
Albireo
Inlägg: 73
Blev medlem: 30 november 2019, 00:29:39

Re: Svenska tecken på LCD I2C display ( 2x16 ) - Arduino

Inlägg av Albireo »

Tack!
Vet inte vad en stränghantering skulle kunna tillföra (istället för tecken hanteing)

Har inte lyckats använda annan editor än Arduinos egen, vid programmering.
(vet inte om Arduinon går att programmera på annat sätt)
Direkt programmet har öppnas med t.ex. Notepad++ går den inte längre att öppna med Arduinos editor. (okänd anledning)
Notepad++ tolkar alltid Arduinos filer till .:
- Format .: UTF-8
- Språk .: C++
Tydligen (som sagt) finns det displayer med olika ROM - en asiatisk och en europeisk.
Men har inte funnit vilka ASCII-tabeller som gäller för respektive display. (här är en länk till en av dessa 2x16 - LCD 1602)
På vissa displayer ska även alla tecken-"positioner" vara programerbara.
janno
Inlägg: 403
Blev medlem: 11 oktober 2009, 07:34:45
Ort: Västerås

Re: Svenska tecken på LCD I2C display ( 2x16 ) - Arduino

Inlägg av janno »

Jag var tvungen att testa Arduinos editor och annan teckenkodning, och det gick alldeles utmärkt att öppna den där igen.
Du kan konvertera filen till ANSI och spara den igen (över den gamla filen) så har du samma text i annan kodning. Sedan var det bara att spara och öppna projektet i Ardunios editor.
Dock så visar inte Arduinos editor åäö utan det blir tre fyrkanter.
Men Notepad++ är ju troligen en mer kompetent editor för att skriva kod i så där kan man ju enkelt fortsätta redigeringen.
Eller så väljer man t.ex. VSCode som kan bygga o programmera Arduinon också (med rätt tillägg).
Stränghanteringen kan ju lösa ditt initiala bekymer där du jämförde en char=="ä" som borde fungera med UTF-8.
Istället för att du har texten i char array så skapar du strängen direkt och vill du ha arrayen använder du metoden c_str().
Albireo
Inlägg: 73
Blev medlem: 30 november 2019, 00:29:39

Re: Svenska tecken på LCD I2C display ( 2x16 ) - Arduino

Inlägg av Albireo »

Intressant!
Saknar jag något till Notepad++?
Öppnade en INO-fil med Notepad++ (skapad med Arduino editorn)
Vid det ena testet, sparade jag programmet - utan att göra något. (bara med nytt namn)
Vid andra testet sparades programmet i ANSI-format (med nytt namn)

I båda testen skapas följande information när programmet skulle öppnas med Arduino editorn .:
Problem.jpg
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Har inga problem att visa "åäö" i Arduino editorn (däremot att spara filnamn med åäö)
Har funderat lite på VS eller VSCode (men förstår inte riktigt skillnaden). VSCode är väl en lite mer sofistikerad editor?

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

I mitt program ovan, använde jag ingen "if-sats" för att byta tecken.
1) Första problemet var att skapa LCD-tecken för åäöÅÄÖ (eftersom de flesta saknas i displayen)

Kod: Markera allt

byte AwithRing[8] = {  //å
  B00100,
  B01010,
  B01110,
  B00001,
  B01111,
  B10001,
  B01111,
};
...
lcd.createChar(1, AwithRing);     // å
2) Sedan byta ut ex. åäö-tecknen i strängen mot ett skapat tecken i displayen

Kod: Markera allt

  message = "åäö - ÅÄÖ - öäå";
  message.replace("å", "\1");
.....
3) Sista delen var att få texten att flyta bättre på LCD-skärmen.
Om fördröjning endast sker tillsammans med bokstäver (inte tillsammans med blanksteg) flyter texten bättre när den ska läsas.
Detta löstes med (det om diskuterade sättet) .:

Kod: Markera allt

    if (TextLCD[pos] != ' ')
      delay(500);
    pos += 1;  // Nästa tecken
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Skriv svar