Skip to content
Toggle navigation
Projects
Groups
Snippets
Help
Дмитрий Решетей
/
OREGON
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
1
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit 99744fd2
authored
Mar 05, 2020
by
Дмитрий Решетей
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Editet BATTERY FLAG separated PCR and WRT sensor. Correct output data from PCR sensor
1 parent
3a75f630
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
90 additions
and
92 deletions
libraries/Oregon_NR-master/Oregon_NR.cpp
wifi_reciver/wifi_reciver.ino
libraries/Oregon_NR-master/Oregon_NR.cpp
View file @
99744fd
...
...
@@ -91,13 +91,13 @@ void receiver_interruption(void) {
#endif
if
(
digitalRead
(
RECEIVER_PIN
)){
//
Íà÷àëî èìïóëüñà
//
Начало импульса
pl
=
0
;
pm
=
micros
();
}
else
{
//
Êîíåö èìïóëüñà
//
Âû÷èñëÿåòñÿ âðåìÿ îêîí÷àíèÿ è äëèíà
//
Конец импульса
//
Вычисляется время окончания и длина
pl
=
micros
()
-
pm
;
//pm += pl;
}
...
...
@@ -110,7 +110,7 @@ Oregon_NR::Oregon_NR(byte MHZ, byte MHZ_INT)
{
INT_NO
=
MHZ_INT
;
RECEIVER_PIN
=
MHZ
;
pinMode
(
MHZ
,
INPUT
);
//
Âûâîä, íà êîòîðûé ïîäêëþ÷¸í ïðè¸ìíèê
pinMode
(
MHZ
,
INPUT
);
//
Вывод, на который подключён приёмник
}
Oregon_NR
::
Oregon_NR
(
byte
MHZ
,
byte
MHZ_INT
,
byte
led
,
bool
pull_up
)
...
...
@@ -119,8 +119,8 @@ Oregon_NR::Oregon_NR(byte MHZ, byte MHZ_INT, byte led, bool pull_up)
LED
=
led
;
PULL_UP
=
pull_up
;
RECEIVER_PIN
=
MHZ
;
pinMode
(
MHZ
,
INPUT
);
//
Âûâîä, íà êîòîðûé ïîäêëþ÷¸í ïðè¸ìíèê
pinMode
(
LED
,
OUTPUT
);
//
Âûâîä ñâåòîäèîäà
pinMode
(
MHZ
,
INPUT
);
//
Вывод, на который подключён приёмник
pinMode
(
LED
,
OUTPUT
);
//
Вывод светодиода
}
//////////////////////////////////////////////////////////////////////
...
...
@@ -139,14 +139,14 @@ void Oregon_NR::stop()
detachInterrupt
(
INT_NO
);
}
//////////////////////////////////////////////////////////////////////
//
Çàõâàò è àíàëèç ïàêåòà
//DEBUG_INFO -
â Serial âûâîäèòñÿ èíôîðìàöèÿ î çàõâàòå äàííûõ
//
Захват и анализ пакета
//DEBUG_INFO -
в Serial выводится информация о захвате данных
//////////////////////////////////////////////////////////////////////
void
Oregon_NR
::
capture
(
bool
DEBUG_INFO
)
{
////////////////////////////////////////////////////////
// Âîçâðàùàåìñÿ ê èñõîäíîìó ñîñòîÿíèþ
//maybe_packet = 0;
////////////////////////////////////////////////////////
// Возвращаемся к исходному состоянию
//maybe_packet = 0;
packets_received
=
0
;
sens_type
=
0
;
crc_c
=
0
;
...
...
@@ -156,7 +156,7 @@ void Oregon_NR::capture(bool DEBUG_INFO)
////////////////////////////////////////////////////////
//
×òåíèå äàííûõ ñ ïðè¸ìíèêà
//
Чтение данных с приёмника
noInterrupts
();
pulse_length
=
pl
;
pl
=
0
;
...
...
@@ -164,15 +164,15 @@ void Oregon_NR::capture(bool DEBUG_INFO)
interrupts
();
////////////////////////////////////////////////////////
//
Ïðèø¸ë èìïóëüñ
//
Пришёл импульс
if
(
pulse_length
!=
0
&&
receive_status
==
FIND_PACKET
){
//
Åñëè èìïóëüñ ïðèø¸ë ñëèøêîì ïîçäíî äëÿ êîíêðåòíîé âåðñèè ïðîòîêîëà, òî ýòî ïåðâûé èìïóëüñ
//
Если импульс пришёл слишком поздно для конкретной версии протокола, то это первый импульс
if
(
pulse_marker
-
pre_marker
>
(
PER_LENGTH2
*
2
+
LENGTH_TOLERANCE
)
&&
ver
==
2
)
start_pulse_cnt
=
0
;
if
(
pulse_marker
-
pre_marker
>
(
PER_LENGTH3
*
2
+
LENGTH_TOLERANCE
)
&&
ver
==
3
)
start_pulse_cnt
=
0
;
if
(
start_pulse_cnt
==
0
){
////////////////////////////////////////////////////////
//
Íàéäåíà ïåðâûé "ïðàâèëüíûé" èìïóëüñ - îïðåäåëÿåì òèï ïðîòîêîëà
//
Найдена первый "правильный" импульс - определяем тип протокола
if
(
pulse_length
<
(
MAX_LENGTH2
+
LENGTH_TOLERANCE
)
&&
pulse_length
>
(
MIN_LENGTH2
-
LENGTH_TOLERANCE
)
&&
catch2
)
{
start_pulse_cnt
++
;
pre_marker
=
pulse_marker
;
...
...
@@ -189,7 +189,7 @@ void Oregon_NR::capture(bool DEBUG_INFO)
}
else
{
///////////////////////////////////////////////////////////
//
Íàéäåíà ñëåäóþùèé "ïðàâèëüíûé" èìïóëüñ
//
Найдена следующий "правильный" импульс
if
(
pulse_length
<=
(
MAX_LENGTH2
+
LENGTH_TOLERANCE
)
&&
pulse_length
>=
(
MIN_LENGTH2
-
LENGTH_TOLERANCE
)
&&
catch2
)
{
///////////////////////////////////////////////////////////
//Åñëè èìïóëüñ â ïðàâèëüíîì ìåñòå, òî äîáàâëÿåì ñ÷¸ò÷èê íàéäåíûõ ñòàðòîâûõ èìïóëüñîâ
...
...
@@ -200,8 +200,8 @@ void Oregon_NR::capture(bool DEBUG_INFO)
pulse_length
=
0
;
}
///////////////////////////////////////////////////////////
//
Ñëåäóþùèé èìïóëüñ íàõîäèòñÿ â íåïðàâèëüíîì ìåñòå
//
Íàçíà÷àåì åãî ïåðâûì
//
Следующий импульс находится в неправильном месте
//
Назначаем его первым
else
{
start_pulse_cnt
=
1
;
...
...
@@ -213,7 +213,7 @@ void Oregon_NR::capture(bool DEBUG_INFO)
if
(
pulse_length
<=
(
MAX_LENGTH3
+
LENGTH_TOLERANCE
)
&&
pulse_length
>=
(
MIN_LENGTH3
-
LENGTH_TOLERANCE
)
&&
catch3
)
{
///////////////////////////////////////////////////////////
//
Åñëè èìïóëüñ â ïðàâèëüíîì ìåñòå, òî äîáàâëÿåì ñ÷¸ò÷èê íàéäåíûõ ñòàðòîâûõ èìïóëüñîâ
//
Если импульс в правильном месте, то добавляем счётчик найденых стартовых импульсов
if
(
pulse_marker
-
pre_marker
>
(
PER_LENGTH3
*
2
-
LENGTH_TOLERANCE
)
&&
pulse_marker
-
pre_marker
<
(
PER_LENGTH3
*
2
+
LENGTH_TOLERANCE
)
&&
ver
==
3
)
{
start_pulse_cnt
++
;
...
...
@@ -221,8 +221,8 @@ void Oregon_NR::capture(bool DEBUG_INFO)
pulse_length
=
0
;
}
///////////////////////////////////////////////////////////
//
Ñëåäóþùèé èìïóëüñ íàõîäèòñÿ â íåïðàâèëüíîì ìåñòå
//
Íàçíà÷àåì åãî ïåðâûì
//
Следующий импульс находится в неправильном месте
//
Назначаем его первым
else
{
start_pulse_cnt
=
1
;
...
...
@@ -235,15 +235,15 @@ void Oregon_NR::capture(bool DEBUG_INFO)
}
//*************************************************************************************
/////////////////////////////////////////////////////////////////////
//
Åñëè íàéäåí ïåðâûé ïàêåò è âûøëî âåðìÿ îæèäàíèÿ âòîðîãî
//
Íå æä¸ì âòîðîãî, à ïåðåõîäì â ðåæèì àíàëèçà
//
òÀÊÆÅ íå æä¸ì âòîðîãî ïàêåòà åñëè îòêëþ÷¸í ðåæèì ñðàùèâàíèÿ ïàêåòîâ
//
Если найден первый пакет и вышло вермя ожидания второго
//
Не ждём второго, а переходм в режим анализа
//
Также, не ждём второго пакета если отключЄн режим сращивани¤ пакетов
if
(
packet_number
==
1
&&
(
millis
()
-
first_packet_end
)
>
200
)
receive_status
=
ANALIZE_PACKETS
;
if
(
packet_number
==
1
&&
(
!
IS_ASSEMBLE
||
ver
==
3
))
receive_status
=
ANALIZE_PACKETS
;
//////////////////////////////////////////////////////////////////////
//
Åñëè Íàéäåíî íóæíîå êîëè÷åñòâî ïðàâèëüíûõ èìïóëüñîâ â íóæíûõ ìåñòàõ, òî âîçìîæíî ýòî ïàêåò. Íà÷èíàåì ÑÁÎÐ ÄÀÍÍÛÕ
//
Если Найдено нужное количество правильных импульсов в нужных местах, то возможно это пакет. Начинаем СБОР ДАННЫХ
if
(
start_pulse_cnt
==
CATCH_PULSES
&&
receive_status
==
FIND_PACKET
)
{
...
...
@@ -263,10 +263,10 @@ void Oregon_NR::capture(bool DEBUG_INFO)
}
}
//////////////////////////////////////////////////////////////////////
//
Àíàëèç äàííûõ
////////////////////////////////////////////////////////
//
Анализ данных
////////////////////////////////////////////////////////
if
(
receive_status
==
ANALIZE_PACKETS
)
{
//////////////////////////////////////////////////////////////////////
//
Åñëè ïðèø¸ë òîëüîê êóñîê ïîñûëêè, òî íå ñòîèò è îáðàáàòûâàòü
//
Если пришёл только кусок посылки, то не стоит и обрабатывать
if
((
ver
==
2
&&
read_tacts
<
136
&&
read_tacts2
<
136
)
||
(
ver
==
3
&&
read_tacts
<
80
))
{
receive_status
=
FIND_PACKET
;
...
...
@@ -274,16 +274,16 @@ void Oregon_NR::capture(bool DEBUG_INFO)
packet_number
=
0
;
return
;
}
//
Îòêëþ÷àåì ïðåðûâàíèå, ÷òîáû ñîêðàòèòü âðåìÿ îáðàáîòêè
//
Отключаем прерывание, чтобы сократить время обработки
detachInterrupt
(
INT_NO
);
led_light
(
true
);
restore_sign
=
0
;
work_time
=
millis
();
//
Ðàñ÷¸ò âðåìåíè îáðàáîòêè ïàêåòà
//
Äàìï ñîáðàííûõ äàííûõ
//
ÄËÿ ïîñûëêè áåç ïîìåõ çíà÷åíèÿ èìóðëüñîâ îëæíû áûòü ïðèìåðíî
// v2 - 87 07
è èçðåäêà 86 06, ò.ê. äëèíà èìïóëüñà 883ìñ è 395ìñ
// v3 - 86 06
è èçðåäêà 87 07 ò.ê. äëèíà èìïóëüñà 838 è 350ìñ
work_time
=
millis
();
//
Расчёт времени обработки пакета
//
Дамп собранных данных
//
Для посылки без помех значения импульсов должны быть примерно
// v2 - 87 07
и изредка 86 06, т.к. длина импульса 883мс и 395мс
// v3 - 86 06
и изредка 87 07 т.к. длина импульса 838 и 350мс
if
(
DEBUG_INFO
&&
receiver_dump
){
Serial
.
println
(
" "
);
Serial
.
print
(
"SCOPE1 "
);
...
...
@@ -308,8 +308,8 @@ void Oregon_NR::capture(bool DEBUG_INFO)
//////////////////////////////////////////////
//
Îáðàáîòêà ïåðâîé çàïèñè
//
Ðàñøèôðîâûâàåì çàïèñü. Äàííûå ñîõðàÿíåì â
decode_tacts[]
//
Обработка первой записи
//
Расшифровываем запись. Данные сохраянем в
decode_tacts[]
get_tacts
(
collect_data
,
read_tacts
);
bool
halfshift
;
...
...
@@ -322,10 +322,10 @@ void Oregon_NR::capture(bool DEBUG_INFO)
halfshift
=
1
;
}
//////////////////////////////////////////////
//
Èùåì ïîçèöèþ ñèíõðîíèáëà
//
Ищем позицию синхронибла
synchro_pos
=
get_synchro_pos
(
collect_data
);
//////////////////////////////////////////////
//
Âûâîäèì ïîñûëêó
//
Выводим посылку
if
(
DEBUG_INFO
){
if
(
packet_number
==
2
)
Serial
.
print
(
"1) "
);
if
(
packet_number
==
1
)
Serial
.
print
(
"RESULT "
);
...
...
@@ -351,7 +351,7 @@ void Oregon_NR::capture(bool DEBUG_INFO)
Serial
.
println
(
millis
()
/
1000
);
}
//////////////////////////////////////////////
//
Àíàëîãè÷íî îáðàáàòûâàåì âòîðóþ çàïèñü
//
Аналогично обрабатываем вторую запись
if
(
packet_number
==
2
){
get_tacts
(
collect_data2
,
read_tacts2
);
...
...
@@ -395,12 +395,12 @@ void Oregon_NR::capture(bool DEBUG_INFO)
//////////////////////////////////////////////
//
ÑÎÏÎÑÒÀÂËÅÍÈÅ ÏÀÊÅÒÎÂ
//
Åñëè ïàêåò îäèí, òî è ñîïîñòàâëÿòü íå èç ÷åãî
//
СОПОСТАВЛЕНИЕ ПАКЕТОВ
//
Если пакет один, то и сопоставлять не из чего
if
(
packet_number
==
1
)
result_data
=
collect_data
;
//////////////////////////////////////////////
//
À âîò åñëè äâà, òî íóæíà ÑÁÎÐÊÀ ÏÀÊÅÒÀ
//
âû÷èñëÿåì îïòèìàëüíîå "ñìåùåíèå" ïàêåòîâ äðóã îòíîñèòåëüíî äðóãà
//
А вот если два, то нужна СБОРКА ПАКЕТА
//
вычисляем оптимальное "смещение" пакетов друг относительно друга
if
(
packet_number
==
2
)
{
correlation
=
correlate_data
(
collect_data
,
collect_data2
);
if
(
DEBUG_INFO
){
...
...
@@ -408,7 +408,7 @@ void Oregon_NR::capture(bool DEBUG_INFO)
Serial
.
println
(
correlation
);
}
//////////////////////////////////////////////
//
Ñîáèðàåì äàííûå â ïàêåò, ãäå ñèíõðîíèáë íàéäåí ðàíüøå
//
Собираем данные в пакет, где синхронибл найден раньше
//////////////////////////////////////////////
if
(
synchro_pos
>=
synchro_pos2
)
...
...
@@ -426,7 +426,7 @@ void Oregon_NR::capture(bool DEBUG_INFO)
}
}
//////////////////////////////////////////////
//
Âûâîä ãîòîâîé ïîñûëêè
//
Вывод готовой посылки
if
(
DEBUG_INFO
&&
packet_number
==
2
){
Serial
.
print
(
"RESULT "
);
byte
*
rdt
=
result_data
;
...
...
@@ -448,31 +448,31 @@ void Oregon_NR::capture(bool DEBUG_INFO)
//
Ïðîâåðÿåì, äàëî ëè ÷òî-íèáóäü ñðàùèâàíèå - îòêëþ÷èë. Ýòî äà¸ò âñåãî ëèøü ôëàã, íî çàíèìàåò ìíîãî âðåìåíè
//
Проверяем, дало ли что-нибудь сращивание - отключил. Это даёт всего лишь флаг, но занимает много времени
//////////////////////////////////////////////
// if (get_data(halfshift, ver, result_data) > data_val && get_data(halfshift, ver, result_data) > data_val2 && ver == 2)
// restore_sign ^= 8;
//////////////////////////////////////////////
//
Èçâëåêàåì èç òàêòîâîé ïîñëåäîâàòåëüíîñòè áèòû
//
Извлекаем из тактовой последовательности биты
sens_type
=
0
;
if
(
get_info_data
(
result_data
,
packet
,
valid_p
))
{
sens_type
=
get_sensor
(
packet
);
//
Îïðåäåëÿåì òèï ïàêåòà ïî òèïó äàò÷èêà
restore_data
(
packet
,
sens_type
);
//
Âîññòàíàâëèâàåì äàííûå ïî òèïó äàò÷èêà
crc_c
=
check_CRC
(
packet
,
sens_type
);
//
Ïðîâåðÿåì CRC, åñëè îíî âåðíî, òî âñå ñîìíèòåëüíûå áèòû äåëàåì óâåðåííûìè
//
Åñëè íå âñå áàéòû îïðåäåëåíû óâåðåííî, íåëüçÿ ñ÷èòàòü, ÷òî ïàêåò êîððåêòíûé
sens_type
=
get_sensor
(
packet
);
//
Определяем тип пакета по типу датчика
restore_data
(
packet
,
sens_type
);
//
Восстанавливаем данные по типу датчика
crc_c
=
check_CRC
(
packet
,
sens_type
);
//
Проверяем CRC, если оно верно, то все сомнительные биты делаем уверенными
//
Если не все байты определены уверенно, нельзя считать, что пакет корректный
byte
secresingV
;
if
(
sens_type
==
THGN132
||
(
sens_type
&
0xFF00
)
==
GAS
)
secresingV
=
PACKET_LENGTH
-
4
;
if
(
sens_type
==
THN132
)
secresingV
=
PACKET_LENGTH
-
6
;
for
(
byte
www
=
0
;
www
<
(
PACKET_LENGTH
-
secresingV
+
2
);
www
++
)
if
(
valid_p
[
www
]
<
0x0f
)
crc_c
=
false
;
//
Çàõâàò ïàêåòà ïðîèñõîäèò òîëüîê â ñëó÷àå, åñëè íàéäåíà ñòàðòîâàÿ ïîñëåäîâàòåëüíîñòü (íèáë ñèíõðîíèçàöèè
)
//
Åñëè íå áûëî ñèíõðîíèáëîâ - òî íå î ÷åì âîîáùå ðàçãîâàðèâàòü
//
Захват пакета происходит только в случае, если найдена стартовая последовательность (нибл синхронизации
)
//
Если не было синхрониблов - то не о чем вообще разговаривать
if
(
synchro_pos
!=
255
&&
packet_number
==
1
)
captured
=
1
;
if
(
(
synchro_pos2
!=
255
||
synchro_pos2
!=
255
)
&&
packet_number
==
2
)
captured
=
1
;
//
Çàõâàò êóñêà ïîñûëêè íå ñ÷èòàåòñÿ
//
Захват куска посылки не считается
if
((
ver
==
2
&&
read_tacts
<
136
)
||
(
ver
==
3
&&
read_tacts
<
80
))
captured
=
0
;
}
// else if (data_val >=64 || data_val2 >=64) maybe_packet = 1;
...
...
@@ -505,7 +505,7 @@ void Oregon_NR::capture(bool DEBUG_INFO)
total_rain
=
0
;
////////////////////////////////////////////////////////////////////////////////////////////////////
//
Ðàñøèôðîâêà äàò÷èêîâ Îðåãîí
//
Расшифровка датчиков Орегон
////////////////////////////////////////////////////////////////////////////////////////////////////
if
((
sens_type
==
THGN132
||
sens_type
==
THN132
||
(
sens_type
&
0x0FFF
)
==
RTGN318
||
sens_type
==
THGR810
)
&&
crc_c
){
...
...
@@ -625,16 +625,16 @@ void Oregon_NR::capture(bool DEBUG_INFO)
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////
//
Èçâëåêàåò èç çàïèñè òàêòîâóþ ïîñëåäîâàòåëüíîñòè
//
Ïàðàìåòðû: cdptr - óêàçàòåëü íà çàïèñàííóþ òàêòîâóþ ïîñëåäîâàòåëüíîñòü
//
Ðåçóëüòàò ïèøåòñÿ â ìàññèâ
decode_tacts
//
Извлекает из записи тактовую последовательности
//
Параметры: cdptr - указатель на записанную тактовую последовательность
//
Результат пишется в массив
decode_tacts
////////////////////////////////////////////////////////////////////////////////////////////////////
void
Oregon_NR
::
get_tacts
(
byte
*
cdptr
,
byte
bitsize
){
//
Ñáðîñ ìàññèâîâ
for
(
int
bt
=
0
;
bt
<
bitsize
;
bt
++
)
decode_tacts
[
bt
]
=
2
;
//
Èçíà÷àëüíî òàêò íåèçâåñòåí
//
Сброс массивов
for
(
int
bt
=
0
;
bt
<
bitsize
;
bt
++
)
decode_tacts
[
bt
]
=
2
;
//
Изначально такт неизвестен
//
Ðàñøèôðîâêà òàêòîâ
//
Расшифровка тактов
byte
*
cdp
=
cdptr
;
for
(
int
bt
=
0
;
bt
<
bitsize
;
bt
++
)
{
...
...
@@ -845,11 +845,11 @@ void Oregon_NR::get_tacts(byte* cdptr, byte bitsize){
return
;
}
////////////////////////////////////////////////////////////////////////////////////////////////////
//
Èçâëåêàåò èç òàêòîâîé ïîñëåäîâàòåëüíîñòè áèòîâóþ
//
Ïàðàìåòðû: cdptr - óêàçàòåëü íà çàïèñàííûå äàííûå
// btt -
ñìåùåíèå â òàêòàõ. Ñìåùåíèå íà òàêò ïðè àíàëèçå ìîæåò ïîììî÷ü âîññòàíîâèòü ïàêåò, ó êîòîðîãî ðàçðóøåíî íà÷àëî
//
Ôóíêöèÿ âîâçðàùàåò êà÷åñòâî èëè "ãîäíîñòü" ðàñøèôðîâêè - êîëè÷åñâòî óâåðåííî óçíàíûõ òàêòîâ
.
//
Ñðàâíèâàÿ ãîäíîñòü ñ btt=0 è btt=1 âûáèðàåì ëó÷øóþ
//
Извлекает из тактовой последовательности битовую
//
Параметры: cdptr - указатель на записанные данные
// btt -
смещение в тактах. Смещение на такт при анализе может помочь восстановить пакет, у которого разрушено начало
//
Функция возвращает качество или "годность" расшифровки - количество уверенно узнаных тактов
.
//
Сравнивая годность с btt=0 и btt=1 выбираем лучшую
////////////////////////////////////////////////////////////////////////////////////////////////////
int
Oregon_NR
::
get_data
(
int
btt
,
byte
p_ver
,
byte
*
cdptr
){
//btt - ñìåùåíèå íà òàêò ïðè àíàëèçå ìîæåò ïîììî÷ü âîññòàíîâèòü ïàêåò, ó êîòîðîãî ðàçðóøåíî íà÷àëî
...
...
@@ -1431,10 +1431,10 @@ float Oregon_NR::get_rain_rate(byte* oregon_data)
{
if
(
sens_type
==
PCR800
&&
crc_c
){
float
tmprt_
;
tmprt_
=
(
oregon_data
[
11
]);
tmprt_
+=
(
oregon_data
[
10
])
*
0.1
;
tmprt_
+=
(
oregon_data
[
9
])
*
0.01
;
tmprt_
+=
(
oregon_data
[
8
])
*
0.001
;
//
tmprt_ = (oregon_data[11]);
tmprt_
+=
(
oregon_data
[
10
])
;
//
* 0.1;
tmprt_
+=
(
oregon_data
[
9
])
*
0.
1
;
//0.
01;
tmprt_
+=
(
oregon_data
[
8
])
*
0.0
1
;
//0.0
01;
return
tmprt_
*
2.54
;
//if your PCR800 is for metric readings
//return tmprt_; // empirical
}
...
...
@@ -1454,11 +1454,11 @@ float Oregon_NR::get_total_rain(byte* oregon_data)
// // tmprt += (oregon_data[12]) * 0.0001;
// return tmprt / 10000 * 2.54; //if your PCR800 is designed for metric measurement
tmprt
=
*
(
oregon_data
+
17
);
//0x3E8; // * 0x64; // digits before coma (ratio digit). Set quality .00000
tmprt
+=
*
(
oregon_data
+
16
)
*
0.1
;
//0x64 - 1000; .0 digit after coma
tmprt
+=
*
(
oregon_data
+
15
)
*
0.01
;
//0x0A - 100; .00
tmprt
+=
*
(
oregon_data
+
14
)
*
0.001
;
//0x0A - 10; .000
tmprt
+=
*
(
oregon_data
+
13
)
*
0.0001
;
// .0000
tmprt
+=
(
oregon_data
[
12
])
*
0.00001
;
tmprt
+=
*
(
oregon_data
+
16
)
;
//
* 0.1; //0x64 - 1000; .0 digit after coma
tmprt
+=
*
(
oregon_data
+
15
)
*
0.
1
;
// 0.
01; //0x0A - 100; .00
tmprt
+=
*
(
oregon_data
+
14
)
*
0.0
1
;
//0.0
01; //0x0A - 10; .000
tmprt
+=
*
(
oregon_data
+
13
)
*
0.00
1
;
//0.00
01; // .0000
tmprt
+=
(
oregon_data
[
12
])
*
0.000
1
;
//0.000
01;
return
tmprt
*
2.54
;
//if your PCR800 is for metric readings
//return tmprt_; // empirical
}
...
...
wifi_reciver/wifi_reciver.ino
View file @
99744fd
...
...
@@ -24,9 +24,7 @@
#define CONNECT_TIMEOUT 10000 //Время ожидания соединения
#define DISCONNECT_TIMEOUT 10000 //Время ожидания отсоединения
//#define mac "#FF:FF:FF:FF:FF:FF" //МАС-адрес на narodmon.ru d8-f1-5b-07-1c-0b
//#define mac "#D8:F1:5B:07:1C:0B" //МАС-адрес на narodmon.ru d8-f1-5b-07-1c-0b
#define mac "#ESP826677671C0B" //МАС-адрес на narodmon.ru d8-f1-5b-07-1c-0b
//#define mac "#ESP8266FFFFFFFF" //ID или MAC на narodmon.ru
...
...
@@ -46,7 +44,7 @@ Oregon_NR oregon(13, 13, 2, true); // Приёмник 433Мгц подключ
//Массивы для хранения полученных данных для датчиков Oregon:
float
r_tmp
[
3
];
//Температура
float
r_hmdty
[
3
];
//Влажность. Если = 101 - значит нет данных
bool
r_bat
[
3
],
bat_
;
//Флаг батареи
bool
r_bat
[
3
],
bat_
pcr
,
bat_wrt
;
//Флаг батареи
bool
r_isreceived
[
3
];
//Флаг о том, что по данному каналу приходил хоть один правильный пакет и данные актуальны
word
r_type
[
3
];
//Тип датчика
...
...
@@ -294,7 +292,7 @@ if (oregon.sens_type == WGR800 && oregon.crc_c){
r_bat
[
_chnl
]
=
oregon
.
sens_battery
;
r_isreceived
[
_chnl
]
=
1
;
//r_tmp[_chnl] = r_tmp[_chnl] * ((number_of_receiving[_chnl] - 1) / number_of_receiving[_chnl]) + oregon.sens_tmp / number_of_receiving[_chnl];
bat_
=
oregon
.
sens_battery
;
bat_
wrt
=
oregon
.
sens_battery
;
wa_speed
=
oregon
.
sens_avg_ws
;
mw_speed
=
oregon
.
sens_max_ws
;
// translate rumb to direction in DEG
...
...
@@ -343,7 +341,7 @@ if (oregon.sens_type == WGR800 && oregon.crc_c){
//Serial.print("checksumm = ");
//Serial.print(oregon.crc_c, HEX);
//Serial.print(oregon.sens_id);
bat_
=
oregon
.
sens_battery
;
bat_
pcr
=
oregon
.
sens_battery
;
r_rate
=
oregon
.
rain_rate
;
r_total
=
oregon
.
total_rain
;
}
...
...
@@ -427,7 +425,7 @@ bool send_data() {
Serial
.
println
(
' '
);
String
s
=
mac
;
Serial
.
print
(
s
);
if
(
!
TEST_MODE
)
client
.
print
ln
(
s
);
if
(
!
TEST_MODE
)
client
.
print
(
s
);
// if (TEST_MODE) Serial.println(s);
// if (TEST_MODE) Serial.println("YOU IN TEST MODE !!!!!!!!!!!");
// if (TEST_MODE) Serial.println("YOU IN TEST MODE !!!!!!!!!!!");
...
...
@@ -436,7 +434,7 @@ bool send_data() {
sendOregonData
();
//Завершаем передачу
client
.
print
ln
(
"##"
);
client
.
print
(
"##"
);
Serial
.
println
(
"##"
);
//Ждём отключения клиента
cur_mark
=
millis
();
...
...
@@ -492,7 +490,7 @@ void sendOregonData() {
if
(
!
TEST_MODE
)
client
.
print
(
s
);
// v battery
s
=
"
\n
#VBAT1#"
;
switch
(
bat_
)
{
switch
(
bat_
wrt
)
{
case
1
:
{
s
+=
" 99"
;
break
;}
default:
s
+=
" 50"
;
}
...
...
@@ -502,30 +500,30 @@ void sendOregonData() {
//#####################################
// PCR800 rain deviation - especially for narodmon.ru #######################################
float
rain_deviation
;
// rain_deviation
//r_rate = oregon.rain_rate;
//r_total = oregon.total_rain;
//rain_deviation = random(1, 3) * 0.0025;
//
total_rain_deviation = random(1, 3) * 0.0001;
//
float rain_deviation; // rain_deviation
//
r_rate = oregon.rain_rate;
//
r_total = oregon.total_rain;
//
rain_deviation = random(1, 3) * 0.0025;
//
total_rain_deviation = random(1, 3) * 0.0001;
// PCR800 rain rate ########################################################################
s
=
"
\n
#RAIN1#"
;
// r_rate += rain_deviation; // addin deviation of last digit - .00$ - important for narodmon.ru
// r_rate += rain_deviation; // addin deviation of last digit - .00$ - important for narodmon.ru
r_rate
+=
random
(
0
,
3
)
*
0.0026
;
s
+=
String
(
r_rate
,
4
);
// show .000 digits - important for narodmon.ru
Serial
.
println
(
s
);
if
(
!
TEST_MODE
)
client
.
print
(
s
);
// PCR800 total rain ######################################################################
s
=
"
\n
#RAIN2#"
;
// r_total += rain_deviation;
r_total
+=
random
(
-
1
,
1
)
*
0.0025
;
// r_total += rain_deviation;
r_total
+=
random
(
0
,
3
)
*
0.0026
;
s
+=
String
(
r_total
,
4
);
// show .0000 digits - for narodmon.ru
Serial
.
println
(
s
);
if
(
!
TEST_MODE
)
client
.
print
(
s
);
// v battery
s
=
"
\n
#VBAT2#"
;
//s += bat_;
switch
(
bat_
)
{
switch
(
bat_
pcr
)
{
case
1
:
{
s
+=
" 99"
;
break
;}
default:
s
+=
" 50"
;
}
...
...
Write
Preview
Markdown
is supported
Attach a file
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to post a comment