Zobrazeni hodnot na displeji
Re: Zobrazeni hodnot na displeji
tak jsem to nakonec zmáknul s vasi pomoci.
tedka si uz muzu hrat i s displejema a zkouset ruzne vecicky...dekujiiiiii
tedka si uz muzu hrat i s displejema a zkouset ruzne vecicky...dekujiiiiii
Re: Zobrazeni hodnot na displeji
@looki - napiš nějake info k tomuto modulu.
Maš z arduino-shop nebo čina-shop?
Maš z arduino-shop nebo čina-shop?
- pavel1tu
- Příspěvky: 2054
- Registrován: 26 říj 2017, 08:28
- Reputation: 0
- Bydliště: Trutnov
- Kontaktovat uživatele:
Re: Zobrazeni hodnot na displeji
Není tu deklarace displeje, ale je to udělané dle knihovny <LiquidCrystal_I2C.h>
Jednoduše takto
Já mám na vypisování "podprogram", který zavolám, zadám jen číslo řádku, on řádek vymaže a pak zapíše novou hodnotu.
Má to výhodu, že to mohu volat odkudkoliv, nebo jednou za čas, delay ale nepoužívám, k tomu se dopracuješ později, při delay program stojí a nic nedělá
Třeba takto .....
ještě před SETUP dáš
v LOOP zavoláš
doufám že tě to ještě více nezmate .... a neověřoval jsem to, nemám ještě měřák PH, je na cestě
Jednoduše takto
Kód: Vybrat vše
// tady je vytištění na nadefinovaný řádek na displej - doplň jen číslo řádku 0= první řádek
lcd.setCursor ( 0, radek );
lcd.print(" "); //vymazani radku
lcd.setCursor ( 0, radek );
lcd.print(vyslednePH);
Má to výhodu, že to mohu volat odkudkoliv, nebo jednou za čas, delay ale nepoužívám, k tomu se dopracuješ později, při delay program stojí a nic nedělá
Třeba takto .....
ještě před SETUP dáš
Kód: Vybrat vše
// Seznam podprogramu
VypisPH();
Kód: Vybrat vše
void loop()
{
VypisPH(0); // změří dle tvého příkladu a vypíše na daný řádek pozor 0= první řádek
// pauza 900 ms před novým měřením, celkem tedy 1s (než delay je lepší části programu vykonávat jednou za nějaký čas)
delay(900);
// tadu může pokračovat program
}
// nekam na konec das podprogram - mimo LOOOP - to vyčtení PH jsem okopíroval z tvého příkladu
void VypisPH(int radek)
{
unsigned long int prumerVysl = 0;
// načtení deseti vzorků po 10 ms do pole
for (int i = 0; i < 10; i++) {
pole[i] = analogRead(pinPo);
delay(10);
}
// seřazení členů pole naměřených výsledků podle velikosti
for (int i = 0; i < 9; i++) {
for (int j = i + 1; j < 10; j++) {
if (pole[i] > pole[j]) {
zaloha = pole[i];
pole[i] = pole[j];
pole[j] = zaloha;
}
}
}
// uložení 2. až 8. výsledku do
// proměnné, z které se vypočte průměr
// (vynechání dvou členů pole na začátku
// a konci pro lepší přesnost)
for (int i = 2; i < 8; i++) {
prumerVysl += pole[i];
}
// výpočet hodnoty pH z průměru
// měření a přepočet na rozsah 0-14 pH
float prumerPH = (float)prumerVysl * 5.0 / 1024 / 6;
float vyslednePH = -5.70 * prumerPH + 21.34;
// vytištění výsledků po sériové lince
Serial.print("Namerene pH: ");
Serial.println(vyslednePH);
// tady je vytištění na nadefinovaný řádek na displej
lcd.setCursor ( 0, radek );
lcd.print(" "); //vymazani radku
lcd.setCursor ( 0, radek );
lcd.print(vyslednePH);
}
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Re: Zobrazeni hodnot na displeji
Všechny Vás zdravím.
S Arduinem začínám, v podstatě mám úplně stejnou otázku, jako v úvodu tohoto vlákna. Rozdíl je v tom, že bych chtěl číslo s dvěma desetinnými místy zobrazit na 8místném 7segmentovém displeji (řadič MAX7219). Pročetl jsem všechny možné návody a články, ale nějak se mi nedaří. Měřím teplotu pomocí K164NK001. Na monitor dostanu např. 23,54°C. Dokážu na poslední digit napsat velké C (jako st.Celsia). Na 5.digit od konce vypíšu dvojku (teplota / 10). Jedničky stupňů jsem myslel, že dostanu pomocí funkce = teplota % 10, ale asi to u čísla float nejde. Dál jsem se nedostal.
Předem díky za jakékoliv postrčení-nakopnutí směrem dopředu.
S Arduinem začínám, v podstatě mám úplně stejnou otázku, jako v úvodu tohoto vlákna. Rozdíl je v tom, že bych chtěl číslo s dvěma desetinnými místy zobrazit na 8místném 7segmentovém displeji (řadič MAX7219). Pročetl jsem všechny možné návody a články, ale nějak se mi nedaří. Měřím teplotu pomocí K164NK001. Na monitor dostanu např. 23,54°C. Dokážu na poslední digit napsat velké C (jako st.Celsia). Na 5.digit od konce vypíšu dvojku (teplota / 10). Jedničky stupňů jsem myslel, že dostanu pomocí funkce = teplota % 10, ale asi to u čísla float nejde. Dál jsem se nedostal.
Předem díky za jakékoliv postrčení-nakopnutí směrem dopředu.
- pavel1tu
- Příspěvky: 2054
- Registrován: 26 říj 2017, 08:28
- Reputation: 0
- Bydliště: Trutnov
- Kontaktovat uživatele:
Re: Zobrazeni hodnot na displeji
A toto nefunguje, nemám to jak vyzkoušet, jediný displej mám na akvárku, nejde to momentálně odmontovat ....
lcd.print(Teplota: %.2f\n, teplota ");
lcd.print(Teplota: %.2f\n, teplota ");
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Re: Zobrazeni hodnot na displeji
Vyzkouším a dám vědět, díky.
Re: Zobrazeni hodnot na displeji
Zdravím. Pro výpis na řádkový lcd jsem si taky radši napsal podprogram. Jinak je ten sketch jak opiš za trest 100x lcd print.
Je jednoduchý a univerzální.
Jen ho zavoláš a krmíš daty. Takhle pak vypadá to co mu posíláš.
Je jednoduchý a univerzální.
Kód: Vybrat vše
//----Funkce obsluhy displeje--------------------------------------
// pb pocet zobrazovanych bloku
// setCursor: co[] znak na radku, ro[] radek displeje
// va[] zobrazovane hodnoty
void Display(byte pb, byte co[], byte ro[], String va[]) {
if(displayUpdate==true) {
for(int i = 0; i < pb; i++) {
LCD.setCursor(co[i],ro[i]);
LCD.print(va[i]);
}
}
}
Kód: Vybrat vše
//-----nacteni dat pro display
byte col[]={0,0,0};
byte row[]={0,1,2};
String val[]={"Nastaveni spin.tlaku",(String)"Pri " + ((float)HiPress /10) + " Bar Vypne ",
(String)"Pri " + ((float)LoPress /10) + " Bar Zapne "};
//-----
Display(3,col,row,val); //volani zobrazeni
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 13 hostů