Feladat: A TinkerCAD szimulációs környezetben készíteni egy programot, mely LCD kijelzőn megjeleníti a hőmérsékletet.

Még egy kis segítség az összeállításához:
A kód:
#include
#include
LiquidCrystal_I2C lcd(32,16,2);
float temp = 0;
float homerseklet = 0;
void setup()
{
lcd.begin(16,2);
lcd.init();
lcd.backlight();
pinMode(A0, INPUT);
Serial.begin(9600);
}
void loop()
{
temp = analogRead(A0);
homerseklet = map(temp, 20, 358, -40, 125);
Serial.println('Homerseklet' + homerseklet);
delay(1000);
lcd.setCursor(0,0);
lcd_print_hu('Homerseklet');
lcd.setCursor(0,1);
lcd.print(homerseklet);
lcd.setCursor(5,1);
lcd_print_hu(" Celsius");
}
Ha azt szeretnénk, hogy ékezetes magyar karaktereket is meg tudjunk jeleníteni az LCD kijelzőn, akkor – mivel ezeket nem tartalmazza a LiquidCrystal library – magunknak kell elkészíteni egy függvényt, amely kicseréli a azokat az általunk megírt karakterekre. Pl. így:
// C++ code
//
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(32,16,2);
float temp = 0;
float homerseklet = 0;
String aaa = "Hőmérséklet: ";
void setup()
{
lcd.begin(16,2);
lcd.init();
lcd.backlight();
pinMode(A0, INPUT);
Serial.begin(9600);
lcd_print_hu(""); //üres stringgel hívtam meg a függvényt, ez jelenti, hogy töltse fel a magyar karakterképeket
//lcd.setCursor(0,0);lcd_print_hu("Nagy:ÁÉÍÓÖŐÚÜŰ"); //összes nagy ékezetes betű írása (mind kicsiként fog megjelenni)
//lcd.setCursor(0,1);lcd_print_hu("Kicsi:áéíóöőúüű"); //összes kis ékezetes betű írása
}
void loop()
{
temp = analogRead(A0);
homerseklet = map(temp, 20, 358, -40, 125);
Serial.println(aaa + homerseklet);
delay(1000);
lcd.setCursor(0,0);
lcd_print_hu(aaa);
lcd.setCursor(0,1);
lcd.print(homerseklet);
lcd.setCursor(5,1);
lcd_print_hu(" Celsius");
}
void lcd_print_hu(String szoveg) {
String kiir="";
byte karakter;
byte j=0;
byte hossz=szoveg.length(); //az átvett string hossza
if (hossz==0) { //üres karakterrel hívtuk meg a függvényt, ez azt jelenti, hogy feltöltjük a kijelzőt a magyar kerekterek képével
byte tt[8] = {B10,B100,B1110,B1,B1111,B10001,B1111}; //á betű karakterképe
lcd.createChar(0,tt);
tt[0]=B10;tt[1]=B100;tt[2]=B1110;tt[3]=B10001;tt[4]=B11111;tt[5]=B10000;tt[6]=B1110; //é betű karakterképe
lcd.createChar(1,tt);
tt[0]=B10;tt[1]=B100;tt[2]=B0;tt[3]=B1110;tt[4]=B100;tt[5]=B100;tt[6]=B1110; //í betű karekterképe
lcd.createChar(2,tt);
tt[0]=B10;tt[1]=B100;tt[2]=B0;tt[3]=B1110;tt[4]=B10001;tt[5]=B10001;tt[6]=B1110; //ó betű karakterképe
lcd.createChar(3,tt);
tt[0]=B00101;tt[1]=B01010;tt[2]=B0;tt[3]=B1110;tt[4]=B10001;tt[5]=B10001;tt[6]=B1110; //ő betű karakterképe
lcd.createChar(4,tt);
tt[0]=B10;tt[1]=B100;tt[2]=B10001;tt[3]=B10001;tt[4]=B10001;tt[5]=B10011;tt[6]=B1101; //ú betű karakterképe
lcd.createChar(5,tt);
tt[0]=B00101;tt[1]=B01010;tt[2]=B0;tt[3]=B10001;tt[4]=B10001;tt[5]=B10011;tt[6]=B1101; //ű betű karakterképe
lcd.createChar(6,tt);
return;
}
for (byte i=0;i<hossz;i++) { //minden karakteren sorban végig megyünk
if ((byte) szoveg[i]==195 or (byte) szoveg[i]==197) //ha a kerekter 195 vagy 197, akkor azt kihagyjuk az eredmény stringből és vesszük a következő karaktert
{
i++;
karakter=(byte) szoveg[i];
kiir.concat(" "); //ez a hiányos C++ tudásom miatt van, mivel nem tudtam hozzáfűzni a 0-7 ASCII kódot, ezért hozzáfüzük egy szóközt,
//amit a switch-ben lecserélek a megfelelő feltöltött karakter kódjára, illetve a karakterkészletben meglévő
//ö és ü betű kódjára
switch (karakter) {
case 129: kiir.setCharAt(j,0);break; //Á //a j. pozicióban (utolsó hozzáfűzött karaktert cserélem a feltöltött karakter kódjára
case 161: kiir.setCharAt(j,0);break; //á
case 137: kiir.setCharAt(j,1);break; //É
case 169: kiir.setCharAt(j,1);break; //é
case 141: kiir.setCharAt(j,2);break; //Í
case 173: kiir.setCharAt(j,2);break; //í
case 147: kiir.setCharAt(j,3);break; //Ó
case 179: kiir.setCharAt(j,3);break; //ó
case 150: kiir.setCharAt(j,239);break; //Ö
case 182: kiir.setCharAt(j,239);break; //ö
case 144: kiir.setCharAt(j,4);break; //Ő
case 145: kiir.setCharAt(j,4);break; //ő
case 154: kiir.setCharAt(j,5);break; //Ú
case 186: kiir.setCharAt(j,5);break; //ú
case 156: kiir.setCharAt(j,245);break; //Ü
case 188: kiir.setCharAt(j,245);break; //ü
case 176: kiir.setCharAt(j,6);break; //Ű
case 177: kiir.setCharAt(j,6);break; //ű
}
}
else {kiir.concat(szoveg[i]);} //ez egy kijelzőn is megtalálható karakter, simán csak másoljuk
j++; //egy karakterrel több van a kijelzőre irantó stringben
}
lcd.print(kiir); //..és akkor kiírjuk a kijelzőre az ékezetes kódokra cserélt szöveget
}
