Go Down

Topic: I2C LCD 2x16 - Svenska tecken - hur? (Read 11718 times) previous topic - next topic

Albireo1

Hej!
Har just börjat fördjupa mig i Arduino och köpte en LCD-display. (I2C)
Men vad är bästa / enklaste sättet att få svenska tecken?
UTF-8? eller ....
(Har jag köpt fel display från Tyskland (Kina)?)

Albireo1

Har lyckats (med hjälp av några länkar) skapa åäöÅÄÖ på LCD I2C Displayen på följande sätt .:
Code: [Select]
/*
https://forum.arduino.cc/index.php?topic=224615.0
YourDuino.com Example Software Sketch
16 character 2 line I2C Display
Backpack Interface labelled "YwRobot Arduino LCM1602 IIC V1"
terry@yourduino.com */

/*-----( Import needed libraries )-----*/
#include <Wire.h>  // Comes with Arduino IDE
#include <LiquidCrystal_I2C.h>

/* -----( Declare Constants )----- */

/* -----( Declare objects )-----   */
// set the LCD address to 0x27 for a 16 chars 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);


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
};
*/

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


// Display. (Set Serial Monitor option to "No Line Ending")
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("å ä ö Å Ä Ö");

/*
String message = "å ä ö";
message.replace('å', char(1));
message.replace('ä', byte(2));
message.replace('ö', byte(3));
*/
  lcd.setCursor(0,1);
  String message = "\01 \02 \03 \04 \05 \06 ";
  lcd.print(message);
} /*--(end setup )---*/


void loop() {   /*----( LOOP: RUNS CONSTANTLY )----*/
}


Resultatet är positivt! Men är väldigt opraktiskt om text som ska visas på LCD-skärmen finns som textformat i en fil, eller lagras i en variabel i läsbart format.
Att skriva Såja skulle bli på följande sätt .:
Code: [Select]
String message = "S\01ja";
  lcd.print(message);


Då behövs en konvertering. Finns det redan?

Albireo1

Tillslut lyckades jag få ihop ett program som kan visa åäö på displayen enligt mitt önskemål .:
Code: [Select]
/*-----( 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);
}

namdev

Pythonpool is a platform where not only you can read amazing Python blogs but you can write one too.
It's an opportunity for everyone who wants to read or write interesting facts/information about python.

<a href="https://www.pythonpool.com/">Python Pool</a>
<a href="https://www.pythonpool.com/python-null/">Python Null</a>

Go Up