Sida 1 av 1

LÖST: Bestämma antalet visade decimaler.

Postat: 18 september 2020, 08:49:38
av EonX
God dag!

Säkerligen en väldigt enkel nöt att knäcka för er som begriper :)

Jag har gjort en termometer som visar temp på Oled. Jag använder en DS20B18 och Oled som kommer med startpaketet Arduino.

Det jag skulle behöva hjälp med är att ta bort en decimal på det som visas, hur gör jag detta?
IMG_3565.JPG

Kod: Markera allt

#include <OneWire.h>
#include <DallasTemperature.h>
#include <SPI.h><br>#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 4 
Adafruit_SSD1306 display(OLED_RESET);
#define ONE_WIRE_BUS 4

OneWire oneWire(ONE_WIRE_BUS);

DallasTemperature sensors(&oneWire);

void setup(void)
{
// Start serial communication for debugging purposes
Serial.begin(9600);     // initialize the Serial Monitor at a baud rate of 9600
// Start up the library
sensors.begin();        // initialize the DS18B20 temperature sensor:


  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  display.clearDisplay();
}

void loop(void){ 
// Call sensors.requestTemperatures() to issue a global temperature and Requests to all devices on the bus
sensors.requestTemperatures(); 
Serial.print("Celsius temperature: ");  
// Why "byIndex"? You can have more than one IC on the same bus. 0 refers to the first IC on the wire
Serial.println(sensors.getTempCByIndex(0));     // get and print the temperature in degree Celsius
float T = sensors.getTempCByIndex(0);  // let T be temperature in degC from sensor<br>// floating-point number, with a decimal point

delay(1000);

display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE); 
display.setCursor(0,0);
display.println("Vattentemp: ");   // display temperature in deg Celsius
display.setCursor(0,10);
display.setTextSize(3);
display.print(T);
display.print(" ");
display.cp437(true);      // code page 437
display.write(167);       // character 167 is degree
display.println("C");
display.display();    // for the changes to make effect
}

Re: Bestämma antalet visade decimaler.

Postat: 18 september 2020, 09:08:28
av svanted
float T2;

T2 = round(T*10)/10;

Re: Bestämma antalet visade decimaler.

Postat: 18 september 2020, 09:19:23
av adent
Hej!

Såg att "vanliga" print hade stöd för print(flyttal,3); och skriver då ut flyttal med tre decimaler, men det kanske inte LCD-modulens print har.

Detta sätt ska nog funka oavsett:

https://www.hobbytronics.co.uk/arduino-float-vars

MVH: Mikael

Re: Bestämma antalet visade decimaler.

Postat: 18 september 2020, 09:35:35
av EonX
svanted skrev: 18 september 2020, 09:08:28 float T2;

T2 = round(T*10)/10;
Funkar helt rätt, dock visas fortfarande de 2 decimalerna som 00.
Går detta att avhjälpa på något enkelt vis?

Re: Bestämma antalet visade decimaler.

Postat: 18 september 2020, 09:39:43
av FormerMazda

Kod: Markera allt

String sT = String(T, 1);
display.print(sT);
Borde funka

Re: Bestämma antalet visade decimaler.

Postat: 18 september 2020, 10:31:34
av svanted
eller så suddar du sista siffran med:

display.print(" ");

Re: Bestämma antalet visade decimaler.

Postat: 18 september 2020, 10:47:33
av EonX
FormerMazda skrev: 18 september 2020, 09:39:43

Kod: Markera allt

String sT = String(T, 1);
display.print(sT);
Borde funka
Funkade alldeles utmärkt :tumupp:

Tack för alla svar, man lär sig något varje dag!

Re: LÖST: Bestämma antalet visade decimaler.

Postat: 18 september 2020, 11:09:57
av FormerMazda
Kul att det funkade!

Uttrycket String är inte bara att deklarera en variabel utan även en funktion. Klumpigt beskrivet.
Så String sT deklarerar sT som en sträng. Kan hålla text och så.
sT = String(T, 1) är alltså en funktion som tar flyttalet T, konverterar till sträng och med en decimal.

I ditt lilla program och med den applikationen så behöver man inte fundera på prestanda och utrymme.
Puristerna vrider sig i smärta, och jag håller med delvis. Men sådan är tiden vi lever i, överflöd. Så då kan man göra det enkelt för sig. :)

Överlag verkar dock dom där stringconstructors-grejerna inte vara jättebra att använda vad jag kan läsa om.
Kan själv inte svara på varför, men så har jag tolkat det.

Re: LÖST: Bestämma antalet visade decimaler.

Postat: 18 september 2020, 13:28:44
av SeniorLemuren
a = round(b);

Re: LÖST: Bestämma antalet visade decimaler.

Postat: 18 september 2020, 13:38:37
av FormerMazda
Men ändrar round antal decimaler?

Googlade och läste detta: https://www.arduino.cc/reference/en/lan ... pes/float/
Låter ju mer som en heltalsavrundning i mina öron.