Показать сообщение отдельно
Старый 04.07.2013, 15:11   #488
Bersenev
Бывалый писикарщик
 
Аватар для Bersenev
 
Регистрация: 23.04.2009
Возраст: 53
Город: Ставрополь
Регион: 26
Машина: Opel Zafira 2007
Сообщений: 5,275
Bersenev has a brilliant futureBersenev has a brilliant futureBersenev has a brilliant futureBersenev has a brilliant futureBersenev has a brilliant futureBersenev has a brilliant futureBersenev has a brilliant futureBersenev has a brilliant futureBersenev has a brilliant futureBersenev has a brilliant futureBersenev has a brilliant future
По умолчанию

Цитата:
Сообщение от 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::crc8addr7) != 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 ( 
09i++) // получаем данные с датчика
      
{         
        
data[i] = ds.read();
      }
      
bytes[0] = 0xFFbytes[1] = 0xFFbytes[2] = 0xFFbytes[3] = 0xFF
      
Serial.writebytes,4); // отправить 0xFFFFFFFF - код температурного датчика
      
Serial.writeaddr,8); // отправить 8 байтовый номер температурного датчика 
      
bytes[0] = 0;          // отправляем байты содержащие температуру  
      
bytes[1] = 0;  
      
bytes[2] = data[0]; 
      
bytes[3] = data[1]; 
      
Serial.writebytes,4); // значение температурного датчика
      
t_status 0;
    } 
  }

Bersenev вне форума   Ответить с цитированием