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
Show 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) {
...
@@ -91,13 +91,13 @@ void receiver_interruption(void) {
#endif
#endif
if
(
digitalRead
(
RECEIVER_PIN
)){
if
(
digitalRead
(
RECEIVER_PIN
)){
//
Íà÷àëî èìïóëüñà
//
Начало импульса
pl
=
0
;
pl
=
0
;
pm
=
micros
();
pm
=
micros
();
}
}
else
{
else
{
//
Êîíåö èìïóëüñà
//
Конец импульса
//
Âû÷èñëÿåòñÿ âðåìÿ îêîí÷àíèÿ è äëèíà
//
Вычисляется время окончания и длина
pl
=
micros
()
-
pm
;
pl
=
micros
()
-
pm
;
//pm += pl;
//pm += pl;
}
}
...
@@ -110,7 +110,7 @@ Oregon_NR::Oregon_NR(byte MHZ, byte MHZ_INT)
...
@@ -110,7 +110,7 @@ Oregon_NR::Oregon_NR(byte MHZ, byte MHZ_INT)
{
{
INT_NO
=
MHZ_INT
;
INT_NO
=
MHZ_INT
;
RECEIVER_PIN
=
MHZ
;
RECEIVER_PIN
=
MHZ
;
pinMode
(
MHZ
,
INPUT
);
//
Âûâîä, íà êîòîðûé ïîäêëþ÷¸í ïðè¸ìíèê
pinMode
(
MHZ
,
INPUT
);
//
Вывод, на который подключён приёмник
}
}
Oregon_NR
::
Oregon_NR
(
byte
MHZ
,
byte
MHZ_INT
,
byte
led
,
bool
pull_up
)
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)
...
@@ -119,8 +119,8 @@ Oregon_NR::Oregon_NR(byte MHZ, byte MHZ_INT, byte led, bool pull_up)
LED
=
led
;
LED
=
led
;
PULL_UP
=
pull_up
;
PULL_UP
=
pull_up
;
RECEIVER_PIN
=
MHZ
;
RECEIVER_PIN
=
MHZ
;
pinMode
(
MHZ
,
INPUT
);
//
Âûâîä, íà êîòîðûé ïîäêëþ÷¸í ïðè¸ìíèê
pinMode
(
MHZ
,
INPUT
);
//
Вывод, на который подключён приёмник
pinMode
(
LED
,
OUTPUT
);
//
Âûâîä ñâåòîäèîäà
pinMode
(
LED
,
OUTPUT
);
//
Вывод светодиода
}
}
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
...
@@ -139,14 +139,14 @@ void Oregon_NR::stop()
...
@@ -139,14 +139,14 @@ void Oregon_NR::stop()
detachInterrupt
(
INT_NO
);
detachInterrupt
(
INT_NO
);
}
}
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
//
Çàõâàò è àíàëèç ïàêåòà
//
Захват и анализ пакета
//DEBUG_INFO -
â Serial âûâîäèòñÿ èíôîðìàöèÿ î çàõâàòå äàííûõ
//DEBUG_INFO -
в Serial выводится информация о захвате данных
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
void
Oregon_NR
::
capture
(
bool
DEBUG_INFO
)
void
Oregon_NR
::
capture
(
bool
DEBUG_INFO
)
{
{
////////////////////////////////////////////////////////
////////////////////////////////////////////////////////
// Âîçâðàùàåìñÿ ê èñõîäíîìó ñîñòîÿíèþ
// Возвращаемся к исходному состоянию
//maybe_packet = 0;
//maybe_packet = 0;
packets_received
=
0
;
packets_received
=
0
;
sens_type
=
0
;
sens_type
=
0
;
crc_c
=
0
;
crc_c
=
0
;
...
@@ -156,7 +156,7 @@ void Oregon_NR::capture(bool DEBUG_INFO)
...
@@ -156,7 +156,7 @@ void Oregon_NR::capture(bool DEBUG_INFO)
////////////////////////////////////////////////////////
////////////////////////////////////////////////////////
//
×òåíèå äàííûõ ñ ïðè¸ìíèêà
//
Чтение данных с приёмника
noInterrupts
();
noInterrupts
();
pulse_length
=
pl
;
pulse_length
=
pl
;
pl
=
0
;
pl
=
0
;
...
@@ -164,15 +164,15 @@ void Oregon_NR::capture(bool DEBUG_INFO)
...
@@ -164,15 +164,15 @@ void Oregon_NR::capture(bool DEBUG_INFO)
interrupts
();
interrupts
();
////////////////////////////////////////////////////////
////////////////////////////////////////////////////////
//
Ïðèø¸ë èìïóëüñ
//
Пришёл импульс
if
(
pulse_length
!=
0
&&
receive_status
==
FIND_PACKET
){
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_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
(
pulse_marker
-
pre_marker
>
(
PER_LENGTH3
*
2
+
LENGTH_TOLERANCE
)
&&
ver
==
3
)
start_pulse_cnt
=
0
;
if
(
start_pulse_cnt
==
0
){
if
(
start_pulse_cnt
==
0
){
////////////////////////////////////////////////////////
////////////////////////////////////////////////////////
//
Íàéäåíà ïåðâûé "ïðàâèëüíûé" èìïóëüñ - îïðåäåëÿåì òèï ïðîòîêîëà
//
Найдена первый "правильный" импульс - определяем тип протокола
if
(
pulse_length
<
(
MAX_LENGTH2
+
LENGTH_TOLERANCE
)
&&
pulse_length
>
(
MIN_LENGTH2
-
LENGTH_TOLERANCE
)
&&
catch2
)
{
if
(
pulse_length
<
(
MAX_LENGTH2
+
LENGTH_TOLERANCE
)
&&
pulse_length
>
(
MIN_LENGTH2
-
LENGTH_TOLERANCE
)
&&
catch2
)
{
start_pulse_cnt
++
;
start_pulse_cnt
++
;
pre_marker
=
pulse_marker
;
pre_marker
=
pulse_marker
;
...
@@ -189,7 +189,7 @@ void Oregon_NR::capture(bool DEBUG_INFO)
...
@@ -189,7 +189,7 @@ void Oregon_NR::capture(bool DEBUG_INFO)
}
}
else
{
else
{
///////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////
//
Íàéäåíà ñëåäóþùèé "ïðàâèëüíûé" èìïóëüñ
//
Найдена следующий "правильный" импульс
if
(
pulse_length
<=
(
MAX_LENGTH2
+
LENGTH_TOLERANCE
)
&&
pulse_length
>=
(
MIN_LENGTH2
-
LENGTH_TOLERANCE
)
&&
catch2
)
{
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)
...
@@ -200,8 +200,8 @@ void Oregon_NR::capture(bool DEBUG_INFO)
pulse_length
=
0
;
pulse_length
=
0
;
}
}
///////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////
//
Ñëåäóþùèé èìïóëüñ íàõîäèòñÿ â íåïðàâèëüíîì ìåñòå
//
Следующий импульс находится в неправильном месте
//
Íàçíà÷àåì åãî ïåðâûì
//
Назначаем его первым
else
else
{
{
start_pulse_cnt
=
1
;
start_pulse_cnt
=
1
;
...
@@ -213,7 +213,7 @@ void Oregon_NR::capture(bool DEBUG_INFO)
...
@@ -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_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
)
if
(
pulse_marker
-
pre_marker
>
(
PER_LENGTH3
*
2
-
LENGTH_TOLERANCE
)
&&
pulse_marker
-
pre_marker
<
(
PER_LENGTH3
*
2
+
LENGTH_TOLERANCE
)
&&
ver
==
3
)
{
{
start_pulse_cnt
++
;
start_pulse_cnt
++
;
...
@@ -221,8 +221,8 @@ void Oregon_NR::capture(bool DEBUG_INFO)
...
@@ -221,8 +221,8 @@ void Oregon_NR::capture(bool DEBUG_INFO)
pulse_length
=
0
;
pulse_length
=
0
;
}
}
///////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////
//
Ñëåäóþùèé èìïóëüñ íàõîäèòñÿ â íåïðàâèëüíîì ìåñòå
//
Следующий импульс находится в неправильном месте
//
Íàçíà÷àåì åãî ïåðâûì
//
Назначаем его первым
else
else
{
{
start_pulse_cnt
=
1
;
start_pulse_cnt
=
1
;
...
@@ -235,15 +235,15 @@ void Oregon_NR::capture(bool DEBUG_INFO)
...
@@ -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
&&
(
millis
()
-
first_packet_end
)
>
200
)
receive_status
=
ANALIZE_PACKETS
;
if
(
packet_number
==
1
&&
(
!
IS_ASSEMBLE
||
ver
==
3
))
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
)
{
if
(
start_pulse_cnt
==
CATCH_PULSES
&&
receive_status
==
FIND_PACKET
)
{
...
@@ -263,10 +263,10 @@ void Oregon_NR::capture(bool DEBUG_INFO)
...
@@ -263,10 +263,10 @@ void Oregon_NR::capture(bool DEBUG_INFO)
}
}
}
}
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
//
Àíàëèç äàííûõ
////////////////////////////////////////////////////////
//
Анализ данных
////////////////////////////////////////////////////////
if
(
receive_status
==
ANALIZE_PACKETS
)
{
if
(
receive_status
==
ANALIZE_PACKETS
)
{
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
//
Åñëè ïðèø¸ë òîëüîê êóñîê ïîñûëêè, òî íå ñòîèò è îáðàáàòûâàòü
//
Если пришёл только кусок посылки, то не стоит и обрабатывать
if
((
ver
==
2
&&
read_tacts
<
136
&&
read_tacts2
<
136
)
||
(
ver
==
3
&&
read_tacts
<
80
))
if
((
ver
==
2
&&
read_tacts
<
136
&&
read_tacts2
<
136
)
||
(
ver
==
3
&&
read_tacts
<
80
))
{
{
receive_status
=
FIND_PACKET
;
receive_status
=
FIND_PACKET
;
...
@@ -274,16 +274,16 @@ void Oregon_NR::capture(bool DEBUG_INFO)
...
@@ -274,16 +274,16 @@ void Oregon_NR::capture(bool DEBUG_INFO)
packet_number
=
0
;
packet_number
=
0
;
return
;
return
;
}
}
//
Îòêëþ÷àåì ïðåðûâàíèå, ÷òîáû ñîêðàòèòü âðåìÿ îáðàáîòêè
//
Отключаем прерывание, чтобы сократить время обработки
detachInterrupt
(
INT_NO
);
detachInterrupt
(
INT_NO
);
led_light
(
true
);
led_light
(
true
);
restore_sign
=
0
;
restore_sign
=
0
;
work_time
=
millis
();
//
Ðàñ÷¸ò âðåìåíè îáðàáîòêè ïàêåòà
work_time
=
millis
();
//
Расчёт времени обработки пакета
//
Äàìï ñîáðàííûõ äàííûõ
//
Дамп собранных данных
//
ÄËÿ ïîñûëêè áåç ïîìåõ çíà÷åíèÿ èìóðëüñîâ îëæíû áûòü ïðèìåðíî
//
Для посылки без помех значения импульсов должны быть примерно
// v2 - 87 07
è èçðåäêà 86 06, ò.ê. äëèíà èìïóëüñà 883ìñ è 395ìñ
// v2 - 87 07
и изредка 86 06, т.к. длина импульса 883мс и 395мс
// v3 - 86 06
è èçðåäêà 87 07 ò.ê. äëèíà èìïóëüñà 838 è 350ìñ
// v3 - 86 06
и изредка 87 07 т.к. длина импульса 838 и 350мс
if
(
DEBUG_INFO
&&
receiver_dump
){
if
(
DEBUG_INFO
&&
receiver_dump
){
Serial
.
println
(
" "
);
Serial
.
println
(
" "
);
Serial
.
print
(
"SCOPE1 "
);
Serial
.
print
(
"SCOPE1 "
);
...
@@ -308,8 +308,8 @@ void Oregon_NR::capture(bool DEBUG_INFO)
...
@@ -308,8 +308,8 @@ void Oregon_NR::capture(bool DEBUG_INFO)
//////////////////////////////////////////////
//////////////////////////////////////////////
//
Îáðàáîòêà ïåðâîé çàïèñè
//
Обработка первой записи
//
Ðàñøèôðîâûâàåì çàïèñü. Äàííûå ñîõðàÿíåì â
decode_tacts[]
//
Расшифровываем запись. Данные сохраянем в
decode_tacts[]
get_tacts
(
collect_data
,
read_tacts
);
get_tacts
(
collect_data
,
read_tacts
);
bool
halfshift
;
bool
halfshift
;
...
@@ -322,10 +322,10 @@ void Oregon_NR::capture(bool DEBUG_INFO)
...
@@ -322,10 +322,10 @@ void Oregon_NR::capture(bool DEBUG_INFO)
halfshift
=
1
;
halfshift
=
1
;
}
}
//////////////////////////////////////////////
//////////////////////////////////////////////
//
Èùåì ïîçèöèþ ñèíõðîíèáëà
//
Ищем позицию синхронибла
synchro_pos
=
get_synchro_pos
(
collect_data
);
synchro_pos
=
get_synchro_pos
(
collect_data
);
//////////////////////////////////////////////
//////////////////////////////////////////////
//
Âûâîäèì ïîñûëêó
//
Выводим посылку
if
(
DEBUG_INFO
){
if
(
DEBUG_INFO
){
if
(
packet_number
==
2
)
Serial
.
print
(
"1) "
);
if
(
packet_number
==
2
)
Serial
.
print
(
"1) "
);
if
(
packet_number
==
1
)
Serial
.
print
(
"RESULT "
);
if
(
packet_number
==
1
)
Serial
.
print
(
"RESULT "
);
...
@@ -351,7 +351,7 @@ void Oregon_NR::capture(bool DEBUG_INFO)
...
@@ -351,7 +351,7 @@ void Oregon_NR::capture(bool DEBUG_INFO)
Serial
.
println
(
millis
()
/
1000
);
Serial
.
println
(
millis
()
/
1000
);
}
}
//////////////////////////////////////////////
//////////////////////////////////////////////
//
Àíàëîãè÷íî îáðàáàòûâàåì âòîðóþ çàïèñü
//
Аналогично обрабатываем вторую запись
if
(
packet_number
==
2
){
if
(
packet_number
==
2
){
get_tacts
(
collect_data2
,
read_tacts2
);
get_tacts
(
collect_data2
,
read_tacts2
);
...
@@ -395,12 +395,12 @@ void Oregon_NR::capture(bool DEBUG_INFO)
...
@@ -395,12 +395,12 @@ void Oregon_NR::capture(bool DEBUG_INFO)
//////////////////////////////////////////////
//////////////////////////////////////////////
//
ÑÎÏÎÑÒÀÂËÅÍÈÅ ÏÀÊÅÒÎÂ
//
СОПОСТАВЛЕНИЕ ПАКЕТОВ
//
Åñëè ïàêåò îäèí, òî è ñîïîñòàâëÿòü íå èç ÷åãî
//
Если пакет один, то и сопоставлять не из чего
if
(
packet_number
==
1
)
result_data
=
collect_data
;
if
(
packet_number
==
1
)
result_data
=
collect_data
;
//////////////////////////////////////////////
//////////////////////////////////////////////
//
À âîò åñëè äâà, òî íóæíà ÑÁÎÐÊÀ ÏÀÊÅÒÀ
//
А вот если два, то нужна СБОРКА ПАКЕТА
//
âû÷èñëÿåì îïòèìàëüíîå "ñìåùåíèå" ïàêåòîâ äðóã îòíîñèòåëüíî äðóãà
//
вычисляем оптимальное "смещение" пакетов друг относительно друга
if
(
packet_number
==
2
)
{
if
(
packet_number
==
2
)
{
correlation
=
correlate_data
(
collect_data
,
collect_data2
);
correlation
=
correlate_data
(
collect_data
,
collect_data2
);
if
(
DEBUG_INFO
){
if
(
DEBUG_INFO
){
...
@@ -408,7 +408,7 @@ void Oregon_NR::capture(bool DEBUG_INFO)
...
@@ -408,7 +408,7 @@ void Oregon_NR::capture(bool DEBUG_INFO)
Serial
.
println
(
correlation
);
Serial
.
println
(
correlation
);
}
}
//////////////////////////////////////////////
//////////////////////////////////////////////
//
Ñîáèðàåì äàííûå â ïàêåò, ãäå ñèíõðîíèáë íàéäåí ðàíüøå
//
Собираем данные в пакет, где синхронибл найден раньше
//////////////////////////////////////////////
//////////////////////////////////////////////
if
(
synchro_pos
>=
synchro_pos2
)
if
(
synchro_pos
>=
synchro_pos2
)
...
@@ -426,7 +426,7 @@ void Oregon_NR::capture(bool DEBUG_INFO)
...
@@ -426,7 +426,7 @@ void Oregon_NR::capture(bool DEBUG_INFO)
}
}
}
}
//////////////////////////////////////////////
//////////////////////////////////////////////
//
Âûâîä ãîòîâîé ïîñûëêè
//
Вывод готовой посылки
if
(
DEBUG_INFO
&&
packet_number
==
2
){
if
(
DEBUG_INFO
&&
packet_number
==
2
){
Serial
.
print
(
"RESULT "
);
Serial
.
print
(
"RESULT "
);
byte
*
rdt
=
result_data
;
byte
*
rdt
=
result_data
;
...
@@ -448,31 +448,31 @@ void Oregon_NR::capture(bool DEBUG_INFO)
...
@@ -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)
// if (get_data(halfshift, ver, result_data) > data_val && get_data(halfshift, ver, result_data) > data_val2 && ver == 2)
// restore_sign ^= 8;
// restore_sign ^= 8;
//////////////////////////////////////////////
//////////////////////////////////////////////
//
Èçâëåêàåì èç òàêòîâîé ïîñëåäîâàòåëüíîñòè áèòû
//
Извлекаем из тактовой последовательности биты
sens_type
=
0
;
sens_type
=
0
;
if
(
get_info_data
(
result_data
,
packet
,
valid_p
))
if
(
get_info_data
(
result_data
,
packet
,
valid_p
))
{
{
sens_type
=
get_sensor
(
packet
);
//
Îïðåäåëÿåì òèï ïàêåòà ïî òèïó äàò÷èêà
sens_type
=
get_sensor
(
packet
);
//
Определяем тип пакета по типу датчика
restore_data
(
packet
,
sens_type
);
//
Âîññòàíàâëèâàåì äàííûå ïî òèïó äàò÷èêà
restore_data
(
packet
,
sens_type
);
//
Восстанавливаем данные по типу датчика
crc_c
=
check_CRC
(
packet
,
sens_type
);
//
Ïðîâåðÿåì CRC, åñëè îíî âåðíî, òî âñå ñîìíèòåëüíûå áèòû äåëàåì óâåðåííûìè
crc_c
=
check_CRC
(
packet
,
sens_type
);
//
Проверяем CRC, если оно верно, то все сомнительные биты делаем уверенными
//
Åñëè íå âñå áàéòû îïðåäåëåíû óâåðåííî, íåëüçÿ ñ÷èòàòü, ÷òî ïàêåò êîððåêòíûé
//
Если не все байты определены уверенно, нельзя считать, что пакет корректный
byte
secresingV
;
byte
secresingV
;
if
(
sens_type
==
THGN132
||
(
sens_type
&
0xFF00
)
==
GAS
)
secresingV
=
PACKET_LENGTH
-
4
;
if
(
sens_type
==
THGN132
||
(
sens_type
&
0xFF00
)
==
GAS
)
secresingV
=
PACKET_LENGTH
-
4
;
if
(
sens_type
==
THN132
)
secresingV
=
PACKET_LENGTH
-
6
;
if
(
sens_type
==
THN132
)
secresingV
=
PACKET_LENGTH
-
6
;
for
(
byte
www
=
0
;
www
<
(
PACKET_LENGTH
-
secresingV
+
2
);
www
++
)
for
(
byte
www
=
0
;
www
<
(
PACKET_LENGTH
-
secresingV
+
2
);
www
++
)
if
(
valid_p
[
www
]
<
0x0f
)
crc_c
=
false
;
if
(
valid_p
[
www
]
<
0x0f
)
crc_c
=
false
;
//
Çàõâàò ïàêåòà ïðîèñõîäèò òîëüîê â ñëó÷àå, åñëè íàéäåíà ñòàðòîâàÿ ïîñëåäîâàòåëüíîñòü (íèáë ñèíõðîíèçàöèè
)
//
Захват пакета происходит только в случае, если найдена стартовая последовательность (нибл синхронизации
)
//
Åñëè íå áûëî ñèíõðîíèáëîâ - òî íå î ÷åì âîîáùå ðàçãîâàðèâàòü
//
Если не было синхрониблов - то не о чем вообще разговаривать
if
(
synchro_pos
!=
255
&&
packet_number
==
1
)
captured
=
1
;
if
(
synchro_pos
!=
255
&&
packet_number
==
1
)
captured
=
1
;
if
(
(
synchro_pos2
!=
255
||
synchro_pos2
!=
255
)
&&
packet_number
==
2
)
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
;
if
((
ver
==
2
&&
read_tacts
<
136
)
||
(
ver
==
3
&&
read_tacts
<
80
))
captured
=
0
;
}
}
// else if (data_val >=64 || data_val2 >=64) maybe_packet = 1;
// else if (data_val >=64 || data_val2 >=64) maybe_packet = 1;
...
@@ -505,7 +505,7 @@ void Oregon_NR::capture(bool DEBUG_INFO)
...
@@ -505,7 +505,7 @@ void Oregon_NR::capture(bool DEBUG_INFO)
total_rain
=
0
;
total_rain
=
0
;
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
//
Ðàñøèôðîâêà äàò÷èêîâ Îðåãîí
//
Расшифровка датчиков Орегон
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
if
((
sens_type
==
THGN132
||
sens_type
==
THN132
||
(
sens_type
&
0x0FFF
)
==
RTGN318
||
sens_type
==
THGR810
)
&&
crc_c
){
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)
...
@@ -625,16 +625,16 @@ void Oregon_NR::capture(bool DEBUG_INFO)
}
}
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
//
Èçâëåêàåò èç çàïèñè òàêòîâóþ ïîñëåäîâàòåëüíîñòè
//
Извлекает из записи тактовую последовательности
//
Ïàðàìåòðû: cdptr - óêàçàòåëü íà çàïèñàííóþ òàêòîâóþ ïîñëåäîâàòåëüíîñòü
//
Параметры: cdptr - указатель на записанную тактовую последовательность
//
Ðåçóëüòàò ïèøåòñÿ â ìàññèâ
decode_tacts
//
Результат пишется в массив
decode_tacts
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
void
Oregon_NR
::
get_tacts
(
byte
*
cdptr
,
byte
bitsize
){
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
;
byte
*
cdp
=
cdptr
;
for
(
int
bt
=
0
;
bt
<
bitsize
;
bt
++
)
for
(
int
bt
=
0
;
bt
<
bitsize
;
bt
++
)
{
{
...
@@ -845,11 +845,11 @@ void Oregon_NR::get_tacts(byte* cdptr, byte bitsize){
...
@@ -845,11 +845,11 @@ void Oregon_NR::get_tacts(byte* cdptr, byte bitsize){
return
;
return
;
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
//
Èçâëåêàåò èç òàêòîâîé ïîñëåäîâàòåëüíîñòè áèòîâóþ
//
Извлекает из тактовой последовательности битовую
//
Ïàðàìåòðû: cdptr - óêàçàòåëü íà çàïèñàííûå äàííûå
//
Параметры: cdptr - указатель на записанные данные
// btt -
ñìåùåíèå â òàêòàõ. Ñìåùåíèå íà òàêò ïðè àíàëèçå ìîæåò ïîììî÷ü âîññòàíîâèòü ïàêåò, ó êîòîðîãî ðàçðóøåíî íà÷àëî
// btt -
смещение в тактах. Смещение на такт при анализе может помочь восстановить пакет, у которого разрушено начало
//
Ôóíêöèÿ âîâçðàùàåò êà÷åñòâî èëè "ãîäíîñòü" ðàñøèôðîâêè - êîëè÷åñâòî óâåðåííî óçíàíûõ òàêòîâ
.
//
Функция возвращает качество или "годность" расшифровки - количество уверенно узнаных тактов
.
//
Ñðàâíèâàÿ ãîäíîñòü ñ btt=0 è btt=1 âûáèðàåì ëó÷øóþ
//
Сравнивая годность с btt=0 и btt=1 выбираем лучшую
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
int
Oregon_NR
::
get_data
(
int
btt
,
byte
p_ver
,
byte
*
cdptr
){
//btt - ñìåùåíèå íà òàêò ïðè àíàëèçå ìîæåò ïîììî÷ü âîññòàíîâèòü ïàêåò, ó êîòîðîãî ðàçðóøåíî íà÷àëî
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)
...
@@ -1431,10 +1431,10 @@ float Oregon_NR::get_rain_rate(byte* oregon_data)
{
{
if
(
sens_type
==
PCR800
&&
crc_c
){
if
(
sens_type
==
PCR800
&&
crc_c
){
float
tmprt_
;
float
tmprt_
;
tmprt_
=
(
oregon_data
[
11
]);
//
tmprt_ = (oregon_data[11]);
tmprt_
+=
(
oregon_data
[
10
])
*
0.1
;
tmprt_
+=
(
oregon_data
[
10
])
;
//
* 0.1;
tmprt_
+=
(
oregon_data
[
9
])
*
0.01
;
tmprt_
+=
(
oregon_data
[
9
])
*
0.
1
;
//0.
01;
tmprt_
+=
(
oregon_data
[
8
])
*
0.001
;
tmprt_
+=
(
oregon_data
[
8
])
*
0.0
1
;
//0.0
01;
return
tmprt_
*
2.54
;
//if your PCR800 is for metric readings
return
tmprt_
*
2.54
;
//if your PCR800 is for metric readings
//return tmprt_; // empirical
//return tmprt_; // empirical
}
}
...
@@ -1454,11 +1454,11 @@ float Oregon_NR::get_total_rain(byte* oregon_data)
...
@@ -1454,11 +1454,11 @@ float Oregon_NR::get_total_rain(byte* oregon_data)
// // tmprt += (oregon_data[12]) * 0.0001;
// // tmprt += (oregon_data[12]) * 0.0001;
// return tmprt / 10000 * 2.54; //if your PCR800 is designed for metric measurement
// 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
+
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
+
16
)
;
//
* 0.1; //0x64 - 1000; .0 digit after coma
tmprt
+=
*
(
oregon_data
+
15
)
*
0.01
;
//0x0A - 100; .00
tmprt
+=
*
(
oregon_data
+
15
)
*
0.
1
;
// 0.
01; //0x0A - 100; .00
tmprt
+=
*
(
oregon_data
+
14
)
*
0.001
;
//0x0A - 10; .000
tmprt
+=
*
(
oregon_data
+
14
)
*
0.0
1
;
//0.0
01; //0x0A - 10; .000
tmprt
+=
*
(
oregon_data
+
13
)
*
0.0001
;
// .0000
tmprt
+=
*
(
oregon_data
+
13
)
*
0.00
1
;
//0.00
01; // .0000
tmprt
+=
(
oregon_data
[
12
])
*
0.00001
;
tmprt
+=
(
oregon_data
[
12
])
*
0.000
1
;
//0.000
01;
return
tmprt
*
2.54
;
//if your PCR800 is for metric readings
return
tmprt
*
2.54
;
//if your PCR800 is for metric readings
//return tmprt_; // empirical
//return tmprt_; // empirical
}
}
...
...
wifi_reciver/wifi_reciver.ino
View file @
99744fd
...
@@ -24,9 +24,7 @@
...
@@ -24,9 +24,7 @@
#define CONNECT_TIMEOUT 10000 //Время ожидания соединения
#define CONNECT_TIMEOUT 10000 //Время ожидания соединения
#define DISCONNECT_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
//#define mac "#ESP8266FFFFFFFF" //ID или MAC на narodmon.ru
...
@@ -46,7 +44,7 @@ Oregon_NR oregon(13, 13, 2, true); // Приёмник 433Мгц подключ
...
@@ -46,7 +44,7 @@ Oregon_NR oregon(13, 13, 2, true); // Приёмник 433Мгц подключ
//Массивы для хранения полученных данных для датчиков Oregon:
//Массивы для хранения полученных данных для датчиков Oregon:
float
r_tmp
[
3
];
//Температура
float
r_tmp
[
3
];
//Температура
float
r_hmdty
[
3
];
//Влажность. Если = 101 - значит нет данных
float
r_hmdty
[
3
];
//Влажность. Если = 101 - значит нет данных
bool
r_bat
[
3
],
bat_
;
//Флаг батареи
bool
r_bat
[
3
],
bat_
pcr
,
bat_wrt
;
//Флаг батареи
bool
r_isreceived
[
3
];
//Флаг о том, что по данному каналу приходил хоть один правильный пакет и данные актуальны
bool
r_isreceived
[
3
];
//Флаг о том, что по данному каналу приходил хоть один правильный пакет и данные актуальны
word
r_type
[
3
];
//Тип датчика
word
r_type
[
3
];
//Тип датчика
...
@@ -294,7 +292,7 @@ if (oregon.sens_type == WGR800 && oregon.crc_c){
...
@@ -294,7 +292,7 @@ if (oregon.sens_type == WGR800 && oregon.crc_c){
r_bat
[
_chnl
]
=
oregon
.
sens_battery
;
r_bat
[
_chnl
]
=
oregon
.
sens_battery
;
r_isreceived
[
_chnl
]
=
1
;
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];
//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
;
wa_speed
=
oregon
.
sens_avg_ws
;
mw_speed
=
oregon
.
sens_max_ws
;
mw_speed
=
oregon
.
sens_max_ws
;
// translate rumb to direction in DEG
// translate rumb to direction in DEG
...
@@ -343,7 +341,7 @@ if (oregon.sens_type == WGR800 && oregon.crc_c){
...
@@ -343,7 +341,7 @@ if (oregon.sens_type == WGR800 && oregon.crc_c){
//Serial.print("checksumm = ");
//Serial.print("checksumm = ");
//Serial.print(oregon.crc_c, HEX);
//Serial.print(oregon.crc_c, HEX);
//Serial.print(oregon.sens_id);
//Serial.print(oregon.sens_id);
bat_
=
oregon
.
sens_battery
;
bat_
pcr
=
oregon
.
sens_battery
;
r_rate
=
oregon
.
rain_rate
;
r_rate
=
oregon
.
rain_rate
;
r_total
=
oregon
.
total_rain
;
r_total
=
oregon
.
total_rain
;
}
}
...
@@ -427,7 +425,7 @@ bool send_data() {
...
@@ -427,7 +425,7 @@ bool send_data() {
Serial
.
println
(
' '
);
Serial
.
println
(
' '
);
String
s
=
mac
;
String
s
=
mac
;
Serial
.
print
(
s
);
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(s);
// if (TEST_MODE) Serial.println("YOU IN TEST MODE !!!!!!!!!!!");
// if (TEST_MODE) Serial.println("YOU IN TEST MODE !!!!!!!!!!!");
// 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() {
...
@@ -436,7 +434,7 @@ bool send_data() {
sendOregonData
();
sendOregonData
();
//Завершаем передачу
//Завершаем передачу
client
.
print
ln
(
"##"
);
client
.
print
(
"##"
);
Serial
.
println
(
"##"
);
Serial
.
println
(
"##"
);
//Ждём отключения клиента
//Ждём отключения клиента
cur_mark
=
millis
();
cur_mark
=
millis
();
...
@@ -492,7 +490,7 @@ void sendOregonData() {
...
@@ -492,7 +490,7 @@ void sendOregonData() {
if
(
!
TEST_MODE
)
client
.
print
(
s
);
if
(
!
TEST_MODE
)
client
.
print
(
s
);
// v battery
// v battery
s
=
"
\n
#VBAT1#"
;
s
=
"
\n
#VBAT1#"
;
switch
(
bat_
)
{
switch
(
bat_
wrt
)
{
case
1
:
{
s
+=
" 99"
;
break
;}
case
1
:
{
s
+=
" 99"
;
break
;}
default:
s
+=
" 50"
;
default:
s
+=
" 50"
;
}
}
...
@@ -502,30 +500,30 @@ void sendOregonData() {
...
@@ -502,30 +500,30 @@ void sendOregonData() {
//#####################################
//#####################################
// PCR800 rain deviation - especially for narodmon.ru #######################################
// PCR800 rain deviation - especially for narodmon.ru #######################################
float
rain_deviation
;
// rain_deviation
//
float rain_deviation; // rain_deviation
//r_rate = oregon.rain_rate;
//
r_rate = oregon.rain_rate;
//r_total = oregon.total_rain;
//
r_total = oregon.total_rain;
//rain_deviation = random(1, 3) * 0.0025;
//
rain_deviation = random(1, 3) * 0.0025;
//
total_rain_deviation = random(1, 3) * 0.0001;
//
total_rain_deviation = random(1, 3) * 0.0001;
// PCR800 rain rate ########################################################################
// PCR800 rain rate ########################################################################
s
=
"
\n
#RAIN1#"
;
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
;
r_rate
+=
random
(
0
,
3
)
*
0.0026
;
s
+=
String
(
r_rate
,
4
);
// show .000 digits - important for narodmon.ru
s
+=
String
(
r_rate
,
4
);
// show .000 digits - important for narodmon.ru
Serial
.
println
(
s
);
Serial
.
println
(
s
);
if
(
!
TEST_MODE
)
client
.
print
(
s
);
if
(
!
TEST_MODE
)
client
.
print
(
s
);
// PCR800 total rain ######################################################################
// PCR800 total rain ######################################################################
s
=
"
\n
#RAIN2#"
;
s
=
"
\n
#RAIN2#"
;
// r_total += rain_deviation;
// r_total += rain_deviation;
r_total
+=
random
(
-
1
,
1
)
*
0.0025
;
r_total
+=
random
(
0
,
3
)
*
0.0026
;
s
+=
String
(
r_total
,
4
);
// show .0000 digits - for narodmon.ru
s
+=
String
(
r_total
,
4
);
// show .0000 digits - for narodmon.ru
Serial
.
println
(
s
);
Serial
.
println
(
s
);
if
(
!
TEST_MODE
)
client
.
print
(
s
);
if
(
!
TEST_MODE
)
client
.
print
(
s
);
// v battery
// v battery
s
=
"
\n
#VBAT2#"
;
s
=
"
\n
#VBAT2#"
;
//s += bat_;
//s += bat_;
switch
(
bat_
)
{
switch
(
bat_
pcr
)
{
case
1
:
{
s
+=
" 99"
;
break
;}
case
1
:
{
s
+=
" 99"
;
break
;}
default:
s
+=
" 50"
;
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