Помогите оптимизировать код и пару вопросов по 1-Ware..

Нет ответов
Mad Fun
Offline
Зарегистрирован: 19.11.2011

Написал программу, которая выводит информацию с 2-х датчиков температуры DALLAS 18B20 на экран WINSTAR.

Все работает, как и должно быть, но я чувствую, что у меня в коде много лишнего.. 

Я не до конца понимаю, как происходит опрос адресов датчиков и их выбор..

И как сбрасывать показания на дисплее?

Вот код

#include <OneWire.h>
#include <LiquidCrystal.h>

OneWire ds(10);

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup()
{
Serial.begin(9600);
lcd.begin(16, 2);
}

void loop()
{
byte i;
byte present = 0;
byte data[12]; // массив для хранения информации с датчика
byte addr[8]; // массив для хранения адреса датчика (или датчиков?)

if ( !ds.search(addr)) { // слабо понимаю этот момент?
ds.reset_search();
return;
}

ds.reset();
ds.select(addr); // выбираем датчик
ds.write(0x44,1); // запускаем конвертацию

delay(1000); // даем время, чтобы датчик сконвертировал температуру (min 750ms)

present = ds.reset();
ds.select(addr); // выбираем датчик
ds.write(0xBE); // считываем ОЗУ датчика
for ( i = 0; i < 9; i++) { // записываем 9 байт полученных с ОЗУ датчика
data[i] = ds.read();
}

// высчитываем температуру

int TempMSB, TempMSB2, TH, TL;
float T, TReading, TempLSB;
TempLSB = data[0];
TempMSB = data[1];
TH = data[2];
TL = data[3];
TempMSB2 = TempMSB << 4 ;
if (TempMSB2 > 1000) {
TempMSB2 = TempMSB2 - 3968;
TReading = TempMSB2 + TempLSB/16 - 128;
} else {
TReading = (TempMSB << 4) + TempLSB/16;
}
lcd.setCursor(0, 0);
lcd.print("Temp1 ");
lcd.print(TReading);
lcd.print(" C ");
lcd.setCursor(0, 1);

if ( !ds.search(addr)) {
ds.reset_search();
return;
}

ds.reset();
ds.select(addr);
ds.write(0x44,1);

delay(1000); 

present = ds.reset();
ds.select(addr);
ds.write(0xBE); 
for ( i = 0; i < 9; i++) {
data[i] = ds.read();
}

TempLSB = data[0];
TempMSB = data[1];
TH = data[2];
TL = data[3];
TempMSB2 = TempMSB << 4 ;
if (TempMSB2 > 1000) {
TempMSB2 = TempMSB2 - 3968;
TReading = TempMSB2 + TempLSB/16 - 128;
} else {
TReading = (TempMSB << 4) + TempLSB/16;
}
lcd.print("Temp2 ");
lcd.print(TReading);
lcd.print(" C ");
}