Go Down

Topic: 433 MHz Funkthermometer decodieren (Read 14 times) previous topic - next topic

DE8MSH

#15
Aug 04, 2011, 08:35 pm Last Edit: Aug 04, 2011, 11:03 pm by DE8MSH Reason: 1
N'Abend.

Nachdem ich von Jomelo sehr gute Tipps bekommen habe zu den Bits, die das Funkthermometer auspuckt, habe ich mit diesem Code

Code: [Select]

#define _Whole_Data_length    116

int pin = 2;
byte tempten;
byte tempone;
byte tempcom;
byte humiten;
byte humione;
byte valuepos=0;
byte bitpos=0;
byte bitcounter=1;
byte array_pos=0;
unsigned long duration;
int whole_array[_Whole_Data_length];   

void setup()
{
  pinMode(pin, INPUT);ten
    Serial.begin(9600);
    Serial.println("Give it to me...");
    delay(2#define _Array_dimension       2000);
}

void loop()
{
  duration = pulseIn(pin, HIGH);
  if ((duration>600)&&(duration<1000)) {
    whole_array[array_pos] = 1;   
    array_pos++;
  }
  if ((duration>1200)&&(duration<4000)){
    whole_array[array_pos] = 0;   
    array_pos++;
  }
 
  if (array_pos>=_Whole_Data_length) {
        for (int valuepos=22;valuepos<=25;valuepos++) {
          bitWrite(tempten, bitpos, whole_array[valuepos]);
          bitpos++;
        }
        bitpos=0;

        for (int valuepos=26;valuepos<=29;valuepos++) {
          bitWrite(tempone, bitpos, whole_array[valuepos]);
          bitpos++;
        }
        bitpos=0;

        for (int valuepos=30;valuepos<=33;valuepos++) {
          bitWrite(tempcom, bitpos, whole_array[valuepos]);
          bitpos++;
        }
        bitpos=0;

        for (int valuepos=34;valuepos<=37;valuepos++) {
          bitWrite(humiten, bitpos, whole_array[valuepos]);
          bitpos++;
        }
        bitpos=0;       

        for (int valuepos=38;valuepos<=41;valuepos++) {
          bitWrite(humione, bitpos, whole_array[valuepos]);
          bitpos++;
        }
        bitpos=0;       

        Serial.print("Es sind ");   
        Serial.print(tempcom,DEC);   
        Serial.print(tempone,DEC);
        Serial.print(",");
        Serial.print(tempten,DEC);
        Serial.print(" Grad Celsius bei ");
        Serial.print(humione,DEC);   
        Serial.print(humiten,DEC);
        Serial.println(" Prozent Feutigkeit.");       
        array_pos=0;
  }
}


das hier im SM herausbekommen:

Code: [Select]

Give it to me...
Es sind 24,5 Grad Celsius bei 23 Prozent Feutigkeit.
Es sind 24,5 Grad Celsius bei 23 Prozent Feutigkeit.
Es sind 24,5 Grad Celsius bei 23 Prozent Feutigkeit.
Es sind 24,5 Grad Celsius bei 23 Prozent Feutigkeit.
Es sind 24,4 Grad Celsius bei 24 Prozent Feutigkeit.
Es sind 24,4 Grad Celsius bei 24 Prozent Feutigkeit.
Es sind 24,3 Grad Celsius bei 24 Prozent Feutigkeit.
Es sind 24,3 Grad Celsius bei 24 Prozent Feutigkeit.
Es sind 24,3 Grad Celsius bei 24 Prozent Feutigkeit.
Es sind 24,3 Grad Celsius bei 24 Prozent Feutigkeit.
Es sind 24,2 Grad Celsius bei 24 Prozent Feutigkeit.
Es sind 24,2 Grad Celsius bei 24 Prozent Feutigkeit.
Es sind 24,2 Grad Celsius bei 24 Prozent Feutigkeit.
Es sind 24,1 Grad Celsius bei 24 Prozent Feutigkeit.
Es sind 24,1 Grad Celsius bei 24 Prozent Feutigkeit.
Es sind 24,1 Grad Celsius bei 25 Prozent Feutigkeit.
Es sind 24,1 Grad Celsius bei 25 Prozent Feutigkeit.
Es sind 24,0 Grad Celsius bei 25 Prozent Feutigkeit.
Es sind 24,0 Grad Celsius bei 25 Prozent Feutigkeit.
Es sind 24,0 Grad Celsius bei 25 Prozent Feutigkeit.
Es sind 23,9 Grad Celsius bei 27 Prozent Feutigkeit.
Es sind 23,9 Grad Celsius bei 27 Prozent Feutigkeit.
Es sind 23,9 Grad Celsius bei 27 Prozent Feutigkeit.
Es sind 23,9 Grad Celsius bei 27 Prozent Feutigkeit.
Es sind 23,9 Grad Celsius bei 27 Prozent Feutigkeit.
Es sind 23,8 Grad Celsius bei 27 Prozent Feutigkeit.
Es sind 23,8 Grad Celsius bei 28 Prozent Feutigkeit.
Es sind 23,8 Grad Celsius bei 28 Prozent Feutigkeit.
Es sind 23,8 Grad Celsius bei 28 Prozent Feutigkeit.
Es sind 23,8 Grad Celsius bei 28 Prozent Feutigkeit.
Es sind 23,7 Grad Celsius bei 28 Prozent Feutigkeit.


Ich denke, da kann man nicht schimpfen :) Allerdings findet im Moment keinerlei Check auf Fehler statt. Klar bei dem Q'N'D Code oben  :D

Danke, danke, danke nochmal an Dich, Jomelo, für Deine Unterstützung!

Todo's sind noch:

- SD Card implementieren
- Ausgabe auf Display
- Fehlercheck / oder herausfinden, was die letzten 12 BIT nach Temp. und Feucht. bedeuten...
- Umwandelt von Bit in Dezimal in eine Funktion bauen.

volvodani

#16
Aug 04, 2011, 10:42 pm Last Edit: Aug 04, 2011, 11:15 pm by volvodani Reason: 1
Darf ich hier auch mal 2 BCD=>DEC und DEC=>BCD reinwerfen

Und bei der FEUTIGKEIT sollte man aufpassen das die Brille nicht beschlägt und man evtl ein paar Bucstabn vergisst  ;)

Code: [Select]
byte decToBcd(byte val)
{
 return ((val/10)<<4)+(val%10);
}

// Convert binary coded decimal to normal decimal numbers
byte bcdToDec(byte val)
{
 return ((val>>4)*10)+val%16;
}
So ist das Leben:
Manchmal bis du das Denkmal, manchmal die Taube!

DE8MSH

Sitz mal so einen Meter vom Bildschirm entfernt. Dann fehlen keine Buchstaben  :D  :D  :D

Und: danke für die Wandler. Werde ich mal testen. Aber nicht jetzt. Bin müde  :smiley-sleep:

Jomelo

Wenn du wieder was zum Rätseln hast, dann her damit ...   ;-)

volvodani

Hey DE8MSH,
haste mal ein paar Infos bezüglich deiner Hardware die du verwendest?

Bedankt
So ist das Leben:
Manchmal bis du das Denkmal, manchmal die Taube!

Go Up