Editet BATTERY FLAG separated PCR and WRT sensor. Correct output data from PCR sensor

1 parent 3a75f630
...@@ -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.01; //0.001;
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.01;//0.001; //0x0A - 10; .000
tmprt += *(oregon_data + 13) * 0.0001; // .0000 tmprt += *(oregon_data + 13) * 0.001;//0.0001; // .0000
tmprt += (oregon_data[12]) * 0.00001; tmprt += (oregon_data[12]) * 0.0001;//0.00001;
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
} }
......
...@@ -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.println(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.println("##"); 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";
} }
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!