Есть код, для получения температуры, в случае если пользуешься DuinOS:
Код:
#include <OneWire.h>
// Получаем температуру от датчиков серии DS18x20
// Поддерживаемые датчики
#define DS18S20_ID 0x10
#define DS18B20_ID 0x28
OneWire ds(12); // Линия 1-Wire будет на pin 12
void setup(void)
{
Serial.begin(115200);
}
void loop(void)
{
byte i;
byte present = 0;
byte data[12];
byte addr[8];
if (!ds.search(addr))
{
ds.reset_search();
return;
}
if (OneWire::crc8( addr, 7) != addr[7])
{
Serial.print("CRC is not valid!\n");
return;
}
if (addr[0] != DS18S20_ID && addr[0] != DS18B20_ID)
{
Serial.print("Device is not a DS18x20 family device.\n");
return;
}
ds.reset();
ds.select(addr);
// Запускаем конвертацию
ds.write(0x44, 1);
// Подождем...
delay(400);
present = ds.reset();
ds.select(addr);
// Считываем ОЗУ датчика
ds.write(0xBE);
// Обрабатываем 9 байт
for ( i = 0; i < 9; i++)
{
data[i] = ds.read();
}
// Высчитываем температуру :)
int HighByte, LowByte, TReading, Tc_100, SignBit, Whole, Fract;
LowByte = data[0];
HighByte = data[1];
TReading = (HighByte << 8) + LowByte;
// Проверяем дубак там или нет
SignBit = TReading & 0x8000;
// Если на улице дубак :)
if (SignBit)
{
TReading = (TReading ^ 0xffff) + 1;
}
// Умножаем на (100 * 0.0625) или 6.25
Tc_100 = (6 * TReading) + TReading / 4;
// Отделяем целые от дробных чисел
Whole = Tc_100 / 100;
Fract = Tc_100 % 100;
Serial.print("t1 ");
// Если на улице дубак напишем минус перед цифрами :)
if (SignBit)
{
Serial.print("-");
}
else
{
Serial.print("+");
}
Serial.print(Whole);
Serial.print(".");
if (Fract < 10)
{
Serial.print("0");
}
Serial.print(Fract);
Serial.println(" ,");
}
В этом коде температура выводится поочерёдно со всех датчиков. Как сделать так, чтоб перед выводом температуры какого либо датчика ставился идентификатор, например:
t1 "температура"
t2 "температура"
t3 "температура" ... и т.д.
----------------------------------
Вот в этом способе я понял как это сделать, но этот код неработает с использованием DuinOS.
Код:
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 12
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
float(t1);
float(t2);
float(t3);
void setup(void)
{
Serial.begin(115200);
sensors.begin();
}
void loop(void)
{
sensors.requestTemperatures();
delay(15);
//========= 1 ===================
t1 = sensors.getTempCByIndex(0);
Serial.print("t1 ");
if (t1 > 0)
{
Serial.print("+");
}
Serial.print(t1);
Serial.println(" ");
delay(40);
//========== 2 =================
t2 = sensors.getTempCByIndex(1);
Serial.print("t2 ");
if (t2 > 0)
{
Serial.print("+");
}
Serial.print(t2);
Serial.println(" ");
delay(40);
//========== 3 =================
t3 = sensors.getTempCByIndex(2);
Serial.print("t3 ");
if (t3 > 0)
{
Serial.print("+");
}
Serial.print(t3);
Serial.println(" ");
}