Stránka 2 z 2

Re: Zobrazeni hodnot na displeji

Napsal: 08 říj 2018, 21:05
od looki
tak jsem to nakonec zmáknul s vasi pomoci.
tedka si uz muzu hrat i s displejema a zkouset ruzne vecicky...dekujiiiiii

Re: Zobrazeni hodnot na displeji

Napsal: 04 lis 2018, 06:47
od BigSandy
@looki - napiš nějake info k tomuto modulu.
Maš z arduino-shop nebo čina-shop?

Re: Zobrazeni hodnot na displeji

Napsal: 04 lis 2018, 19:06
od pavel1tu
Není tu deklarace displeje, ale je to udělané dle knihovny <LiquidCrystal_I2C.h>

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);
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áš

Kód: Vybrat vše

// Seznam podprogramu
VypisPH();
v LOOP zavoláš

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);

}    


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ě

Re: Zobrazeni hodnot na displeji

Napsal: 05 lis 2018, 21:34
od tatuldacz
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.

Re: Zobrazeni hodnot na displeji

Napsal: 06 lis 2018, 18:19
od pavel1tu
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 ");

Re: Zobrazeni hodnot na displeji

Napsal: 07 lis 2018, 07:25
od tatuldacz
Vyzkouším a dám vědět, díky.

Re: Zobrazeni hodnot na displeji

Napsal: 07 lis 2018, 20:09
od RomanB

Re: Zobrazeni hodnot na displeji

Napsal: 14 lis 2018, 22:58
od rejze69
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. :lol:
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]);
  }
  }
}  
Jen ho zavoláš a krmíš daty. Takhle pak vypadá to co mu posíláš.

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