Ben bezig met een sketch met de volgende functie:
Zo'n 20 DS18B20 temperatuur sensoren inlezen en het adres en temperatuur waarde met UDP naar een server sturen.
Wanneer tussen 2 metingen de temperatuur van een sensor is gewijzigd deze versturen.
Wanneer een sensor 20 metingen achtereen dezelfde waarde heeft deze waarde toch versturen zodat minstens eens per ongeveer 15 seconden de waarde wordt verstuurd.
De verzonden data moet er zo uit zien: 28B29E1B000000CE=19.31
Een DS18B20 met adres 28B29E1B000000CE meet hier bv 19.31 graden.
Veel code is met copy/paste uit andere sketches gehaald.
Waar ik op stuk loop is het samenstellen van de te verzenden data welke dan met Udp.write(tempstring) kan worden verstuurd.
Code begint (na de includes) hiermee:
OneWire oneWire(2);
DallasTemperature temperatureSensors(&oneWire);
DeviceAddress sensorAddress[30];
De routine voor het versturen van de data:
void sendTempUDP()
{
sensorTimeCounter[sensorindex]=0; // Reset sensorTimeCounter
Udp.beginPacket(ip_receiver, receiverport);
String tempstring = sensorAddress[sensorindex];
Udp.write(tempstring); // no matching function for call.....
Udp.write("DS18B20 sensor "); // Lest's start with some text first...That works!
for (byte i = 0; i < 8; i++)
{
if (tempstring[i]<16) {Udp.print('0');}
Udp.print(tempstring[i], HEX);
}
Udp.endPacket();
}
Nu moet ik toegeven dat ik zelfs na een hoop zoekwerk niet weet op welk moment de adressen in een array worden gezet.
Is dat al tijdens het getDeviceCount commando of tijdens het getAddress commando?
Het printen van de adressen lukt me wel met deze code:
void printAddress(DeviceAddress sensorAddress) // function to print all sensor addresses
{
for (byte i = 0; i < 8; i++)
{
if (sensorAddress[i] < 16) Serial.print("0");
Serial.print(sensorAddress[i], HEX);
}
Serial.print(" ");