1

I am using 10 ds18b20 Temperature sensors using with "DS2482-100" I2C board and Arduino so when I am getting the output like this:- "ROM = 28 46 04 1F 0D 00 00 74 96014B467FFF0A100A 25.3 2699 Dc", so Instead of address I want to name it "Sensor-1", "Sensor-2" like that any tutorial or help would be appreciated.

  1. `* Arduino library for controlling DS2482-100 and DS2482-800 1-wire masters. Uses Wire library to communicate with DS2482 so be sure to call Wire.begin() before using the library. Quick example modeled after Onewire example: */

     #include <OneWire.h> #include <Wire.h> #include <DS2482.h> #include <DallasTemperature.h> DS2482 ds(0); //channels ds2482-800 is 0 to 7, DS2482-100 is just set 0 byte data[12]; //holding for onewire capture byte addr[8]; //1wire wire address and CRC long time_temp; uint8_t sensor1[8] = { 0x28, 0x00, 0xF9, 0x1E, 0x0D, 0x00, 0x00, 0x76 }; uint8_t sensor3[8] = { 0x28, 0x61, 0x64, 0x12, 0x3F, 0xFD, 0x80, 0xC6 }; void setup() { Wire.begin(); ds.reset(); pinMode(13, OUTPUT); // start serial port Serial.begin(57600); time_temp = millis(); } void loop() { //do search if ( !ds.wireSearch(addr)) { if(addr == sensor1) { Serial.print("sensor1"); }; Serial.print("No more addresses.\n"); ds.wireResetSearch(); return; } Serial.print("ROM ="); for ( int i = 0; i < 8; i++) { Serial.write(' '); if (addr[i] < 16) Serial.print("0"); Serial.print(addr[i], HEX); } if (ds.crc8(addr, 7) != addr[7]) { Serial.println("CRC is not valid!"); return; } //test if device code DS18b20 if (addr[0] == 0x28) { //read temperature data. ds.wireReset(); ds.selectChannel(0); ds.wireSelect(addr); ds.configure(0x05); //set bus on strong pull-up after next write until next command ds.wireWriteByte(0x44); //convert temperature on this device delay(770); //wait for conversion 750ms Plus margin ds.wireReset(); ds.selectChannel(0); ds.wireSelect(addr); ds.wireWriteByte(0xbe); // Read Scratchpad command //display hex values of scratchpad Serial.print(" "); for ( int i = 0; i < 9; i++) { data[i] = ds.wireReadByte(); if (data[i] < 16)Serial.print("0"); Serial.print(data[i], HEX); } Serial.print(" "); //convert to decimal temperature int LowByte = data[0]; int HighByte = data[1]; int TReading = (HighByte << 8) + LowByte; int SignBit = TReading & 0x8000; // test most sig bit if (SignBit) // negative { TReading = (TReading ^ 0xffff) + 1; // 2's comp } int Tc_100 = (double)TReading * 0.0625 * 10; if (SignBit) // If its negative { Tc_100 = 0 - Tc_100; } //print temp for each device Serial.print(Tc_100 / 10); Serial.print("."); Serial.print(Tc_100 % 10); Serial.print(" "); Serial.print(millis() - time_temp); Serial.println(" Dc"); } } 
3
  • You've almost done it - but you can't compare one array to another as you would compare two ints. Instead you have to compare them byte by byte and test that both byte[0]s match, both byte[1]s match, ..., etc until you reach the end of the arrays. Some languages support comparing or doing arithmetic and array transformations on an entire array with a single statement. C++ doesn't support that. Commented May 21, 2021 at 15:43
  • 1
    Like JRobert said, it's not a feature of the language. It is, however, available to you in a couple of ways on the ESP8266. The C library (and therefore C++) has memcmp(), which will compare sequences of bytes. The ESP8266 also comes with a fairly complete C++ standard library, including std::equal, which can be used to compare arrays of anything that supports ==. Commented May 21, 2021 at 17:17
  • Thanks a lot for the reply, I am trying it with 2 sensors,since I am new to this programming I am unable to write it correctly, and moreover I want to use it for 10 or more than 10 temperature sensors in that case is it possible to use memcmp(). Thank you Commented May 26, 2021 at 11:43

0

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.