Problem med åäö på 1602 display med I2C


jag vill kunna skriva åäö på en 1602 display med i2c
jag gör en replace på åäö och ersätter dom med createchar, och det fungerar bra förutom att  jag  inte får bort det konstiga tecknet före åäö, se bild.
på displayens rad 1 visas hur det blir om jag skriver å ä ö
på displayens rad 2 visas hur det blir när jag har gjort en replace med egna tecken.
någon som har förslag på åtgärd?

/* 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 arduino ide
// lcd i2c library here:
// https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads
// move other lcd libraries folder or delete them
// see library "docs" folder possible commands etc.
#include <liquidcrystal_i2c.h>

/*-----( declare constants )-----*/
/*-----( declare objects )-----*/
// set lcd address 0x27 20 chars 4 line display
// set pins on i2c chip used lcd connections:
//                    addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
liquidcrystal_i2c lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, positive);  // set lcd i2c address



void setup()   /*----( setup: runs once )----*/

{
 
  serial.begin(9600);  // used type in characters

  lcd.begin(16,2);   // initialize lcd 16 chars 2 lines, turn on backlight

// ------- backlight  -------------
    {
    lcd.backlight();
  }
 

//-------- write characters on display ------------------

   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,
  };
 
  lcd.createchar(1, awithring);
  lcd.createchar(2, awithdots);
  lcd.createchar(3, owithdots);


// display. (set serial monitor option "no line ending")
  lcd.clear();
  lcd.setcursor(0,0);
  lcd.print("å ä ö");
 
  lcd.setcursor(0,1);
   
string message = "å ä ö";
message.replace('å', char(1));
message.replace('ä', byte(2));
message.replace('ö', byte(3));
lcd.print(message);

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


void loop()   /*----( loop: runs )----*/
{
 
}


jeg har inte själv en lcd så jag gissar lite - men jag har mycket erfaring med i18n problemtik andra sammenhäng.

problemt är att någon har bestämt @ talet 65 skal visas som och 66 som b osv.  det går fint med a-z och dom andra engeslka bogstavarna. men så är där både svenska, grækiska, cyrilliska hæbraiska bokstavar ... och der är bara 256 möjligheter en byte. så därför har din lcd valt et "character set". här tykte nogon @ kanji var vigtigere än äöå...  :(

unicode kan rymma miljonvis af tecken, frågan är om lcden har pixelmönstra för alla. troligen inte. unicode används internt din kodefil (java använder unicode) och äöå har så stort et talvärde @ det visas som två byte/tecken.

så dit forsök med ägna tecken vil funka om du
code: [select]
string message = "\01 \02 \03 ";och så behöver du inte göra replace()  det där med backstreckciffror er http://en.wikipedia.org/wiki/escape_character


Arduino Forum > International > Scandinavia > Problem med åäö på 1602 display med I2C


arduino

Comments

Popular posts from this blog

VIDIOC_S_FMT error 16, Device or resource busy - Raspberry Pi Forums

using a laptop skeleton to build a pi laptop - Raspberry Pi Forums

Forum for Joomla? - Joomla! Forum - community, help and support