Цитата:
Сообщение от OsDima
Ограничения на количество температурных датчиков есть? Насколь-ко понял в скейтче нет. Вероятно опять глючный датчик попался. 2-ой из 5-ти.
|
Попробуй использовать вот такую функцию обработки температурных датчиков. Та что в шапке сейчас иногда глючит, так что возможно причина не в датчиках
PHP код:
//-----------------------------------------
//- Переменные для температурных датчиков -
//-----------------------------------------
OneWire ds(WIRE_PIN);
byte addr[8];
byte data[12];
unsigned long temperature_sensors_milles;
unsigned long temperature_sensors_wait_milles = 1000; // Интервал передачи данных от температурных датчиков
int t_status = 0;
void temperature_sensors()
{
if(t_status == 0)
{
if (!ds.search(addr))
{ // поиск нового датчика
ds.reset_search(); // если не нашли, сбрасываем поиск в начало
return; // и выходим
}
// Часть кода, которая ниже, выполняется только если
// найден новый датчик, с которым ещё не работали в
// главном цикле до сброса поиска
if (OneWire::crc8( addr, 7) != addr[7]) // Проверка CRC
{
return; // Если не пройдена, то в начало главного цикла и продолжаем поиск других датчиков
}
if (addr[0] != 0x28) // Проверка того, что найденное устройство - температурный датчик DS18B20
{
return; // Если не он, то опять в начало главного цикла на продолжение поиска
}
ds.reset();
ds.select(addr);
ds.write(0x44,1);
t_status = 1;
}
else
{
if( temperature_sensors_milles + temperature_sensors_wait_milles < millis() )
{
temperature_sensors_milles = millis();
byte i;
ds.reset();
ds.select(addr);
ds.write(0xBE);
for ( i = 0; i < 9; i++) // получаем данные с датчика
{
data[i] = ds.read();
}
bytes[0] = 0xFF; bytes[1] = 0xFF; bytes[2] = 0xFF; bytes[3] = 0xFF;
Serial.write( bytes,4); // отправить 0xFFFFFFFF - код температурного датчика
Serial.write( addr,8); // отправить 8 байтовый номер температурного датчика
bytes[0] = 0; // отправляем байты содержащие температуру
bytes[1] = 0;
bytes[2] = data[0];
bytes[3] = data[1];
Serial.write( bytes,4); // значение температурного датчика
t_status = 0;
}
}
}