duinozone.cz - Arduino a Raspberry fórum

Autor Téma: DHT11 získání měřených hodnot s jedním desetinným místem  (Přečteno 4508 krát)

n-i-o

  • Host
DHT11 získání měřených hodnot s jedním desetinným místem
« kdy: Listopad 19, 2014, 13:15:09 odpoledne »
Zdravím všechny,
potřebuji poradit jak upravím vystup hodnoty např. teploty z čidla DHT11 na jedno desetinné místo. Z čidla dostávám vždy hodnotu např. 24,40 celsia, ale já potřebuji na display zobrazit 24,4 celsia.

ví někdo jak na to? Diky.

Offline posjirka

  • Zkušený bastlíř
  • ****
  • Příspěvků: 433
Re:DHT11 získání měřených hodnot s jedním desetinným místem
« Odpověď #1 kdy: Listopad 19, 2014, 19:20:55 odpoledne »
sice nevím o jaké proměnné (typu) se bavíme, ale vidím v základu 2 možnosti:
1, rozdělit hodnotu na 2 (před tečkou a za tečkou) a zpracovat každou zvláš´t
2, použít funkci sprintf(), to umožní formátovat text.
ještě jsem jí nezkoušel, ale na netu je spousta examplů.

Příště doporučuji trochu specifikovat o co se jedná. Auto taky jezdí po silnici ale je rozdíl jestli jede vlevo nebo vpravo :)

n-i-o

  • Host
Re:DHT11 získání měřených hodnot s jedním desetinným místem
« Odpověď #2 kdy: Listopad 19, 2014, 20:22:58 odpoledne »
No proměnná je typu "float" neuváděl jsme ji protože naznám žádnou jinou která umí plovoucí desetinou čárku.
Funkci sprintf() neznám jak bych to měl zapsat? S proměnou potřebuji dále pracovat jako s číselnou hodnotou.

Offline Martin Pihrt

  • Bastlíř začátečník
  • *
  • Příspěvků: 32
  • Nic není nemožné...
    • www.pihrt.com

Offline posjirka

  • Zkušený bastlíř
  • ****
  • Příspěvků: 433
Re:DHT11 získání měřených hodnot s jedním desetinným místem
« Odpověď #4 kdy: Listopad 19, 2014, 22:23:37 odpoledne »
to jsem zkoušel a výsledkem je zobrazení "-1"

Kód: [Vybrat]
#include <stdio.h>
#include <stdlib.h>

void setup()
{
  Serial.begin(9600);
  float conver = 45.592346543;
  Serial.println(printf("conver is %0.1f\n",conver));

}

void loop()
{
}

Offline Martin Pihrt

  • Bastlíř začátečník
  • *
  • Příspěvků: 32
  • Nic není nemožné...
    • www.pihrt.com
Re:DHT11 získání měřených hodnot s jedním desetinným místem
« Odpověď #5 kdy: Listopad 20, 2014, 06:15:29 dopoledne »
Vyřešeno:

Kód: [Vybrat]
void setup()
{
  Serial.begin(9600);
  float bar = 12.3425;
  String pepa = String(bar,1); // cislo rika na kolik mist
  Serial.println( bar );
  Serial.println( pepa );
}
 
  void loop()
{
}

// vysledek z monitoru je
//12.34
//12.3

vice zde: http://www.timewasters-place.com/arduino-string-and-float/
« Poslední změna: Říjen 02, 2016, 19:42:52 odpoledne od Yenda »

Offline posjirka

  • Zkušený bastlíř
  • ****
  • Příspěvků: 433
Re:DHT11 získání měřených hodnot s jedním desetinným místem
« Odpověď #6 kdy: Listopad 20, 2014, 08:19:50 dopoledne »
good job ..

n-i-o

  • Host
Re:DHT11 získání měřených hodnot s jedním desetinným místem
« Odpověď #7 kdy: Listopad 22, 2014, 13:35:56 odpoledne »
Tak až dneska jsem se k tomu zase dostal, při pokusu ověření toho příkladu mně vyšlo tohle: :-(

sketch_nov22a.ino: In function 'void setup()':
sketch_nov22a:5: error: call of overloaded 'String(float&, int)' is ambiguous
E:\ServerFolders\Data\Disk Google\Arduino\arduino-1.0.5-r2\hardware\arduino\cores\arduino/WString.h:70: note: candidates are: String::String(long unsigned int, unsigned char)
E:\ServerFolders\Data\Disk Google\Arduino\arduino-1.0.5-r2\hardware\arduino\cores\arduino/WString.h:69: note:                 String::String(long int, unsigned char)
E:\ServerFolders\Data\Disk Google\Arduino\arduino-1.0.5-r2\hardware\arduino\cores\arduino/WString.h:68: note:                 String::String(unsigned int, unsigned char)
E:\ServerFolders\Data\Disk Google\Arduino\arduino-1.0.5-r2\hardware\arduino\cores\arduino/WString.h:67: note:                 String::String(int, unsigned char)
E:\ServerFolders\Data\Disk Google\Arduino\arduino-1.0.5-r2\hardware\arduino\cores\arduino/WString.h:66: note:                 String::String(unsigned char, unsigned char)

n-i-o

  • Host
Re:DHT11 získání měřených hodnot s jedním desetinným místem
« Odpověď #8 kdy: Listopad 22, 2014, 14:00:41 odpoledne »
Tak oprava, měl jsem starou verzi Arduino IDE :-) už to funguje :-)

Velké díky za pomoc

Tom

  • Host
Re:DHT11 získání měřených hodnot s jedním desetinným místem
« Odpověď #9 kdy: Červen 30, 2016, 08:08:18 dopoledne »
Není toto jednodušší ? :

Kód: [Vybrat]
void setup()
{
  Serial.begin(9600);
  float bar = 12.3425;
  Serial.println( bar,1 );
 }


Vyřešeno:

void setup()
{
  Serial.begin(9600);
  float bar = 12.3425;
  String pepa = String(bar,1); // cislo rika na kolik mist
  Serial.println( bar );
  Serial.println( pepa );
}
 
  void loop()
{
}

// vysledek z monitoru je
//12.34
//12.3

vice zde: http://www.timewasters-place.com/arduino-string-and-float/
« Poslední změna: Říjen 02, 2016, 19:43:44 odpoledne od Yenda »

Jirka

  • Host
Re:DHT11 získání měřených hodnot s jedním desetinným místem
« Odpověď #10 kdy: Leden 13, 2017, 11:19:19 dopoledne »
Teplotu z čidla zobrazuji na jedno desetinné místo na LCD takto:

lcd.print(teplota,1);

lcd.print((char)223); //°
lcd.print("C");