Kiírás LCD kijelzőre
Kiírás LCD kijelzőre
Üdv Mindenkinek!
Azt szeretném megoldani, hogy az LCD-re kiírt 2 tizedes jegy pontosságú számnál a tizedes vessző mindig ugyan arra a helyre kerüljön. A szám álandóan válltozik, -150 és 150 között. A kiírást jelenleg így oldom meg:
lcd.setCursor(6, 1);
lcd.print(eredmeny,2);
Itt az a probléma, hogy a kiírás a 6. helyen a második oszlopban kezdődik. Ami így néz ki:
0,00
12,25
100,41
-125,99
én így szertném látni:
0,00
12,25
100,41
-125,99
Hogyan lehet ezt megoldani?
A javaslatokat előre is köszönöm
Azt szeretném megoldani, hogy az LCD-re kiírt 2 tizedes jegy pontosságú számnál a tizedes vessző mindig ugyan arra a helyre kerüljön. A szám álandóan válltozik, -150 és 150 között. A kiírást jelenleg így oldom meg:
lcd.setCursor(6, 1);
lcd.print(eredmeny,2);
Itt az a probléma, hogy a kiírás a 6. helyen a második oszlopban kezdődik. Ami így néz ki:
0,00
12,25
100,41
-125,99
én így szertném látni:
0,00
12,25
100,41
-125,99
Hogyan lehet ezt megoldani?
A javaslatokat előre is köszönöm
Re: Kiírás LCD kijelzőre
Ha rövid a szám (<10 és >=0, akkor tegyél elé 2 szóközt.)
Ha 2 karakteres a szám (10...99 illetve -1...-9), akkor elég 1 szóköz.
Így a pozíció is megvan ......
Ha 2 karakteres a szám (10...99 illetve -1...-9), akkor elég 1 szóköz.
Így a pozíció is megvan ......
Re: Kiírás LCD kijelzőre
Köszönöm a választ.
A programban ezt hogy tudom megoldani? Figyelnem kell az "eredmeny" értékét és annak megfelelően a szóközök számát válltoztani?
Vagy van egyszerübb megoldás is?
A programban ezt hogy tudom megoldani? Figyelnem kell az "eredmeny" értékét és annak megfelelően a szóközök számát válltoztani?
Vagy van egyszerübb megoldás is?
Re: Kiírás LCD kijelzőre
hully-haw!
itt egy Robert által talált példa, itt lcd-re dátmot-időt írnak ki.
a probléma hasonló: pl a 10-nél kevesebb kiírandó percnél 1-- ig pozicionált 01-09-et kell kiíratni. az OO:PP formátmhoz:
ez alapján megírhatod a decTab() függvényt, ami bemenetként egy számot vár, kimenetként egy "nnn.nn" formátmú stringet ad vissza, az előző nullák helyett szóközökkel
vagy "_ _ _ _ _ _ "(6db szóköz) stringhez hozzáadod a számod string alakját, majd veszed az eredmény utolsó 6 karakternyi substringjét és ezt iratod ki az lcd-n
(habár az arduino mostohán bánik a string műveletekkel, megírhatod a rightStr(string, db) függvényt, ami a string végéről vesz ki db számú karaktert egy string változóba, az elejét (ha kell) szóközökkel feltöltve
itt egy Robert által talált példa, itt lcd-re dátmot-időt írnak ki.
a probléma hasonló: pl a 10-nél kevesebb kiírandó percnél 1-- ig pozicionált 01-09-et kell kiíratni. az OO:PP formátmhoz:
Kód: Egész kijelölése
if(minutes < 10)
{
lcd.print("0");
}
lcd.print(itoa(minutes, buf, 10));
//- See more at: http://www.codingcolor.com/2010/06/01/an-arduino-lcd-clock-using-a-chronodot-rtc/#sthash.f4VcJU0D.dpufvagy "_ _ _ _ _ _ "(6db szóköz) stringhez hozzáadod a számod string alakját, majd veszed az eredmény utolsó 6 karakternyi substringjét és ezt iratod ki az lcd-n
(habár az arduino mostohán bánik a string műveletekkel, megírhatod a rightStr(string, db) függvényt, ami a string végéről vesz ki db számú karaktert egy string változóba, az elejét (ha kell) szóközökkel feltöltve
Re: Kiírás LCD kijelzőre
Helló,
Köszömön a segítséget. Mivel nagyon kezdő vagyok, lesz mivel szórakoznom, míg megoldom. De ez a hobby lényege
Köszömön a segítséget. Mivel nagyon kezdő vagyok, lesz mivel szórakoznom, míg megoldom. De ez a hobby lényege
Re: Kiírás LCD kijelzőre
Sziasztok,
Arduino-val szeretnék LCD-re (4x20) kiírni adatokat.
Minden sorban lenne 1 adat összesen 4 látszana egyszerre, de nekem van 6 adatom, amit folyamatosan föl-le tologatással kellene megjeleníteni.
Tehát az első sor eltűnne, a második lépne a helyére a második helyére a harmadik stb stb az utolsó sorba megjelenne az új adat, aztán visszagörgetés.
Scroll parancsot láttam, de az jobb-bal eltolást csinál, nekem meg fel-le kellene.
Mi a legegyszerűbb megoldás erre, ki hogyan csinálná.
köszönettel.
Arduino-val szeretnék LCD-re (4x20) kiírni adatokat.
Minden sorban lenne 1 adat összesen 4 látszana egyszerre, de nekem van 6 adatom, amit folyamatosan föl-le tologatással kellene megjeleníteni.
Tehát az első sor eltűnne, a második lépne a helyére a második helyére a harmadik stb stb az utolsó sorba megjelenne az új adat, aztán visszagörgetés.
Scroll parancsot láttam, de az jobb-bal eltolást csinál, nekem meg fel-le kellene.
Mi a legegyszerűbb megoldás erre, ki hogyan csinálná.
köszönettel.
Re: Kiírás LCD kijelzőre
Fel-le scroll nincs.
Neked kell leprogramoznod
Pl.
Neked kell leprogramoznod
Pl.
Kód: Egész kijelölése
kiiratás utáni rész:
locate 1,1
lcd.print(2.sor); space(20-lenght(2.sor)); //1. sor kiírása
lcd.print(4.sor); space(20-lenght(4.sor)); //3. sor kiírása
lcd.print(3.sor); space(20-lenght(2.sor)); //2. sor kiírása
lcd.print(5.sor); space(20-lenght(4.sor)); //4. sor kiírása
wait 10 sec
locate 1,1
lcd.print(3.sor); space(20-lenght(3.sor)); //1. sor kiírása
lcd.print(5.sor); space(20-lenght(5.sor)); //3. sor kiírása
lcd.print(4.sor); space(20-lenght(4.sor)); //2. sor kiírása
lcd.print(6.sor); space(20-lenght(6.sor)); //4. sor kiírása
Re: Kiírás LCD kijelzőre
Köszönöm,
Ki fogom próbálni.
Ki fogom próbálni.
Re: Kiírás LCD kijelzőre
Azt hittem értem, de kiderült mégsem.
Szóval a locate 1,1 talán az lcd.setCursor(1, 1);
de miért nem 0,0
1.2.3. stb sor gondolom a megjelenítendő adat/szöveg
a space –t azt gondoltam, hogy utasítás, de mégsem
tehát szeretnék igényelni egy kis segítséget, ha valaki tud rám szánni idő, persze csak a saját szintemen az az totál kezdő.
köszönöm
üdv.
Szóval a locate 1,1 talán az lcd.setCursor(1, 1);
de miért nem 0,0
1.2.3. stb sor gondolom a megjelenítendő adat/szöveg
a space –t azt gondoltam, hogy utasítás, de mégsem
tehát szeretnék igényelni egy kis segítséget, ha valaki tud rám szánni idő, persze csak a saját szintemen az az totál kezdő.
köszönöm
üdv.
Robert írta:Fel-le scroll nincs.
Neked kell leprogramoznod
Pl.Kód: Egész kijelölése
kiiratás utáni rész: locate 1,1 lcd.print(2.sor); space(20-lenght(2.sor)); //1. sor kiírása lcd.print(4.sor); space(20-lenght(4.sor)); //3. sor kiírása lcd.print(3.sor); space(20-lenght(2.sor)); //2. sor kiírása lcd.print(5.sor); space(20-lenght(4.sor)); //4. sor kiírása wait 10 sec locate 1,1 lcd.print(3.sor); space(20-lenght(3.sor)); //1. sor kiírása lcd.print(5.sor); space(20-lenght(5.sor)); //3. sor kiírása lcd.print(4.sor); space(20-lenght(4.sor)); //2. sor kiírása lcd.print(6.sor); space(20-lenght(6.sor)); //4. sor kiírása
Re: Kiírás LCD kijelzőre
A kiírásban itt a trükkök: nem villog a kijelző, mert folymatosan írod adattal.
Egyszerűbb változat:
Ezzel 2 sort gögettél felfele...
Egyszerűbb változat:
Kód: Egész kijelölése
képernyőtörlés
locate 1. sor eleje
1. sor kiír
locate 2. sor eleje
2. sor kiír
locate 3. sor eleje
3. sor kiír
locate 4. sor eleje
4. sor kiír
wait 5000msec
képernyőtörlés
locate 1. sor eleje
2. sor kiír
locate 2. sor eleje
3. sor kiír
locate 3. sor eleje
4. sor kiír
locate 4. sor eleje
5. sor kiír
wait 5000msec
képernyőtörlés
locate 1. sor eleje
3. sor kiír
locate 2. sor eleje
4. sor kiír
locate 3. sor eleje
5. sor kiír
locate 4. sor eleje
6. sor kiír-
Daszkalosz
- Újonc

- Hozzászólások: 10
- Csatlakozott: 2016. május 22. vasárnap, 20:26
Re: Kiírás LCD kijelzőre
Sziasztok!
Szenvedek egy kiíratással!
Egy relé állapotát szeretném kiíratni,már mindent kipróbáltam,de nem sikerül.
a "Vizmelegito" után szeretném kiíratni a relé állapotát ON/OFF
segítsetek egy kicsit!
Szenvedek egy kiíratással!
Egy relé állapotát szeretném kiíratni,már mindent kipróbáltam,de nem sikerül.
a "Vizmelegito" után szeretném kiíratni a relé állapotát ON/OFF
segítsetek egy kicsit!
Kód: Egész kijelölése
#include "DHT.h"
#define DHTPIN 2 // what pin we're connected to
#define DHTTYPE DHT22 // DHT 22 (AM2302)
#define Relay 4
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
byte e1[8] = {B10,B100,B1110,B10001,B11111,B10000,B1110}; // Ez az é betű
byte o1[8] = {B100,B100,B0,B1110,B10001,B10001,B1110}; // Ez a hosszú ó betű
byte o2[8] = {B1010,B0,B1110,B10001,B10001,B10001,B1110}; // Ez a rövid ö betű
byte o3[8] = {B1010,B1010,B0,B1110,B10001,B10001,B1110}; // Ez a hosszú ő betű
byte a1[8] = {B10,B100,B1110,B1,B1111,B10001,B1111}; // Ez az á betű
byte u2[8] = {B1010,B0,B0,B10001,B10001,B10011,B1101}; // Ez a rövid ü betű
byte u3[8] = {B1010,B1010,B0,B10001,B10001,B10011,B1101}; // Ez a hosszú ű betű
byte i1[8] = {B10,B100,B0,B1110,B100,B100,B1110}; // Ez a hosszú í betű
int maxHum = 80;
int maxTemp = 33;
DHT dht(DHTPIN, DHTTYPE);
void setup() {
pinMode(Relay, OUTPUT);
Serial.begin(9600);
Wire.begin();
dht.begin();
lcd.begin(20, 4);
lcd.backlight();
{
lcd.setCursor(2, 0);
lcd.print("Kelteto vezerles");
lcd.setCursor(8, 0);
lcd.write(4);
lcd.setCursor(13, 0);
lcd.write(1);
lcd.setCursor(16, 0);
lcd.write(1);
lcd.setCursor(3, 1);
lcd.print(" By:Daszkalosz ");
lcd.setCursor(4, 2);
lcd.println(" 2016.07.26 ");
delay(3000);
lcd.clear();
}
lcd.createChar(1, e1); // Ez az é betű
lcd.createChar(2, a1); // Ez az á betű
lcd.createChar(3, o1); // Ez a hosszú ó betű
lcd.createChar(4, o3); // Ez a hosszú ő betű
lcd.createChar(6, u2); // Ez a rövid ü betű
lcd.createChar(7, u3); // Ez a hosszú ű betű
lcd.createChar(0, i1); // Ez a hosszú í betű
}
void loop() {
// Wait a few seconds between measurements.
delay(2000);
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
float h = dht.readHumidity();
// Read temperature as Celsius
float t = dht.readTemperature();
// Check if any reads failed and exit early (to try again).
if (isnan(h) || isnan(t)) {
lcd.println("Szenzor ERROR!");
return;
}
if(h > maxHum || t > maxTemp) {
digitalWrite(4, HIGH);
} else {
digitalWrite(4, LOW);
}
// Hőmérséklet.
lcd.setCursor(0, 0);
lcd.print("Homerseklet: ");
lcd.setCursor(1, 0); //Kurzor 3. sor 2. karakternél
lcd.write(4); //Átírjuk az o betüt ő-re
lcd.setCursor(3, 0); //Kurzor 3. sor 4-es karakternél
lcd.write(1); //Átírjuk az e betüt é-re
lcd.setCursor(6, 0); //Kurzor 3. sor 7-es karakternél
lcd.write(1); //Átírjuk az e betüt é-re
lcd.setCursor(13, 0); //Kurzor 3. sor 14-es karakternél
lcd.print(t); //Hőmérséklet érték kiírása
lcd.print((char)223); //Fokjel előhívása memoriából
lcd.print("C");
// Páratartalom.
lcd.setCursor(0, 1);
lcd.print("Paratartalom: ");
lcd.setCursor(1, 1);
lcd.write(2); //Átírjuk az a betüt á-re
lcd.setCursor(14, 1); // A páratartalom kijelzés a 14.sortól kezdődik
lcd.print(h);
lcd.print("%");
delay(200);
//Vízmelegítő.
lcd.setCursor(0, 2);
lcd.print("Vizmelegito :");
lcd.setCursor(1 ,2);
lcd.write(0);
lcd.setCursor(8 ,2);
lcd.write(0);
lcd.setCursor(10 ,2);
lcd.write(4);
if(Relay == HIGH)
{
lcd.setCursor(13,2);
lcd.print(" ON ");
}
else
{
lcd.setCursor(13,2);
lcd.print(" OFF ");
}
}Re: Kiírás LCD kijelzőre
mondjuk, csak azt nem mondtad, hogy mit (nem) csinál a kijelző, mi a hibajelenség?
egyszerűsítsd az életed:
a hibakeresés idejére vedd ki az ékezetes kiírást,
tedd egyenlő hosszúvá a két kiíratást
vagy, ha ennyire szíveden viseled a magyar üzeneteket, akkor:
majd, ha minden megy,
egyenként tedd vissza az ékezetes betűket.
egyszerűsítsd az életed:
a hibakeresés idejére vedd ki az ékezetes kiírást,
tedd egyenlő hosszúvá a két kiíratást
Kód: Egész kijelölése
lcd.print(" ON "); //két szóköz a végén
vs
lcd.print(" OFF ");
Kód: Egész kijelölése
lcd.print(" BE ");
vs
lcd.print(" KI ");
egyenként tedd vissza az ékezetes betűket.
Re: Kiírás LCD kijelzőre
LCD esetén nem állandóan újraírjuk - csak a változást frissítjük rajta. Különben a kezelése nagyon lassú lesz!
Tegyél be egy kiírás előtt kezdet= millis(); és a végén egy veg=millis(); sort és a különbözetet írasd sorosporton/kijelzőn. Nagyon nagy számot fogsz látni (~250...500 msec!)
Tegyél be egy kiírás előtt kezdet= millis(); és a végén egy veg=millis(); sort és a különbözetet írasd sorosporton/kijelzőn. Nagyon nagy számot fogsz látni (~250...500 msec!)
-
Daszkalosz
- Újonc

- Hozzászólások: 10
- Csatlakozott: 2016. május 22. vasárnap, 20:26
Re: Kiírás LCD kijelzőre
Sziasztok!
Köszönöm a segítségeteket!
A hibajelenség abban áll,hogy a reléállapotát nem írja ki hogy on vagy off.
Jelenleg OFF állapotot jelez még akkor is,ha a relé ON állapotban van.
Az ékezetes betűket csak próbálgattam. Viszont halványan villognak az ékezetes betűk.
Köszönöm a segítségeteket!
A hibajelenség abban áll,hogy a reléállapotát nem írja ki hogy on vagy off.
Jelenleg OFF állapotot jelez még akkor is,ha a relé ON állapotban van.
Az ékezetes betűket csak próbálgattam. Viszont halványan villognak az ékezetes betűk.
Re: Kiírás LCD kijelzőre
Minthogy relay= 4 definíciószinten:
if(Relay == HIGH)
High = 1 alapértelmezetten....ű
Javítás:
if(digitalread(Relay) == HIGH)....
if(Relay == HIGH)
High = 1 alapértelmezetten....ű
Javítás:
if(digitalread(Relay) == HIGH)....