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,,... 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
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.