Ср июн 29, 2022 12:56:48
Ср июн 29, 2022 15:18:19
Ср июн 29, 2022 15:52:22
Ср июн 29, 2022 17:31:51
Чт июн 30, 2022 14:31:12
Пт июл 01, 2022 11:52:08
Пт июл 01, 2022 11:52:38
Пт июл 01, 2022 11:56:01
Пт июл 01, 2022 11:58:09
Пт июл 01, 2022 12:20:28
#include <OneWire.h>
bool EN_82749380_1;
unsigned long period_82749380_1;
float temp_82749380_1;
bool error_82749380_1;
OneWire ds_82749380_1(3);
byte data_82749380_1[9];
byte count_82749380_1;
bool brake_82749380_1;
bool crcOK_82749380_1;
unsigned long time_82749380_1;
unsigned long time_old_82749380_1;
bool EN_82749380_2;
unsigned long period_82749380_2;
float temp_82749380_2;
bool error_82749380_2;
OneWire ds_82749380_2(3);
byte data_82749380_2[9];
byte count_82749380_2;
bool brake_82749380_2;
bool crcOK_82749380_2;
unsigned long time_82749380_2;
unsigned long time_old_82749380_2;
unsigned long _stou1 = 0UL;
void setup()
{
_startUart0();
_stou1 = millis();
}
void loop()
{
//Плата:1
EN_82749380_1 = !(0);
period_82749380_1 = 1000UL;
if(EN_82749380_1)
{
if(error_82749380_1)
{
period_82749380_1 = 750;
}
// если ошибка - частый опрос
time_82749380_1 = millis() - time_old_82749380_1; // таймер опросов
if (time_82749380_1>period_82749380_1)
{
// таймер опросов
time_old_82749380_1 = millis(); // таймер опросов
ds_82749380_1.reset(); //сброс шины
ds_82749380_1.write(0xCC); //пропуск ROM
ds_82749380_1.write(0xBE); // прочитать 9 байт из датчика
for (byte i = 0; i < 9; i++)
{
// прочитать 9 байт из датчика
data_82749380_1[i] = ds_82749380_1.read();
}
// прочитать 9 байт из датчика
int16_t raw = (data_82749380_1[1] << 8) | data_82749380_1[0]; // прочитать 9 байт из датчика
temp_82749380_1 = (float)raw / 16.0; //посчитать температуру
if (OneWire::crc8(data_82749380_1, 8) == data_82749380_1[8])
{
crcOK_82749380_1=1;
}
//сверка контрольной суммы
else
{
crcOK_82749380_1=0;
count_82749380_1=0;
}
ds_82749380_1.reset(); //сброс шины
ds_82749380_1.write(0xCC); //пропуск ROM
ds_82749380_1.write(0x44, 1); //запуск измерения
if (((data_82749380_1[0] == 255) && (data_82749380_1[1] == 255) && (data_82749380_1[2] == 255) && (data_82749380_1[3] == 255) && (data_82749380_1[4] == 255) && (data_82749380_1[5] == 255) && (data_82749380_1[6] == 255) && (data_82749380_1[7] == 255) && (data_82749380_1[8] == 255)) || ((data_82749380_1[0] == 0) && (data_82749380_1[1] == 0) && (data_82749380_1[2] == 0) && (data_82749380_1[3] == 0) && (data_82749380_1[4] == 0) && (data_82749380_1[5] == 0) && (data_82749380_1[6] == 0) && (data_82749380_1[7] == 0) && (data_82749380_1[8] == 0)))
{
brake_82749380_1 = 1;
count_82749380_1 = 0;
}
else
{
brake_82749380_1 = 0;
}
if (count_82749380_1 < 4 && !brake_82749380_1 && crcOK_82749380_1)
{
// если нет обрыва и контрольная сумма правильная и меньше 3х замеров увеличить счётчик на 1
count_82749380_1++;
}
}
//конец __(time_82749380_1>period_82749380_1)__
}
// конец EN_82749380_1
error_82749380_1 = (brake_82749380_1 || (count_82749380_1 < 3) || !crcOK_82749380_1);
EN_82749380_2 = !(0);
period_82749380_2 = 1000UL;
if(EN_82749380_2)
{
if(error_82749380_2)
{
period_82749380_2 = 750;
}
// если ошибка - частый опрос
time_82749380_2 = millis() - time_old_82749380_2; // таймер опросов
if (time_82749380_2>period_82749380_2)
{
// таймер опросов
time_old_82749380_2 = millis(); // таймер опросов
ds_82749380_2.reset(); //сброс шины
ds_82749380_2.write(0xCC); //пропуск ROM
ds_82749380_2.write(0xBE); // прочитать 9 байт из датчика
for (byte i = 0; i < 9; i++)
{
// прочитать 9 байт из датчика
data_82749380_2[i] = ds_82749380_2.read();
}
// прочитать 9 байт из датчика
int16_t raw = (data_82749380_2[1] << 8) | data_82749380_2[0]; // прочитать 9 байт из датчика
temp_82749380_2 = (float)raw / 16.0; //посчитать температуру
if (OneWire::crc8(data_82749380_2, 8) == data_82749380_2[8])
{
crcOK_82749380_2=1;
}
//сверка контрольной суммы
else
{
crcOK_82749380_2=0;
count_82749380_2=0;
}
ds_82749380_2.reset(); //сброс шины
ds_82749380_2.write(0xCC); //пропуск ROM
ds_82749380_2.write(0x44, 1); //запуск измерения
if (((data_82749380_2[0] == 255) && (data_82749380_2[1] == 255) && (data_82749380_2[2] == 255) && (data_82749380_2[3] == 255) && (data_82749380_2[4] == 255) && (data_82749380_2[5] == 255) && (data_82749380_2[6] == 255) && (data_82749380_2[7] == 255) && (data_82749380_2[8] == 255)) || ((data_82749380_2[0] == 0) && (data_82749380_2[1] == 0) && (data_82749380_2[2] == 0) && (data_82749380_2[3] == 0) && (data_82749380_2[4] == 0) && (data_82749380_2[5] == 0) && (data_82749380_2[6] == 0) && (data_82749380_2[7] == 0) && (data_82749380_2[8] == 0)))
{
brake_82749380_2 = 1;
count_82749380_2 = 0;
}
else
{
brake_82749380_2 = 0;
}
if (count_82749380_2 < 4 && !brake_82749380_2 && crcOK_82749380_2)
{
// если нет обрыва и контрольная сумма правильная и меньше 3х замеров увеличить счётчик на 1
count_82749380_2++;
}
}
//конец __(time_82749380_2>period_82749380_2)__
}
// конец EN_82749380_2
error_82749380_2 = (brake_82749380_2 || (count_82749380_2 < 3) || !crcOK_82749380_2);
if (!(0))
{
if (_isTimer(_stou1, 1000))
{
Serial.println((((_floatToStringWitRaz(temp_82749380_1,2))) + (String(" // ")) + ((_floatToStringWitRaz(temp_82749380_2,2)))));
_stou1 = millis();
}
}
else
{
_stou1 = millis();
}
}
String _floatToStringWitRaz(float value, int raz)
{
return String(value,raz);
}
bool _isTimer(unsigned long startTime, unsigned long period)
{
unsigned long currentTime;
currentTime = millis();
if (currentTime>= startTime)
{
return (currentTime>=(startTime + period));
}
else
{
return (currentTime >=(4294967295-startTime+period));
}
}
void _startUart0()
{
int code= 6;
Serial.begin(9600, (_serialModeFromInt(code)));
}
int _serialModeFromInt(int code)
{
switch (code)
{
case 0x00: return SERIAL_5N1;
break;
case 0x02: return SERIAL_6N1;
break;
case 0x04: return SERIAL_7N1;
break;
case 0x06: return SERIAL_8N1;
break;
case 0x08: return SERIAL_5N2;
break;
case 0x0A: return SERIAL_6N2;
break;
case 0x0C: return SERIAL_7N2 ;
break;
case 0x0E: return SERIAL_8N2;
break;
case 0x20: return SERIAL_5E1;
break;
case 0x22: return SERIAL_6E1;
break;
case 0x24: return SERIAL_7E1 ;
break;
case 0x26: return SERIAL_8E1;
break;
case 0x28: return SERIAL_5E2 ;
break;
case 0x2A: return SERIAL_6E2;
break;
case 0x2C: return SERIAL_7E2;
break;
case 0x2E: return SERIAL_8E2;
break;
case 0x30: return SERIAL_5O1;
break;
case 0x32: return SERIAL_6O1;
break;
case 0x34: return SERIAL_7O1;
break;
case 0x36: return SERIAL_8O1;
break;
case 0x38: return SERIAL_5O2;
break;
case 0x3A: return SERIAL_6O2 ;
break;
case 0x3C: return SERIAL_7O2;
break;
case 0x3E: return SERIAL_8O2;
break;
}
return SERIAL_8N1;
}
Пт июл 01, 2022 13:15:36
ROM = 28 41 1D 98 A 0 0 5B
Chip = DS18B20
Data = 1 B4 1 4B 46 7F FF C 10 8E CRC=8E
Temperature = 27.25 Celsius, 81.05 Fahrenheit
----------
ROM = 28 3B 3A 98 A 0 0 A5
Chip = DS18B20
Data = 1 B5 1 4B 46 7F FF B 10 A3 CRC=A3
Temperature = 27.31 Celsius, 81.16 Fahrenheit
----------
No more addresses.
Ср июл 13, 2022 00:37:51