Go Down

Topic: 1-wire sensor adres array (Read 2466 times) previous topic - next topic

747driver

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:

Code: [Select]
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:

Code: [Select]
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("  ");

septillion

#1
Oct 20, 2019, 03:15 pm Last Edit: Oct 22, 2019, 11:47 am by septillion
Hoi,

Knippen en plakken is nooit een heel goed uitgangspunt voor het schrijven van code. Beter is het om het te begrijpen en dan zelf te doen.

Wil je verder onze hulp is het denk ik nodig om alle code die je nu hebt te plaatsen samen met een probleemomschrijving.

Overigens als ik naar het "probleem" kijk heb je grofweg drie onderdelen:
- Het lezen van alle sensoren
- Het bijhouden wanneer de boel te verzenden
- Het verzenden via UDP.
Use fricking code tags!!!!
I want x => I would like x, I need help => I would like help, Need fast => Go and pay someone to do the job...

NEW Library to make fading leds a piece of cake
https://github.com/septillion-git/FadeLed

septillion

#2
Oct 20, 2019, 07:32 pm Last Edit: Oct 20, 2019, 07:34 pm by septillion
Ah, en niet netjes om te cross-posten :( Niet helemaal hetzelfde maar toch twee draadjes over hetzelfde project.

https://forum.arduino.cc/index.php?topic=641712.0
Use fricking code tags!!!!
I want x => I would like x, I need help => I would like help, Need fast => Go and pay someone to do the job...

NEW Library to make fading leds a piece of cake
https://github.com/septillion-git/FadeLed

747driver

Wat het knippen en plakken betreft, dat valt eigenlijk best wel mee.
Een hoop is aangepast aan mijn specifieke behoefte.
Heb er vandaag weer een tijdje aan gewerkt.
Na het herschrijven van wat code heb ik het werkend gekregen.
Een soortgelijk programma heb ik al draaien op een Arduino boardje maar dat was voornamelijk geschreven in 8051 machine taal mbv Bascom-8051
Das een Windows programma en aangezien ik voornamelijk met OSX werk heeft de Arduino IDE m'n voorkeur gekregen.
Nu nog even fluent worden in de gebruikte taal...

Go Up