Sensor LM 75 macht Probleme

Hy ich hab folgendes Problem ich hab einen LM 75 Sensor auf meiner Platine denn ich auslesen will und dann per RC5 versende, jedoch bekomm ich bei meinem Empfänger immer nur ?A°C (wobei °C, fix definiert ist also der Teil passt, d.h der Fehler muss beim Sensor auslesen,umwandeln,,... :frowning: liegen)

Hier mal mein Code:

#include <IRremote.h>
#include <Wire.h>

#define SENSORADDRESS 0x48
#define RECV_PIN 4

char recvVal;
IRrecv irrecv(RECV_PIN);
IRsend irsend;
decode_results results;

int led = 10;
//Initialisierung
void setup()
{
  Wire.begin();
  pinMode(led, OUTPUT);
  irrecv.enableIRIn(); //Start the receiver for IR-Code
}

void loop()
{
  digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);               // wait for a second
  digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
  delay(1000); 
  if (irrecv.decode(&results)){
    
    if (results.decode_type == RC5) {
      
      sendIRString("-s\r\n");
      
      recvVal = (char) results.value;
      if(recvVal == 'r'){
        
        sendIRString("-r\r\n");
        
        int curLM75Temp = getTemperature();
        double curRealTemp = (double) (curLM75Temp >> 8);
        if((curLM75Temp&0xFF) != 0) {
        curRealTemp += 0.5;
        }
        
        char sendBuffer[10];
        
        sprintf(sendBuffer, "%f°C\r\n", curRealTemp);
        sendIRString(sendBuffer);
        
      }
      
    }
    irrecv.resume();
  }
  
}

void sendIR(int data){
  delay(100);
  irsend.sendRC5(data, 12);
  irrecv.enableIRIn();
}

int getTemperature(){
  int temperature = 0;
  Wire.beginTransmission(SENSORADDRESS);
  Wire.requestFrom(SENSORADDRESS, 2);
  while(Wire.available()){
    temperature = (temperature << 8) | Wire.read();
  }
      Wire.endTransmission();
      return temperature;
}

void sendIRString(char text[]){
  delay(100);
  int textCnt = 0;
  while(text[textCnt] != 0) {
    delay(10);
    irsend.IRsend::sendRC5(text[textCnt], 12); //send byte
    textCnt++;
  }

  irrecv.enableIRIn(); // restart the receiver
}

Vl seht ihr einen Fehler denn ich nicht sehe!
Danke schon mal im Vorraus

Sicher dass man int so auf double casten kann? Ein Cast ist nicht unbedingt eine Umwandlung.

Bin mir nicht sicher, aber glaub eigentlich schon das dass funktioniert hast du ein Idee wie ich das sonst machen soll?

ich weiß jetzt auch nicht was der Cast da genau macht, aber Double ist eine Kombination aus Basis-Wert und Exponent/Mantisse in den oberen Bits. Kann sein dass bei deinem Cast da der Exponent nicht geschrieben wird und nur die Bits anders interpretiert werden.

Wenn du das wirklich nur zu Darstellung willst, schreibe erst den int-Wert in den String und hänge dann die ".x" mit String-Operationen dran.

Habs jetzt mal angepasst

#include <IRremote.h>
#include <Wire.h>

#define SENSORADDRESS 0x48
#define RECV_PIN 4

char recvVal;
IRrecv irrecv(RECV_PIN);
IRsend irsend;
decode_results results;

int led = 10;
//Initialisierung
void setup()
{
  Wire.begin();
  pinMode(led, OUTPUT);
  irrecv.enableIRIn(); //Start the receiver for IR-Code
}

void loop()
{
  digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);               // wait for a second
  digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
  delay(1000); 
  if (irrecv.decode(&results)){
    
    if (results.decode_type == RC5) {
      
      sendIRString("-s\r\n");
      
      recvVal = (char) results.value;
      if(recvVal == 'r'){
        
        sendIRString("-r\r\n");
        
        int curLM75Temp = getTemperature();
//        double curRealTemp = (double) (curLM75Temp >> 8);
//        if((curLM75Temp&0xFF) != 0) {
//        curRealTemp += 0.5;
//        }
//        
        char sendBuffer[10];
        
        sprintf(sendBuffer, "%f°C\r\n", curLM75Temp);
        sendIRString(sendBuffer);
        
      }
      
    }
    irrecv.resume();
  }
  
}

void sendIR(int data){
  delay(100);
  irsend.sendRC5(data, 12);
  irrecv.enableIRIn();
}

int getTemperature(){
  int temperature = 0;
  Wire.beginTransmission(SENSORADDRESS);
  Wire.requestFrom(SENSORADDRESS, 2);
  while(Wire.available()){
    temperature = (temperature << 8) | Wire.read();
  }
      Wire.endTransmission();
      return temperature;
}

void sendIRString(char text[]){
  delay(100);
  int textCnt = 0;
  while(text[textCnt] != 0) {
    delay(10);
    irsend.IRsend::sendRC5(text[textCnt], 12); //send byte
    textCnt++;
  }

  irrecv.enableIRIn(); // restart the receiver
}

Ausgabe:

?°C

Ok, ich habe mal gegoogelt. Der Cast funktioniert anscheinend:

Sorry für die Verwirrung

Danke fürs Nachschauen aber das hilft mir halt leider auch nicht wirklich weiter :frowning: