MAX6675 ohne Dezimalzahlen

Hallo,
ich bin gerade dabei mir eine Temperaturanzeige zu bauen benötige, benötige aber die Kommastellen nicht. Gibt es eine Möglichkeit diese nicht mit auszugeben, da ich nur einen 128x32 OLCD verwende ist der Platz wenig. Bin neu auf dem Gebiet und kenne mich wenig aus.
Danke für eure Hilfe

Weise es einer Ganzzahl zu.

Gruß Tommy

Hallo @k9ks

herzlich willkommen im Arduino-Forum.
Wenn du den Zahlenwert einer Integer-Variablen zuweist dann wird das Komma einfach abgeschnitten.

int myGanzzahlTemp;

myGanzzahlTemp = myFloatTemp + 0.5;

Das "+0.5" macht dann das auf/abrunden

vgs

Super Danke war doch einfacher als gedacht :smiley:

... zumindest bei Zahlen >= 0 :stuck_out_tongue:

Leider gibt es hier aktuell auch negative Temperaturen.

int i = -1.4 + 0.5; // ergibt 0

Etwas bechemet was schreibe aber funktioniert

int i = -1.4* -1 + 0.5; 

man muss aber bei Anzeige " - " dazu Zeichen, oder neu auf Minus werte umrechnen

int a = 0;
if (x>0) a= x+0.5;
else a=x-0.5;

Gruß Tommy

Auch wenn das funktioniert, ist das if ein Kontrollfluss steuerndes Element.

Hier könnte auch ein Datenflusssteuerndes Element Verwendung finden.

int a = x + (x>0)?+0.5:-0.5;

PS:
Das ist keine Kritik, sondern nur eine Anmerkung/Erweiterung

Ist auch kürzer.

Gruß Tommy

@k9ks

ich würde verwenden was es schon gibt:

void setup() {
  Serial.begin(115200);
  float temp = -4.5;
  Serial.println(round(temp));
}

void loop() {
}

Auch eine Variante!

Hallo zusammen,

Habe gerade das Gleiche Problem allerdings weiss ich nicht wie ich die Lösung Richtig einpflegen soll das es Funktioniert.
Vllt kann mir einer Helfen, Danke.

Zeige dein Code

weiß ich auch nicht weil ich dein Programm hier nirgends finden kann.

Hey Sorry habe vergessen das Programm hinzuzufügen, bin aber mittlerweile drauf gestoßen und habe es für mich gelößt herzlichen dank trotzdem.

Bis zum nächsten Problem :wink:

Du solltest deinen Code mit dem es jetzt läuft als kleines Dankeschön an die Community hier posten.
Sonst helfe ich dir nicht bei deinem nächsten Problem

Ahso ja klar kein Thema, gerne Teile ich den Code auch ohne Irgendwelche vorraussagen ob einem anhand dessen nochmal geholfen wird oder nicht, da ja man sehen kann das ich erst kürzlich Mitglied geworden bin könnte man mir das ja auch normal sagen, freue mich auf die weitere coderei mit euch.

#include <U8g2lib.h>
#include <max6675.h>

U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE);

int BildschirmBreite = u8g2.getDisplayWidth();
int BildschirmHoehe = u8g2.getDisplayHeight();
int thermoDO = 8;
int thermoCS = 9;
int thermoCLK = 10;


MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);



void setup(void) {
 
  // Display starten
  u8g2.begin();
  // Kontrast maximal 255
  u8g2.setContrast(200);

  displayAnimation();
}


void loop(void) {

  //do

  //
  u8g2.clearBuffer();
  
  
  u8g2.setFont(u8g2_font_profont22_tf); // choose a suitable font
  


  double temp = thermocouple.readCelsius();
  int temp2 = (int)(temp + 0.5);
  u8g2.setCursor(55, 25);
  u8g2.print( (String)(temp2)+(char)176 + "C" );
  u8g2.sendBuffer();
  while (u8g2.nextPage());

  delay(2000);
}

void displayAnimation(void){
  


  // Farbe weiß
  u8g2.setDrawColor(1);

  // Silouette
  u8g2.firstPage();
  //do

  
  u8g2.sendBuffer();
  while (u8g2.nextPage());
  delay(1000);
  u8g2.setFont(u8g2_font_seraphimb1_tr); // choose a suitable font
  u8g2.drawStr(35, 28, "Astra G"); // write something to the internal memory
  u8g2.sendBuffer();          // transfer internal memory to the display
  delay(1000);
  u8g2.clearBuffer();
  u8g2.firstPage();
  //do

  

  delay(0);
  u8g2.setFont(u8g2_font_seraphimb1_tr); // choose a suitable font
  u8g2.drawStr(30, 28, "Oil-Temp"); // write something to the internal memory
  u8g2.sendBuffer();          // transfer internal memory to the display
  delay(1000);
  u8g2.clearBuffer();
  u8g2.firstPage();
}