Здравствуйте, подключив 10 датчиков температуры DS18B20 контроллер считывал данные только с трех. Отключив эти три датчика у меня заработали другие 5 шт. Такое чувство что некоторые датчики перебивают сигнал других. В чем проблема, почему они работают не правильно?
Подключал так:
Вот код:
#include <OneWire.h> OneWire ds(12); // датчики на порте void setup(void) { Serial.begin(9600); pinMode(9, OUTPUT); } void loop(void) { byte i; byte present = 0; byte data[12]; byte addr[8]; int Temp; if ( !ds.search(addr)) { ds.reset_search(); return; } Serial.print("R="); //R=28 Not sure what this is for( i = 0; i < 8; i++) { Serial.print(addr[i], HEX); Serial.print(" "); sensor=sensor+addr[i]; } if ( OneWire::crc8( addr, 7) != addr[7]) { Serial.print("CRC is not valid!\n"); return; } if ( addr[0] != 0x28) { Serial.print("Device is not a DS18S20 family device.\n"); return; } ds.reset(); ds.select(addr); ds.write(0x44,1); // start conversion, with parasite power on at the end delay(5000); // maybe 750ms is enough, maybe not present = ds.reset(); ds.select(addr); ds.write(0xBE); // Read Scratchpad Serial.print("p="); Serial.print(present,HEX); Serial.print(" "); for ( i = 0; i < 9; i++) { // we need 9 bytes data[i] = ds.read(); Serial.print(data[i], HEX); Serial.print(" "); } Temp=(data[1]<<8)+data[0];//take the two bytes from the response relating to temperature Temp=Temp;//divide by 16 to get pure celcius readout Serial.print("T=");//output the temperature to serial port Serial.print(Temp/16); Serial.print("."); Serial.print(((Temp%16)*100)/16); Serial.print(" "); Serial.print(" CRC="); Serial.print( OneWire::crc8( data, 8), HEX); Serial.println(); }
3 комментария на «“Много датчиков температуры DS18B20”»
Интересно!!! Была потребность опрашивать 2 датчика ds18b20/ нашёл немного другой код в интернете. Выложу. Может и пригодится.
Да, появилось две проблемы я решил разделить на две темы.
Спасибо)) Такой код вообще не встречал…