LÖST: Bestämma antalet visade decimaler.

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
EonX
Inlägg: 48
Blev medlem: 11 januari 2010, 23:36:56

LÖST: Bestämma antalet visade decimaler.

Inlägg 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
}
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Senast redigerad av EonX 18 september 2020, 10:48:20, redigerad totalt 1 gång.
svanted
Inlägg: 5082
Blev medlem: 30 augusti 2010, 21:20:38
Ort: Umeå

Re: Bestämma antalet visade decimaler.

Inlägg av svanted »

float T2;

T2 = round(T*10)/10;
Användarvisningsbild
adent
Inlägg: 4094
Blev medlem: 27 november 2008, 22:56:23
Ort: Utanför Jönköping
Kontakt:

Re: Bestämma antalet visade decimaler.

Inlägg 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
EonX
Inlägg: 48
Blev medlem: 11 januari 2010, 23:36:56

Re: Bestämma antalet visade decimaler.

Inlägg 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?
FormerMazda
Inlägg: 6066
Blev medlem: 27 februari 2006, 14:59:36
Ort: Tranås (Jönköping)

Re: Bestämma antalet visade decimaler.

Inlägg av FormerMazda »

Kod: Markera allt

String sT = String(T, 1);
display.print(sT);
Borde funka
svanted
Inlägg: 5082
Blev medlem: 30 augusti 2010, 21:20:38
Ort: Umeå

Re: Bestämma antalet visade decimaler.

Inlägg av svanted »

eller så suddar du sista siffran med:

display.print(" ");
EonX
Inlägg: 48
Blev medlem: 11 januari 2010, 23:36:56

Re: Bestämma antalet visade decimaler.

Inlägg 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!
FormerMazda
Inlägg: 6066
Blev medlem: 27 februari 2006, 14:59:36
Ort: Tranås (Jönköping)

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

Inlägg 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.
SeniorLemuren
Inlägg: 7779
Blev medlem: 26 maj 2009, 12:20:37
Ort: Kristinehamn

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

Inlägg av SeniorLemuren »

a = round(b);
FormerMazda
Inlägg: 6066
Blev medlem: 27 februari 2006, 14:59:36
Ort: Tranås (Jönköping)

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

Inlägg 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.
Skriv svar