lcd,string,1 desatine miesto

Odpovědět
Sperhak
Příspěvky: 46
Registrován: 22 čer 2018, 19:49
Reputation: 0

lcd,string,1 desatine miesto

Příspěvek od Sperhak » 02 pro 2018, 13:38

Riešim jednu meteostanicu a narazil som na malý problém,na lcd sa zobrazujú 2 desatine miesta ja by som chcel jedno, a neviem si s tým rady.

Kód: Vybrat vše

int napetiePin = A3;
int napetieRaw;
float napetie;
String napetieVypis;

napetie = (napetieRaw * (5.0 / 1023) * ((100000 + 33000) / 33000)) + 0, 7;  
napetieRaw = analogRead(napetiePin);

 if (napetie >= 10) {
    napetieVypis = napetie;
  }
  else {
    napetieVypis = "ERR";
    
     lcd.print(napetieVypis);
  }
Ked dám namiesto float napetie; int napetie; tak sa zas nezobrazuju ziadne desatine miesta
Ked napíšem lcd.print(napetieVypis, 1); tak to nezoberie lebo je to string.

martinius96
Příspěvky: 579
Registrován: 01 srp 2017, 19:29
Reputation: 0
Bydliště: Poprad
Kontaktovat uživatele:

Re: lcd,string,1 desatine miesto

Příspěvek od martinius96 » 02 pro 2018, 14:47

Však chceš vypisovať string. Vypisuješ ERR.
S číslom to nemá nič spoločné.

Kód: Vybrat vše

 if (napetie >= 10) { //ak je napätie viac, alebo rovne 10, priraď premennej napetievypis hodnotu napetie
    napetieVypis = napetie;
    //ziaden vypis
  }
  else {//inak, prirad premennej napetieVypis string ERR
    napetieVypis = "ERR";
    
     lcd.print(napetieVypis); //vypis tento string
  }
Myslím, že problém nebude v programe ako takom, keďže vypisuješ text a nie číslo.
preto si výpis urob takto:

Kód: Vybrat vše

if (napetie >= 10) { //ak je napätie viac, alebo rovne 10, priraď premennej napetievypis hodnotu napetie
  lcd.print(napetie, 1); //vypis float s jednym desatinnym miestom
  }
  else {//inak, prirad premennej napetieVypis string ERR
    napetieVypis = "ERR";
    
     lcd.print(napetieVypis); //vypis tento string
  }

Sperhak
Příspěvky: 46
Registrován: 22 čer 2018, 19:49
Reputation: 0

Re: lcd,string,1 desatine miesto

Příspěvek od Sperhak » 02 pro 2018, 16:26

Ano lenže to by bolo komplikovanejšie kedže sa to posiela aj na server a ešte cez 433Mhz modul musel by som to tam dať 3x pre každú vec zvlášť.Ono ten string vypíše načítané číslo ale v tvare napr 10,44 a ja by som chcel 10,4 .Chcel by som tú premennú String napetieVypis aby raz obsahovala ERR a raz napr 11.5 a nie 11.58

Teraz som si všimol že som to sem zle prepísal ušla mi jedna zátvorka možno to Vás zmýlilo.

Kód: Vybrat vše

int napetiePin = A3;
int napetieRaw;
float napetie;
String napetieVypis;

napetie = (napetieRaw * (5.0 / 1023) * ((100000 + 33000) / 33000)) + 0, 7;  
napetieRaw = analogRead(napetiePin);

if (napetie >= 10) {
   napetieVypis = napetie;
   }
   else {
   napetieVypis = "ERR";
   }
lcd.print(napetieVypis);
     

martinius96
Příspěvky: 579
Registrován: 01 srp 2017, 19:29
Reputation: 0
Bydliště: Poprad
Kontaktovat uživatele:

Re: lcd,string,1 desatine miesto

Příspěvek od martinius96 » 02 pro 2018, 17:46

Tak by to šlo asi takto, nemám tu Arduino aby som to vykúšal..

Kód: Vybrat vše

int napetiePin = A3;
int napetieRaw;
float napetie;
String napetieVypis;

napetie = (napetieRaw * (5.0 / 1023) * ((100000 + 33000) / 33000)) + 0, 7;  
napetieRaw = analogRead(napetiePin);

if (napetie >= 10) {
   napetieVypis = (napetie,1);
   }
   else {
   napetieVypis = "ERR";
   }
lcd.print(napetieVypis);

Sperhak
Příspěvky: 46
Registrován: 22 čer 2018, 19:49
Reputation: 0

Re: lcd,string,1 desatine miesto

Příspěvek od Sperhak » 02 pro 2018, 18:08

Nie nefunguje.Stále sú 2 desatine miesta.

rejze69
Příspěvky: 174
Registrován: 02 dub 2018, 18:56
Reputation: 0

Re: lcd,string,1 desatine miesto

Příspěvek od rejze69 » 08 pro 2018, 00:33

Ahoj.
Pokud můžu něco doporučit, projdi si formátování pomocí snprintf. Tím si můžeš naformátovat přesně co potřebuješ.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 13 hostů