Dallas DS18B20 mit DUE

Hallo, hab ein kleines problem u zwar mit den Mega 2560 ging der code soweit aber mit den DUE komischerweise nicht. Wenns keine umstände macht würde mich freun wenn mal wer drüberschaun könnte,

PS: bin noch sehr im Anfängermodus.

#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 8
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

DeviceAddress boilerThermometer = { 0x28, 0xFE, 0xC7, 0xAA, 0x02, 0x00, 0x00, 0xF1 };     //http://www.hacktronics.com/Tutorials/arduino-1-wire-address-finder.html
DeviceAddress HeisgasThermometer = { 0x28, 0x89, 0x9E, 0xAA, 0x02, 0x00, 0x00, 0x8A };
DeviceAddress ATThermometer = { 0x28, 0x34, 0xA7, 0xAA, 0x02, 0x00, 0x00, 0xB0 };
DeviceAddress VlTempFbHeizung = { 0x28, 0xB7, 0x9B, 0xAA, 0x02, 0x00, 0x00, 0xA6 };
DeviceAddress VlTempRadiatoren = { 0x28, 0x78, 0xD8, 0xAA, 0x02, 0x00, 0x00, 0xBA };



void setup() {
  
Serial.begin(9600);

  sensors.begin();
  // set the resolution to 10 bit (good enough?)
  sensors.setResolution(boilerThermometer, 10);
  sensors.setResolution(HeisgasThermometer, 10);
  sensors.setResolution(ATThermometer, 10);
  sensors.setResolution(VlTempFbHeizung, 10);
  sensors.setResolution(VlTempRadiatoren, 10);
}


/////////////////////////////////////////////////////////////////////////////


void printTemperature(DeviceAddress deviceAddress)

    {
    float tempC = sensors.getTempC(deviceAddress);
    } 

//################

//SEKUNDENTAKT Abfrage fühlerwerte

unsigned long sekundenTakt()
// Funktion zählt im Sekundentakt hoch, liefert millis()/1000 zurück
// Achtung: Millis läuft nach ca. 50 Tagen über und fängt wieder bei 0 an.
{
  return millis()/1000;
}



boolean neueSekundeAngebrochen()
// Funktion liefert true zurück, wenn seit dem letzten Aufruf eine 
// neue Sekunde angebrochen ist, sonst false
{
  static unsigned long alteSekunde=4711; // beliebiger Wert ungleich 0 als Startwert
  unsigned long neueSekunde=sekundenTakt();
  if (neueSekunde==alteSekunde) return false;
  alteSekunde=neueSekunde;
  return true;


}


void loop() {

 
  
  unsigned long currentMillis = millis();
  currentmillis = millis();
      Serial.println(tempboiler); 


{ 
       if (neueSekundeAngebrochen())
  {
    if (sekundenTakt()%2 == 0)
    {
      sensors.requestTemperatures();
    }
    else   
    {
      float tempboiler = sensors.getTempC(boilerThermometer);        //  temperatur holen von motorThermometer
      float tempHeisgas = sensors.getTempC(HeisgasThermometer);
      float tempAT = sensors.getTempC(ATThermometer);
      float vlFbHeizung = sensors.getTempC(VlTempFbHeizung);
      float vlRadHeizung = sensors.getTempC(VlTempRadiatoren);      
    
        }
      }
    }
  }

Hallo,

ganz schlau wäre es zu beschreiben was beim DUE damit nicht geht. Compilerfehler oder einfach keine Funktion oder ... ? Beim flashen vom Mega auf DUE umgestellt haste?

You declared currentmillis and currentMillis ?? which one is the right one ?

do you print tempboiler before declaring.

(can you translate my answer in German please ? ich learne Deutsch :smiley: Danke)

Hallo,

Es kommt kein compilerfehler, Flashen lässt er mich und alles andere geht, nur die temperatur ist immer 0.00 , also keine Temp auslesung.

vohu: oops ja das eine currentmillis ist umsonst stimmt das hat keine funktion, stimmt hatte was vergessen --> behoben u jetzt gehts THX

float tempboiler = sensors.getTempC(boilerThermometer);
      Serial.println(tempboiler);

The neueSekundeAngebrochen function is vain since at each loop alteSekunde is 4711.

You have few chance that if (neueSekunde==alteSekunde) happens

test this code (not tested) :

#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 8
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

DeviceAddress boilerThermometer = { 
    0x28, 0xFE, 0xC7, 0xAA, 0x02, 0x00, 0x00, 0xF1 };     //http://www.hacktronics.com/Tutorials/arduino-1-wire-address-finder.html
DeviceAddress HeisgasThermometer = { 
    0x28, 0x89, 0x9E, 0xAA, 0x02, 0x00, 0x00, 0x8A };
DeviceAddress ATThermometer = { 
    0x28, 0x34, 0xA7, 0xAA, 0x02, 0x00, 0x00, 0xB0 };
DeviceAddress VlTempFbHeizung = { 
    0x28, 0xB7, 0x9B, 0xAA, 0x02, 0x00, 0x00, 0xA6 };
DeviceAddress VlTempRadiatoren = { 
    0x28, 0x78, 0xD8, 0xAA, 0x02, 0x00, 0x00, 0xBA };


unsigned long seconde = 0;
unsigned long milliref = millis(); 


void setup() {

    Serial.begin(9600);

    sensors.begin();
    // set the resolution to 10 bit (good enough?)
    sensors.setResolution(boilerThermometer, 10);
    sensors.setResolution(HeisgasThermometer, 10);
    sensors.setResolution(ATThermometer, 10);
    sensors.setResolution(VlTempFbHeizung, 10);
    sensors.setResolution(VlTempRadiatoren, 10);
}


/////////////////////////////////////////////////////////////////////////////


void printTemperature(DeviceAddress deviceAddress)

{
    float tempC = sensors.getTempC(deviceAddress);
} 

//################

unsigned long sekundenTakt()
{
    if (millis()>(milliref+1000)) { // if a second is past

        seconde=seconde+1; 
        milliref=milliref+1000;  
        Serial.println(seconde); 
    }
}

void loop() {
    sekundenTakt();
    
    if (seconde%2 == 0)
    {
        sensors.requestTemperatures();
        Serial.println("request temp");
    }
    else   
    {
        float tempboiler = sensors.getTempC(boilerThermometer);        //  temperatur holen von motorThermometer
        Serial.println(tempboiler); 

        float tempHeisgas = sensors.getTempC(HeisgasThermometer);
        float tempAT = sensors.getTempC(ATThermometer);
        float vlFbHeizung = sensors.getTempC(VlTempFbHeizung);
        float vlRadHeizung = sensors.getTempC(VlTempRadiatoren);      

    }

}