DS18B20 temperatuur sensoren (4 stuks) "verwisselen" data

Beste mensen,

Ik gebruik 4 DS18B20 temperatuursensoren, OneWire.h en DallasTemperature.h library's op m'n Arduino Uno. Verder nog het LCD shield met I2C. (en plannen voor ethernet shield)

pull-up weerstand is 3K3 (proefondervindelijk: 5K1 werkt bij 1 en 2 sensoren, voor 3 of 4 blijkt lager (3k3) te voldoen. De voeding van sensoren is niet-parasitair, oftewel "normale" + en - voeding via aparte eigen 7805.

De data verzamel ik per sensor in een array om periodiek de gemiddelde waarde te bepalen.

sensors.requestTemperatures(); // Send the command to get temperatures
t1 = sensors.getTempCByIndex(0); // LED balk temperatuur (max 70C)
_ t2 = sensors.getTempCByIndex(1); // water temperatuur_
_ t3 = sensors.getTempCByIndex(2); // buiten temperatuur
t4 = sensors.getTempCByIndex(3); // lucht temperatuur aquarium kap
Probleem is dat de sensor waarden "verwisseld" worden. Het array laat die verwisseling fraai zien.
"Stabiel" is t1, index 0. Die geeft altijd en betrouwbaarde temperatuur van de led verlichtingsbalk. Die is ook de "heetste" van de 4. De andere temperaturen liggen doorgaans veel dichter bij elkaar.
Ik heb geëxperimenteerd met de sensor kabellengte, maar dat haalt niet veel uit. Ik vermoed dat als de sensoren "warm" worden, dat ze dan "sneller" reageren op de request, en dan een ander indexnr krijgen.
Welke suggesties kunnen jullie doen om een en ander stabiel te krijgen?_

sketch + schema zullen het gemakkelijker maken om hulp te geven.

Schema: moet nog eens kijken hoe ik plaatje upload, de sensoren "hangen" aan pin 13
Pull-up 3k3 tussen data(bus) en V+ (5V)

delen uit de sketch:

#include <OneWire.h>
#include <DallasTemperature.h>

#define ONE_WIRE_BUS 13 // Data wire pin 13

OneWire oneWire(ONE_WIRE_BUS);

DallasTemperature sensors(&oneWire);

void temperatuurBepalingen(){
// 4 temperatuur sensoren t1 tot en met t4
// gemiddelde waarde bepalen van .. metingen NB: arraysizeTempmetingen = 16
// error waarde -127 uitsluiten

float f_t1, f_t2, f_t3, f_t4;
float t1[arraysizeTempmetingen], t2[arraysizeTempmetingen], t3[arraysizeTempmetingen], t4[arraysizeTempmetingen]; // array's ten behoeve van gemiddelde temperatuur bepaling

float som_t1=0, som_t2=0, som_t3=0, som_t4=0;
int aantal_t1=0, aantal_t2=0, aantal_t3=0, aantal_t4=0;

for (int i=0; i<=arraysizeTempmetingen-1; i++){ // de 4 array's vullen met meetwaardes

sensors.requestTemperatures(); // Send the command to get temperatures
t1 = sensors.getTempCByIndex(0); // LED balk temperatuur (max 70C)
_ t2 = sensors.getTempCByIndex(1); // water temperatuur_
_ t3 = sensors.getTempCByIndex(2); // buiten temperatuur
t4 = sensors.getTempCByIndex(3); // lucht temperatuur aquarium kap
* } // einde vullen tem sensor array*
// debug:
Serial.print("t1Led :");
* for (int i=0; i<=arraysizeTempmetingen-1; i++){
Serial.print(" ");Serial.print(t1);_

} Serial.print(" -- Temp correctiefactor: "); Serial.print(correctie_LED/100);Serial.print(" PWM= ");Serial.println(LEDsterktebegrenzing_LED/100correctie_LED/100);
Serial.print("t2Water :");
_ for (int i=0; i<=arraysizeTempmetingen-1; i++){
Serial.print(" ");Serial.print(t2);
} Serial.println();
Serial.print("t3Buiten:");
for (int i=0; i<=arraysizeTempmetingen-1; i++){
Serial.print(" ");Serial.print(t3);
} Serial.println();
Serial.print("t4Kap :");
for (int i=0; i<=arraysizeTempmetingen-1; i++){
Serial.print(" ");Serial.print(t4);
} Serial.println(); Serial.println(); *_

// Uitlezen t1 waardes: LED balk temperatuur (max 70C)
* for (int i=0; i<=arraysizeTempmetingen-1; i++){*
if (t1_>=0 and t1*<=110){ // temp ledverlichtingsbalk tusen 0 en 110*
som_t1 = som_t1+t1*;
aantal_t1 = aantal_t1 + 1;*

* } // einde if*
* } // einde for*_

* if (som_t1!=0 and aantal_t1!=0){ // geldige waardes in array, niets te doen (=oude waarde behouden)
gem_t1 = som_t1/aantal_t1; // nieuwe gemiddelde waarde bepaald*

* // Else: geen geldige waardes in array, oude gemiddelde gem_t behouden*
* }*

* i_t1 = gem_t1 + 0,5; // afgeronde float integer ipv afgekapte float integer*
* // Uitlezen t2 waardes: )*
* for (int i=0; i<=arraysizeTempmetingen-1; i++){*
if (t2_>=-20 and t2*<=40){ // als temp tussen -20 en 40*
som_t2 = som_t2+t2*;
aantal_t2 = aantal_t2 + 1;*

* } // einde if*
* } // einde for*_

* if (som_t2!=0 and aantal_t2!=0){ // geldige waardes in array, niets te doen (=oude waarde behouden)
gem_t2 = som_t2/aantal_t2; // nieuwe gemiddelde waarde bepaald*

* // Else: geen geldige waardes in array, oude gemiddelde gem_t behouden*
* }*

* i_t2 = gem_t2 + 0,5; // afgeronde float integer ipv afgekapte float integer*
// Uitlezen t3 waardes: )
* for (int i=0; i<=arraysizeTempmetingen-1; i++){*
if (t3_>=5 and t3*<=50){ // temp kap tussen 5 en 50*
som_t3 = som_t3+t3*;
aantal_t3 = aantal_t3 + 1;*

* } // einde if*
* } // einde for*_

* if (som_t3!=0 and aantal_t3!=0){ // geldige waardes in array, niets te doen (=oude waarde behouden)
gem_t3 = som_t3/aantal_t3; // nieuwe gemiddelde waarde bepaald*

* // Else: geen geldige waardes in array, oude gemiddelde gem_t behouden*
* }*

* i_t3 = gem_t3 + 0,5; // afgeronde float integer ipv afgekapte float integer*
// Uitlezen t4 waardes: )
* for (int i=0; i<=arraysizeTempmetingen-1; i++){*
if (t4_>=10 and t4*<=36){ // watertemp tussen 10 en 36*
som_t4 = som_t4+t4*;
aantal_t4 = aantal_t4 + 1;*

* } // einde if*
* } // einde for*_

* if (som_t4!=0 and aantal_t4!=0){ // geldige waardes in array, niets te doen (=oude waarde behouden)
gem_t4 = som_t4/aantal_t4; // nieuwe gemiddelde waarde bepaald*

* // Else: geen geldige waardes in array, oude gemiddelde gem_t behouden*
* }*

* i_t4 = gem_t4 + 0,5; // afgeronde float integer ipv afgekapte float integer*
} // temperatuur bepaling

Is dat een uno? op pin 13 zit al een led

Het is inderdaad een UNO. Zou het zo simpel zijn...?

Pin 12 heb ik ook nog vrij. Ik ga het proberen. Ik zie dat ik pinmode van pin 13 ook niet gedefinieerd heb. Dus aan pin 12 met pinmode = INPUT is het testen meer dan waard :slight_smile:

Ik vraag me dan nog wel af hoe het mechanisme werkt dat het indexnr (0 tot en met 3) bepaalt?
afstand in de bus? wie het eerst komt-wie het eerst maalt?

Tenslotte: Ik zag dat ik de niet heb mee genomen in de for-lus. De code is dus als volgt:

  • for (int i=0; i<=arraysizeTempmetingen-1; i++){ // de 4 array's vullen met meetwaardes*

  • sensors.requestTemperatures(); // Send the command to get temperatures*
    _ t1 = sensors.getTempCByIndex(0); // LED balk temperatuur (max 70C)_
    _ t2 = sensors.getTempCByIndex(1); // water temperatuur
    t3 = sensors.getTempCByIndex(2); // buiten temperatuur
    t4 = sensors.getTempCByIndex(3); // lucht temperatuur aquarium kap
    * } // einde vullen tem sensor array*
    Bedankt voor de tip! Ik ga er morgen mee aan de slag.
    Hopelijk wordt het er stabiel door._

de [] zijn weer niet mee gekomen bij t1 etc.... nn het cursieve gedeelte.. vreemd.

Nee hoor, dat is helemaal niet vreemd.

Je word daarvoor gewaarschuwd in de gebruiksaanwijzing van dit forum (klik !), inclusief hoe je dit wel correct op het forum kunt plaatsen.

Dank je voor de tip, ik heb het gelezen!

Was even zoeken maar in de Engelstalige versie staat "alles" wat ik weten moet over het gebruik van dit forum. Inclusief de code tags. (en plaatjes etc.)

  for (int i=0; i<=arraysizeTempmetingen-1; i++){ // de 4 array's vullen met meetwaardes
  
    sensors.requestTemperatures(); // Send the command to get temperatures
    t1[i] = sensors.getTempCByIndex(0); // LED balk temperatuur (max 70C)
    t2[i] = sensors.getTempCByIndex(1); // water temperatuur
    t3[i] = sensors.getTempCByIndex(2); // buiten temperatuur
    t4[i] = sensors.getTempCByIndex(3); // lucht temperatuur aquarium kap
  } // einde vullen tem sensor array

Ik ga aan de slag met de tip om andere pin te gebruiken. (12 in plaats van 13)

Zodra ik resultaat heb kom ik (gedetailleerder) terug.

volgens mij wordt de adressering willekeurig bepaald, is het niet gewoon het makkelijkste om de teksten aan te passen aan de sensoren? even je hand er op dan weet je welke waar zit..

er zit toch een serienummer in elke sensor, en die blijft vast, dus dan kun je toch die gebruiken als je opnieuw start.

je hebt gelijk shooter. het is al weer even geleden dat ik er mee gestoeid heb.. hier een stukje uit de datasheet:

Example of a ROM Search
The ROM search process is the repetition of a simple three-step routine: read a bit, read the complement
of the bit, then write the desired value of that bit. The bus master performs this simple, three-step routine
on each bit of the ROM. After one complete pass, the bus master knows the contents of the ROM in one
device. The remaining number of devices and their ROM codes may be identified by additional passes.
The following example of the ROM search process assumes four different devices are connected to the
same 1-Wire bus. The ROM data of the four devices is as shown:
ROM1 00110101...
ROM2 10101010...
ROM3 11110101...
ROM4 00010001...
The search process is as follows:

  1. The bus master begins the initialization sequence by issuing a reset pulse. The slave devices respond
    by issuing simultaneous presence pulses.
  2. The bus master will then issue the Search ROM command on the 1-Wire bus.
  3. The bus master reads a bit from the 1-Wire bus. Each device will respond by placing the value of the
    first bit of their respective ROM data onto the 1-Wire bus. ROM1 and ROM4 will place a 0 onto the
    1-Wire bus, i.e., pull it low. ROM2 and ROM3 will place a 1 onto the 1-Wire bus by allowing the
    line to stay high. The result is the logical AND of all devices on the line, therefore the bus master
    sees a 0. The bus master reads another bit. Since the Search ROM data command is being executed,
    all of the devices on the 1-Wire bus respond to this second read by placing the complement of the first
    bit of their respective ROM data onto the 1-Wire bus. ROM1 and ROM4 will place a 1 onto the
    1-Wire, allowing the line to stay high. ROM2 and ROM3 will place a 0 onto the 1-Wire, thus it will
    be pulled low. The bus master again observes a 0 for the complement of the first ROM data bit. The
    bus master has determined that there are some devices on the 1-Wire bus that have a 0 in the first
    position and others that have a 1.
    The data obtained from the two reads of the three-step routine have the following interpretations:
    00 There are still devices attached which have conflicting bits in this position.
    01 All devices still coupled have a 0-bit in this bit position.
    10 All devices still coupled have a 1-bit in this bit position.
    11 There are no devices attached to the 1-Wire bus.
  4. The bus master writes a 0. This deselects ROM2 and ROM3 for the remainder of this search pass,
    leaving only ROM1 and ROM4 connected to the 1-Wire bus.
  5. The bus master performs two more reads and receives a 0-bit followed by a 1-bit. This indicates that
    all devices still coupled to the bus have 0s as their second ROM data bit.
  6. The bus master then writes a 0 to keep both ROM1 and ROM4 coupled.
  7. The bus master executes two reads and receives two 0-bits. This indicates that both 1-bits and 0-bits
    exist as the 3rd bit of the ROM data of the attached devices.
    DS18B20
    13 of 27
  8. The bus master writes a 0-bit. This deselects ROM1, leaving ROM4 as the only device still
    connected.
  9. The bus master reads the remainder of the ROM bits for ROM4 and continues to access the part if
    desired. This completes the first pass and uniquely identifies one part on the 1-Wire bus.
  10. The bus master starts a new ROM search sequence by repeating steps 1 through 7.
  11. The bus master writes a 1-bit. This decouples ROM4, leaving only ROM1 still coupled.
  12. The bus master reads the remainder of the ROM bits for ROM1 and communicates to the underlying
    logic if desired. This completes the second ROM search pass, in which another of the ROMs was
    found.
  13. The bus master starts a new ROM search by repeating steps 1 through 3.
  14. The bus master writes a 1-bit. This deselects ROM1 and ROM4 for the remainder of this search pass,
    leaving only ROM2 and ROM3 coupled to the system.
  15. The bus master executes two Read time slots and receives two 0s.
  16. The bus master writes a 0-bit. This decouples ROM3 leaving only ROM2.
  17. The bus master reads the remainder of the ROM bits for ROM2 and communicates to the underlying
    logic if desired. This completes the third ROM search pass, in which another of the ROMs was
    found.
  18. The bus master starts a new ROM search by repeating steps 13 through 15.
  19. The bus master writes a 1-bit. This decouples ROM2, leaving only ROM3.
  20. The bus master reads the remainder of the ROM bits for ROM3 and communicates to the underlying
    logic if desired. This completes the fourth ROM search pass, in which another of the ROMs was
    found.
    NOTE:
    The bus master learns the unique ID number (ROM data pattern) of one 1-Wire device on each ROM
    Search operation. The time required to derive the part’s unique ROM code is:
    960 µs + (8 + 3 x 64) 61 µs = 13.16 ms
    The bus master is therefore capable of identifying 75 different 1-Wire devices per second.

@Jazeker en @shooter: bedankt voor de info! Het wordt nog wel een hele puzzel voor me, maar het begin van de oplosrichting is duidelijk: identificeren van de sensor aan de hand van id/serienummers. En die dan configureren/instellen op het lcd schermpje of iets dergelijks.

Hoe die toewijzing of herkenning van de sensor verloopt daar probeer ik met de info van jullie uit te komen. Blijft wel nog over het "verwissel" probleem: Ik lees de waardes per sensor in een array, 20 metingen per sensor, en haal daar onzinnige waardes uit. bepaal dan de gemiddelde waarde. Ik had alleen -127 als onzinnige waarde verwacht, maar ik zie andere incidentele "missers": de led verlichting temperatuurloopt bijvoorbeeld op naar 70 graden. Niet verder omdat dan de pwm van de led "omlaag" gaat. In het array voor led temperatuur komen keurige verwachte waardes voor, maar ook incidenteel/onvoorspelbaar waardes die veel te laag zijn. Waardes die goed passen bij de buitentemperatuur of de water temperatuur. Die extremen zijn er wel weer uit te filteren, maar voor het uitfilteren van dubieuze waardes van de lichtkap, water en buitentemperatuur is dat veel moeilijker: die liggen veel dichter bij elkaar. Dus zijn ze moeilijk of niet te herkennen en weg te filteren. En bovendien: dat zou lapwerk zijn, geen structurele oplossing. Die -127 waarde: dat begrijp ik, daarom wil ik die weg filteren. Doe andere "missers" begrijp ik niet. Dus alleen maar weg filteren is te kort door de bocht, als het al zou lukken.

Mijn "probleem" was/is dat ik graag begrijp het toewijzing mechanisme werkt en ook een praktisch "probleem" dat ik 4 aquaria heb en dus 4 controllers wil gaan maken. Op dit moment het ik 2 van de 4 voorzien van zo'n controller.
Ik wilde niet voor elke controller een aparte software versie maken. Dus "proefondervindelijk" de sensor bepalen en programmeren viel af. Maar ook als ik met een id\serienummer ga werken, dan zijn die voor elk van de controllers verschillend. Dus moet ik dat configureren. Maar dat zou in de "oude" oplossing ook al kunnen: lcd menuutje maken om de 4 sensoren aan een taak te koppelen. Of dat dan handiger gaat met dat serienummer is nog maar de vraag.

Ik ga studeren en nadenken en het beter proberen te begrijpen allemaal. Dank voor jullie input!

Hier staat het allemaal uitgelegd: Arduino 1-Wire Address Finder

de data komen achter elkaar binnen, en je hoeft alleen maar de adres data van vorige meting te zoeken, en daar zet je dan de nieuwe waarde bij.
zie het voorbeeld met meerdere sensoren.

Ik heb het multi sensor voorbeeld geprobeerd te begrijpen. Dit heb ik er van gemaakt voor 3 fysieke sensoren:

#include <OneWire.h>
#include <DallasTemperature.h>

// Data wire is plugged into port 13 on the Arduino
#define ONE_WIRE_BUS 11
#define TEMPERATURE_PRECISION 12 // 9-12 bit resolutie

// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire myOneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature. 
DallasTemperature sensors(&myOneWire);

// arrays to hold device addresses
DeviceAddress ledThermometer, waterThermometer, buitenThermometer, thermo4;

void setup(void)
{
  // start serial port
  Serial.begin(9600);
  Serial.println("Dallas Temperature IC Control Library Demo");

  // Start up the library
  sensors.begin();

  // locate devices on the bus
  Serial.print("Locating devices...");
  Serial.print("Found ");
  Serial.print(sensors.getDeviceCount(), DEC);
  Serial.println(" devices.");

  // report parasite power requirements
  Serial.print("Parasite power is: "); 
  if (sensors.isParasitePowerMode()) Serial.println("ON");
  else Serial.println("OFF");

  // assign address manually.  the addresses below will need to be changed
  // to valid device addresses on your bus.  device address can be retrieved
  // by using either oneWire.search(deviceAddress) or individually via
  // sensors.getAddress(deviceAddress, index)
  // insideThermometer = { 0x28, 0x1D, 0x39, 0x31, 0x2, 0x0, 0x0, 0xF0 };
  // outsideThermometer   = { 0x28, 0x3F, 0x1C, 0x31, 0x2, 0x0, 0x0, 0x2 };

  //DeviceAddress ledThermometer   =   { 0x28, 0xFC, 0xB3, 0x46, 0x92, 0x3,  0x2, 0x77 }; //Device 0 Address: 28FCB34692030277
  
  DeviceAddress(ledThermometer)   =   { 0x28, 0xFC, 0xB3, 0x46, 0x92, 0x3,  0x2, 0x77 }; //Device 0 Address: 28FCB34692030277
  DeviceAddress(waterThermometer) =   { 0x28, 0x42, 0xEF, 0x46, 0x92, 0x15, 0x2, 0x91  };
  DeviceAddress(buitenThermometer)=   { 0x28, 0xEB, 0xDD, 0x46, 0x92, 0x15, 0x2, 0x5C  };
  DeviceAddress(thermo4)=   { 0x28, 0x1D, 0x39, 0x31, 0x2, 0x0, 0x0, 0xF0  }; // fake adres
  

  // search for devices on the bus and assign based on an index.  ideally,
  // you would do this to initially discover addresses on the bus and then 
  // use those addresses and manually assign them (see above) once you know 
  // the devices on your bus (and assuming they don't change).
  // 
  // method 1: by index
  //if (!sensors.getAddress(ledThermometer, 0)) Serial.println("Unable to find address for Device 0"); 
  //if (!sensors.getAddress(waterThermometer, 1)) Serial.println("Unable to find address for Device 1"); 

  //if (!sensors.getAddress(buitenThermometer, 2)) Serial.println("Unable to find address for Device 2"); 
  //if (!sensors.getAddress(thermo4, 3)) Serial.println("Unable to find address for Device 3"); 

  // method 2: search()
  // search() looks for the next device. Returns 1 if a new address has been
  // returned. A zero might mean that the bus is shorted, there are no devices, 
  // or you have already retrieved all of them.  It might be a good idea to 
  // check the CRC to make sure you didn't get garbage.  The order is 
  // deterministic. You will always get the same devices in the same order
  //
  // Must be called before search()
  myOneWire.reset_search();
  // assigns the first address found to ledThermometer
  if (!myOneWire.search(ledThermometer)) Serial.println("Unable to find address for ledThermometer");
  // assigns the seconds address found to waterThermometer
  
  if (!myOneWire.search(waterThermometer)) Serial.println("Unable to find address for waterThermometer");

  if (!myOneWire.search(buitenThermometer)) Serial.println("Unable to find address for buitenThermometer");

  if (!myOneWire.search(thermo4)) Serial.println("Unable to find address for thermo4");

  // show the addresses we found on the bus
  Serial.print("1e gevonden device Address: ");
  printAddress(ledThermometer);
  Serial.println();

  Serial.print("2e gevonden device Address: ");
  printAddress(waterThermometer);
  Serial.println();

  Serial.print("3e gevonden device Address: ");
  printAddress(buitenThermometer);
  Serial.println();

  Serial.print("4e gevonden device Address: "); // deze bestaat fysiek niet
  printAddress(thermo4);
  Serial.println();


  // set the resolution
  sensors.setResolution(ledThermometer, TEMPERATURE_PRECISION);
  sensors.setResolution(waterThermometer, TEMPERATURE_PRECISION);
  sensors.setResolution(buitenThermometer, TEMPERATURE_PRECISION);
  sensors.setResolution(thermo4, TEMPERATURE_PRECISION);


  Serial.print("Device 0 Resolution: ");
  Serial.print(sensors.getResolution(ledThermometer), DEC); 
  Serial.println();

  Serial.print("Device 1 Resolution: ");
  Serial.print(sensors.getResolution(waterThermometer), DEC); 
  Serial.println();

  Serial.print("Device 2 Resolution: ");
  Serial.print(sensors.getResolution(buitenThermometer), DEC); 
  Serial.println();

  
  Serial.print("Device 3 Resolution: ");
  Serial.print(sensors.getResolution(thermo4), DEC); 
  Serial.println();
  
}

// function to print a device address
void printAddress(DeviceAddress deviceAddress)
{
  for (uint8_t i = 0; i < 8; i++)
  {
    // zero pad the address if necessary
    if (deviceAddress[i] < 16) Serial.print("0");
    Serial.print(deviceAddress[i], HEX);
  }
}

// function to print the temperature for a device
void printTemperature(DeviceAddress deviceAddress)
{
  float tempC = sensors.getTempC(deviceAddress);
  Serial.print("Temp C: ");
  Serial.print(tempC);
  //Serial.print(" Temp F: ");
  //Serial.print(DallasTemperature::toFahrenheit(tempC));
}

// function to print a device's resolution
void printResolution(DeviceAddress deviceAddress)
{
  Serial.print("Resolution: ");
  Serial.print(sensors.getResolution(deviceAddress));
  Serial.println();    
}

// main function to print information about a device
void printData(DeviceAddress deviceAddress)
{
  Serial.print("Device Address: ");
  printAddress(deviceAddress);
  Serial.print(" ");
  printTemperature(deviceAddress);
  Serial.println();
}

void loop(void)
{ 
  myOneWire.reset_search();

  // call sensors.requestTemperatures() to issue a global temperature 
  // request to all devices on the bus
  Serial.print("Requesting temperatures...");
  sensors.requestTemperatures();
  Serial.println("DONE");

  // print the device information
  printData(ledThermometer);
  printData(waterThermometer);
  printData(buitenThermometer);
  printData(thermo4);
}

thermo4 bestaat fysiek niet.

Dit levert de volgende output in de serial monitor:

Dallas Temperature IC Control Library Demo
Locating devices...Found 3 devices.
Parasite power is: OFF
Unable to find address for thermo4
1e gevonden device Address: 28FCB34692030277
2e gevonden device Address: 2842EF4692150291
3e gevonden device Address: 28EBDD469215025C
4e gevonden device Address: 28EBDD469215025C
Device 0 Resolution: 12
Device 1 Resolution: 12
Device 2 Resolution: 12
Device 3 Resolution: 12
Requesting temperatures...DONE
Device Address: 0000000000000000 Temp C: -127.00
Device Address: 0000000000000000 Temp C: -127.00
Device Address: 0000000000000000 Temp C: -127.00
Device Address: 0000000000000000 Temp C: -127.00
Requesting temperatures...DONE
Device Address: 0000000000000000 Temp C: -127.00
Device Address: 0000000000000000 Temp C: -127.00
Device Address: 0000000000000000 Temp C: -127.00
Device Address: 0000000000000000 Temp C: -127.00
Requesting temperatures...DONE

Inderdaad: 3 gevonden: klopt
unable to find adres 4: dat klopt. Die 4e is er niet.
4e adres = identiek aan 3e adres, dat klopt niet.. waarom wordt waarde 3e adres hier getoond?

1e 3 adressen in de serial monitor kloppen neem ik aan: die heb ik in de code opgenomen, maar deed ik dat goed? Ik betwijfel het.

De loop werk ook helemaal niet :confused:

Het begint een beetje trial and error te worden voor me. Als ik het originele voorbeeld draai, zonder dat ik "mijn" adreswaardes verwerk in de code: dan geeft de loop wel keurige sensor waardes weer.. schiet mij maar lek.

Wat ik uiteindelijk graag zou willen: van de sensoren die ik heb het serienummer\adres bepalen. Labeltje aan de sensor met het adres. Sensoren monteren, In de sketch wil ik dan sensor(adres) "koppelen" aan de juiste van de 4 meetfuncties.

jij zegt zelf dat je er 4 print, maar als deze niet gevonden is dan blijft de device address wel staan natuurlijk.