Hallo,
so Leute, habs doch noch drauf , lange hat's gedauert 
Jetzt möchte ich Euch mal etwas sinnvolles zurückgeben und nicht immer nur Fragen stellen. 
Ich hatte ja festgestellt, dass mich die Library immer hier und da mal mehr oder weniger ausbremst und wußte nicht so recht warum. Nach langen Kopfzerbrechen habe ich mir die beiden Bsp. "WaitForConversion" und WaitForConversion2" nochmal genauer angeschaut. Entweder wird ein festes delay verwendet oder es wird zuerst die Temperatur ausgelesen, dann ein Request angefordet und dann erst gewartet. Mein Ziel war es zuerst einen Request rauszugeben, dann die Temperatur auszulesen und das alles ohne blockierende loop Schleife.
Man muß nämlich 2 Sachen zwingend beachten, wie ich festgestellt habe. Man muß die lange Wartezeit, je nach Sensor und gewünschter Auflösung, zwischen Conversion Request und auslesen beachten und man muß dafür Sorge tragen das nach einem Request kein neuer Request erfolgt während man brav die Auslesezeit beachtet. Sonst bremst man sich wieder aus.
Jetzt bin ich bei einer Loopzeit zwischen 0 und 1ms. Egal ob gewartet wird oder der Sensor ein Befehl bekommt. Ich hoffe es ist sinnvoll kommentiert. Könnt ja mal drüberschauen und Kritik niederschreiben.
Dallas_WaitForConversion3_001.ino (3.79 KB)
Also machst du jetzt dass was ich dir schon die ganze Zeit gesagt habe 
Es gibt übrigens einen Unterschied zwischen "conversion" und "conversation" 
waitForConversion(false) kannst du in setup() machen wenn du nur diesen Modus verwendest. In dem Beispiel wird das nur danach wieder auf true gesetzt, da beide Modi nacheinander verwendet werden. Aber wenn es immer asynchron ist, reicht es da nur einmal zu machen. Ist schließlich eine globale Variable in der Klasse.
Ich mache es im Prinzip genauso (glaube ich). Zwei getrennte millis()-Abfragen einmal mit dem Intervall zwischen zwei Messungen und einmal die Zeit zwischen Anforderung und Auslesen:
bool readTemperatureSensors()
{
static unsigned long previousPollingMillis;
static unsigned long previousRequestMillis;
static bool dataRequested;
if(dataRequested == true && millis() - previousRequestMillis > 100)
{
temperatures[0] = sensors.getTempC(sensorList[0]);
temperatures[1] = sensors.getTempC(sensorList[1]);
dataRequested = false;
return true;
}
if(dataRequested == false && millis() - previousPollingMillis > POLLING_INTERVAL)
{
previousPollingMillis = millis();
sensors.requestTemperatures();
dataRequested = true;
previousRequestMillis = millis();
}
return false;
}
Das gibt dann true zurück wenn eine neue Temperatur ausgelesen wurde. Entsprechend dem kann ich dann die Temperatur auf das Display schreiben oder was anderes damit machen
Hallo,
upps, conversion != conversation 
Hab den Sketch korrigiert und waitForConversion(false) gleich mit.
Danke.
Ja, wir machen das jetzt nachdem gleichen Prinzip. Nur Du hast es schöner und kürzer verpackt mit Variablenübergabe bei Aufruf usw.
Jetz muß ich das getippte noch in meinen eigentlichen AllInOne Sketch einbauen. Mal sehen ob das reibungslos funktioniert.
Dallas_WaitForConversion3_001.ino (3.75 KB)