Hantering av t.ex. åäö på en LCD-display (2x16 - I2C)

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Albireo
Inlägg: 73
Blev medlem: 30 november 2019, 00:29:39

Hantering av t.ex. åäö på en LCD-display (2x16 - I2C)

Inlägg av Albireo »

Hej!
Försöker hantera de svenska bokstäverna tillsammans med en I2C - LCD-display (2x16).
En lösning med åäö (andra förutsättningar) finns i denna länk .: Svenska tecken på LCD I2C display ( 2x16 ) - Arduino (om det kan vara till någon hjälp?)

När programmet nedan körs på en Arduino UNO, och text skrivs in i serie editorn,
skickas texten tillbaka till serie editorn och även till LCD-displayen.
Detta fungerar som önskat - Ända till text med åäö skickas.

Hur kan dessa tecken (två byte?) hanteras?

Kod: Markera allt

/* Idé hämtad från https://forum.arduino.cc/index.php?topic=396450.0
 * 
 * Displays text sent over the serial port (e.g. from the Serial Monitor) on
 * an attached LCD.
 */
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>


/* -----( Save åäöÅÄÖ on the LED-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,
};

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 Constants )----- */
#define I2C_ADDR 0x27 // Adress till LCD-display

int pos = 0;
int strpos = 0;
char receivedChar;
boolean newData = false;

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



void setup() {
  lcd.init();       // initialize the lcd

  //-------- 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);  //Ö
  
  lcd.backlight();      // turn on backlight.
  
  Serial.begin(9600);
  while (!Serial) {}    // wait for serial port to connect. Needed for native USB
  Serial.println("<Arduino is ready>");
}

 // when characters arrive over the serial port...

void loop() {
    recvOneChar();
    showNewData();
}

void recvOneChar() {
    if (Serial.available() > 0) {
        receivedChar = Serial.read();
        newData = true;
        // pos = pos + 1;
        pos += 1;  // Nästa tecken
    }
}

void showNewData() {
    if (newData == true) {
        Serial.print("This just in ... ");
        // receivedChar.replace("å", "\1");
        Serial.print(receivedChar);
        Serial.print(" pos .: ");
        Serial.println(pos);
        lcd.setCursor(pos,0);
        lcd.print(receivedChar);
        newData = false;
    }
}
bos
Inlägg: 2275
Blev medlem: 24 februari 2007, 23:29:15
Kontakt:

Re: Hantering av t.ex. åäö på en LCD-display (2x16 - I2C)

Inlägg av bos »

Det är 15 år sen jag petade på LCD, men senast så gällde det att det funkade bara med en font i taget. Du kan inte hacka om ett specifikt tecken utan att ändra hela fonten. Jag tror det är i den änden du får börja.

Alternativt leta upp ett LCD-lib som klarar att pixla en specifik bokstav.
BJ
Inlägg: 8240
Blev medlem: 11 april 2007, 08:14:53
Ort: En_stad

Re: Hantering av t.ex. åäö på en LCD-display (2x16 - I2C)

Inlägg av BJ »

Vad är det som händer när det inte fungerar då?

Kan du inte ta hand om tecknen på ungefär
samma sätt som du fick tips om i den andra tråden,
om det nu är utf-8.

Du får nog tala om lite mer. :humm:
bos
Inlägg: 2275
Blev medlem: 24 februari 2007, 23:29:15
Kontakt:

Re: Hantering av t.ex. åäö på en LCD-display (2x16 - I2C)

Inlägg av bos »

Som jag tolkar det är det hen vill göra i princip receivedChar.replace("å", AwithRing);.

Om inte så behöver vi mer utförlig information.
Skriv svar