Loading...
Pages: [1]   Go Down
Author Topic: Sensor LM 75 macht Probleme  (Read 48 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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,,... smiley-sad liegen)

Hier mal mein Code:

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
Logged

Offline Offline
Jr. Member
**
Karma: 1
Posts: 53
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Sicher dass man int so auf double casten kann? Ein Cast ist nicht unbedingt eine Umwandlung.
« Last Edit: June 16, 2013, 05:55:20 am by Serenifly » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Offline Offline
Jr. Member
**
Karma: 1
Posts: 53
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
« Last Edit: June 16, 2013, 05:59:03 am by Serenifly » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Habs jetzt mal angepasst

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", 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
Logged

Offline Offline
Jr. Member
**
Karma: 1
Posts: 53
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok, ich habe mal gegoogelt. Der Cast funktioniert anscheinend:
http://cboard.cprogramming.com/cplusplus-programming/67369-how-convert-integer-double.html

Sorry für die Verwirrung
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Danke fürs Nachschauen aber das hilft mir halt leider auch nicht wirklich weiter smiley-sad
Logged

Pages: [1]   Go Up
Print
 
Jump to: