|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
SimonS Član
Pridružen-a: Čet 01 Jul 2004 11:18 Prispevkov: 4592 Aktiv.: 20.57 Kraj: Kobarid
|
Objavljeno: Sre Dec 20, 2023 11:20 am Naslov sporočila: |
|
|
Če se ti ne sanja, potem ne tikaj knjižnice
0xFA (hex) = 250 (dec) ampak tega ne spreminjaj, ker tako pač mora biti!
Sicer pa zakaj nebi uporabil sprintf? Saj si sam napisal primer, kako prikazati le eno decimalko.
Ne prikazuj direktno izhod senzorja na println, ampak ga daj v eno neznako (float) in potem z sprintf prikaži le eno decimakno.
Koda: |
float T = bmp.readTemperature();
char buf[10];
sprintf(buf, "%.1f", T); // .1 means: print 1 numbers after the dot |
_________________ Lep dan
Simon |
|
Nazaj na vrh |
|
|
Bizgec65 Član
Pridružen-a: Sre 10 Mar 2010 11:46 Prispevkov: 2058 Aktiv.: 11.95 Kraj: Trebnje
|
Objavljeno: Sre Dec 20, 2023 11:31 am Naslov sporočila: |
|
|
Seveda je bila to prva stvar, ki sem jo preizkusil.
Rezultat:
PS.:
Sem še malo "raziskoval" in naletel na tole: (Še za par ur tuhtanja )
KLIK
.....
Now you might be like… “Wait a second now – I thought you said the “s” character formatter was for a string of characters, but the temperature in Fahrenheit is a floating point value – what gives?!”
Well, here’s the deal.
Sprintf() with Arduino cannot handle floating point values. So if you have to print something that has a decimal point, like 3.14 or 156.7, then you need to convert that float value to a character string first, and then print the string. A handy way to do that is with dtostrf(), which converts a floating point value to a string. I won’t get into that now, but be sure to check out our other video on using dtostrf() with Arduino.
Opis: |
|
Velikost datoteke: |
3.16 MB |
Pogledana: |
1 krat |
|
_________________ Če bi nekateri padli z višine svojega ega na višino svoje inteligence, bi se ubili. (Je pa res, da se meni ne smilijo!) |
|
Nazaj na vrh |
|
|
SimonS Član
Pridružen-a: Čet 01 Jul 2004 11:18 Prispevkov: 4592 Aktiv.: 20.57 Kraj: Kobarid
|
Objavljeno: Sre Dec 20, 2023 12:10 pm Naslov sporočila: |
|
|
Saj si potem na koncu dal:
Koda: |
u8g2.println (buf); |
se opravičujem, da nisem napisal, se mi je zdelo samoumevno....
_________________ Lep dan
Simon |
|
Nazaj na vrh |
|
|
Bizgec65 Član
Pridružen-a: Sre 10 Mar 2010 11:46 Prispevkov: 2058 Aktiv.: 11.95 Kraj: Trebnje
|
Objavljeno: Sre Dec 20, 2023 1:05 pm Naslov sporočila: |
|
|
Sem ja, potem pa dobim "? °C"
Sem še TOLE šel brati in mi še vedno marsikaj ni jasno. Če dam kak drug argument za "%1" dobim izpis ampak ne pravi, neke 4 mestne številke.
Ta "sprintf" bi moral izpisati natanko to kar želim, ampak...
Se tudi sam opravičujem, ker mogoče sprašujem traparije, ampak se vse te stvari šele učim, pa še to bolj počasi.
_________________ Če bi nekateri padli z višine svojega ega na višino svoje inteligence, bi se ubili. (Je pa res, da se meni ne smilijo!) |
|
Nazaj na vrh |
|
|
mosqito Član
Pridružen-a: Čet 07 Apr 2016 23:22 Prispevkov: 3249 Aktiv.: 33.07
|
Objavljeno: Sre Dec 20, 2023 9:05 pm Naslov sporočila: |
|
|
Najlažje se je igrati v kakem online prevajalniku, npr.:
https://onecompiler.com/c/3zwzaqpyq
_________________ Always going the extra mile. |
|
Nazaj na vrh |
|
|
SimonS Član
Pridružen-a: Čet 01 Jul 2004 11:18 Prispevkov: 4592 Aktiv.: 20.57 Kraj: Kobarid
|
Objavljeno: Sre Dec 20, 2023 9:49 pm Naslov sporočila: |
|
|
Probaj tako:
Koda: |
float T = bmp.readTemperature();
char buf[10];
sprintf(buf, "%.1f", T); // .1 means: print 1 numbers after the dot
u8g2.println (buf);
Serial.println (buf); |
Tako boš videl tudi naserijskem portu kaj ti izpiše
sicer pa %.1f pomeni izpis na 1. decimalko spremenljivke float
_________________ Lep dan
Simon |
|
Nazaj na vrh |
|
|
Bizgec65 Član
Pridružen-a: Sre 10 Mar 2010 11:46 Prispevkov: 2058 Aktiv.: 11.95 Kraj: Trebnje
|
Objavljeno: Sre Dec 20, 2023 10:45 pm Naslov sporočila: |
|
|
To sem že vse naredil, na serial portu je isto. Tisto "%.1f" mi je jasno, edino kar nisem preizkusil, je še, da v Float vpišem kar neko svojo številko, kot v primeru 2 prispevka višje od mosquita in kakor so na netu primeri.
Poročam jutri.
_________________ Če bi nekateri padli z višine svojega ega na višino svoje inteligence, bi se ubili. (Je pa res, da se meni ne smilijo!) |
|
Nazaj na vrh |
|
|
RGorazd Član
Pridružen-a: Čet 20 Maj 2004 15:57 Prispevkov: 1713 Aktiv.: 7.67 Kraj: Ig
|
Objavljeno: Čet Dec 21, 2023 8:19 am Naslov sporočila: |
|
|
float x = 123.456789;
int a, b;
a = (int)x;
b = (int)((x - a) * 10);
printf("%d.%d", a, b);
x = tvoja meritev
printf = sprintf(buff. " Temp: %d.%d", a,b);
LP.
_________________ .
._. _ _ ._. _.__. _|
[ (_](_)[ (_] /_(_]
._| |
|
Nazaj na vrh |
|
|
Bizgec65 Član
Pridružen-a: Sre 10 Mar 2010 11:46 Prispevkov: 2058 Aktiv.: 11.95 Kraj: Trebnje
|
Objavljeno: Čet Dec 21, 2023 10:26 am Naslov sporočila: |
|
|
RGorazd
That's it!!
Le tukaj mora biti vejica namesto pike:
Koda: |
sprintf(buff. " Temp: %d.%d", a,b);
sprintf(buff, " Temp: %d.%d", a,b);
|
Sedaj ta del pri meni izgleda takole:
Koda: |
float x = bmp.readTemperature();
int a,b;
a=(int)x;
b=(int)((x-a)*10);
sprintf(buf,"%d.%d",a,b);
u8g2.print(buf);
|
Hvala tudi ostalim za potrpljenje in pomoč. Nekaj novega sem se pa tudi vmes naučil. Ko končam še ostali prikaz, objavim sliko.
_________________ Če bi nekateri padli z višine svojega ega na višino svoje inteligence, bi se ubili. (Je pa res, da se meni ne smilijo!) |
|
Nazaj na vrh |
|
|
RGorazd Član
Pridružen-a: Čet 20 Maj 2004 15:57 Prispevkov: 1713 Aktiv.: 7.67 Kraj: Ig
|
Objavljeno: Čet Dec 21, 2023 2:07 pm Naslov sporočila: |
|
|
Me veseli.
Ja, pisal sem na pamet, kompajler bi me opozoril
LP,
_________________ .
._. _ _ ._. _.__. _|
[ (_](_)[ (_] /_(_]
._| |
|
Nazaj na vrh |
|
|
mosqito Član
Pridružen-a: Čet 07 Apr 2016 23:22 Prispevkov: 3249 Aktiv.: 33.07
|
Objavljeno: Čet Dec 21, 2023 7:53 pm Naslov sporočila: |
|
|
Ostanek deljenja z deset lahko izračunaš tudi z opearorjem % (modulo).
b = a % 10;
_________________ Always going the extra mile. |
|
Nazaj na vrh |
|
|
Bizgec65 Član
Pridružen-a: Sre 10 Mar 2010 11:46 Prispevkov: 2058 Aktiv.: 11.95 Kraj: Trebnje
|
|
Nazaj na vrh |
|
|
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 83 dni
Powered by phpBB © 2001, 2005 phpBB Group
|