Hallo ich bin neu hier im Forum und hoffe hier kann mir einer Helfen.
Ich habe ein kleines Problem mit der Temperaturmessung mit einem DS18B20.
Jedoch ist mein Programm für einen DS18S20 und nun bekomme ich einen CRC-Fehler. Da ich mich mit dem CRC noch nicht intensiv beschäftigt habe, weiß ich leider nicht wie ich diesen Fehler wieder weg bekomme. Auf meinem Display wird dann als Temperatur -1000 angezeigt.
Kann mir jemand sagen was es mit der CRC aufsicht hat bzw. wie ich den Fehler wieder wegbekomme.
//simple wireless temperature tranmitter
// DS18S20 sensor is connected to pin 8
// Rf modules tranmit (data) pin is connected to pin 7 on the arduino
#include <VirtualWire.h>
#include <OneWire.h>
int DS18S20_Pin = 8; //DS18S20 Signal pin on digital 8
OneWire ds(DS18S20_Pin); // on digital pin 8
char *controller;
char msg[6];
void setup()
{
Serial.begin(9600);
vw_set_ptt_inverted(true); //
vw_set_tx_pin(7);
vw_setup(500);// speed of data transfer Kbps
}
void loop()
{
float temperature = getTemp();
Serial.println(temperature);
dtostrf(temperature, 6, 2, msg);
digitalWrite(13,0);
vw_send((uint8_t *)msg, strlen(msg)); // Send temperature.
vw_wait_tx();
delay(750);
}
float getTemp()
{
//returns the temperature from one DS18S20 in DEG Celsius
byte data[12];
byte addr[8];
if ( !ds.search(addr)) {
//no more sensors on chain, reset search
ds.reset_search();
return -1000;
}
if ( OneWire::crc8( addr, 7) != addr[7]) {
Serial.println("CRC is not valid!");
return -1000;
}
if ( addr[0] != 0x10 && addr[0] != 0x28) {
Serial.print("Device is not recognized");
return -1000;
}
ds.reset();
ds.select(addr);
ds.write(0x44,1); // start conversion, with parasite power on at the end
byte present = ds.reset();
ds.select(addr);
ds.write(0xBE); // Read Scratchpad
for (int i = 0; i < 9; i++) { // we need 9 bytes
data[i] = ds.read();
}
ds.reset_search();
byte MSB = data[1];
byte LSB = data[0];
float tempRead = ((MSB << 8) | LSB); //using two's compliment
float TemperatureSum = tempRead / 16;
return TemperatureSum;
}