reciver_only.ino
7.41 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
#include <Oregon_NR_MY.h>
//#include <Oregon_TR.h>
//#define UNO
#ifdef UNO
//Oregon_NR oregon(2, 0, 13); // Для Arduino UNO/Nano - приёмник на выводе D2, Прерывание 0, Светодиод приёма на вывод 13
Oregon_NR oregon(2, 0); // Если светодиод не нужен
#endif
#define WEMOS_D1
//#define PCR800 0x2914
#ifdef WEMOS_D1
Oregon_NR oregon(13, 13, 2, true); // для Wemos D1 - датчик на выводе D7 (GPIO13), Светодиод на D2 подтянут к +пит.
#endif
void setup() {
Serial.begin(115200);
//вкючение прослушивания радиоканала
oregon.start();
oregon.receiver_dump = true; //true - Включает "осциллограф" - отображение данных, полученных с приёмника
//Если не распознаются последние байты принятого пакета можно попробовать подстроить частоту захвата данных
oregon.timing_correction = 0; // коррекция частоты завхвата данных. Обычно достаоточно подобрать значение от -5 до 5
oregon.decode_method = 2; //или использовать метод 3 для декодирования
}
void loop() {
//////////////////////////////////////////////////////////////////////
//Захват пакета,/////////////////////////////////////////////////////
oregon.capture(1); // 1 - выводить в Serial сервисную информацию
//Захваченные данные годны до следующего вызова capture
//ОБработка полученного пакета//////////////////////////////////////////////
if (oregon.captured) {
//Вывод информации в Serial
Serial.print ((float) millis() / 1000, 1); //Время
Serial.print ("s\t\t");
//Версия протокола
if (oregon.ver == 2) Serial.print(" ");
if (oregon.ver == 3) Serial.print("3 ");
//Информация о восстановлени пакета
if (oregon.restore_sign & 0x01) Serial.print("s"); //восстановлены одиночные такты
else Serial.print(" ");
if (oregon.restore_sign & 0x02) Serial.print("d"); //восстановлены двойные такты
else Serial.print(" ");
if (oregon.restore_sign & 0x04) Serial.print("p "); //исправленна ошибка при распознавании версии пакета
else Serial.print(" ");
//Вывод полученного пакета. Точки - это ниблы, содержащие сомнительные биты
for (int q = 0;q < PACKET_LENGTH - 1; q++)
if (oregon.valid_p[q] == 0x0F) Serial.print(oregon.packet[q], HEX);
else Serial.print(".");
//Время обработки пакета
Serial.print(" ");
Serial.print(oregon.work_time);
Serial.print("ms ");
if ((oregon.sens_type == THGN132 || (oregon.sens_type & 0x0FFF) == RTGN318 || oregon.sens_type == THGR810 || oregon.sens_type == THN132) && oregon.crc_c){
Serial.print("\t");
Serial.print(" TYPE: ");
if (oregon.sens_type == THGN132) Serial.print("THGN132N");
if (oregon.sens_type == THGR810) Serial.print("THGR810 ");
if ((oregon.sens_type & 0x0FFF) == RTGN318) Serial.print("RTGN318");
if (oregon.sens_type == THN132) Serial.print("THN132N ");
Serial.print(" CHNL: ");
Serial.print(oregon.sens_chnl);
if (oregon.sens_tmp >= 0 && oregon.sens_tmp < 10) Serial.print(" TMP: ");
if (oregon.sens_tmp < 0 && oregon.sens_tmp >-10) Serial.print(" TMP: ");
if (oregon.sens_tmp <= -10) Serial.print(" TMP:");
if (oregon.sens_tmp >= 10) Serial.print(" TMP: ");
Serial.print(oregon.sens_tmp, 1);
Serial.print("C ");
if (oregon.sens_type == THGN132 || oregon.sens_type == THGR810 || (oregon.sens_type & 0x0FFF) == RTGN318) {
Serial.print("HUM: ");
Serial.print(oregon.sens_hmdty, 0);
Serial.print("%");
}
else Serial.print(" ");
Serial.print(" BAT: ");
if (oregon.sens_battery) Serial.print("F "); else Serial.print("e ");
Serial.print("ID: ");
Serial.print(oregon.sens_id, HEX);
}
if (oregon.sens_type == WGR800 && oregon.crc_c){
Serial.print("\t");
float wnddata;
Serial.print(" TYPE: ");
Serial.print("WGR800");
Serial.print(" AVG WS: ");
Serial.print(oregon.sens_avg_ws, 1);
Serial.print("m/s MAX WS: ");
Serial.print(oregon.sens_max_ws, 1);
Serial.print("m/s WDIR: "); //N = 0, E = 4, S = 8, W = 12
Serial.print(oregon.sens_wdir);
Serial.print(" BAT: ");
if (oregon.sens_battery) Serial.print("F "); else Serial.print("e ");
Serial.print("ID: ");
Serial.print(oregon.sens_id, HEX);
// Serial.print("checksumm = ");
// Serial.print(oregon.crc_c, HEX);
// Serial.print(oregon.sens_id);
}
if (oregon.sens_type == UVN800 && oregon.crc_c){
Serial.print("\t");
float wnddata;
Serial.print(" TYPE: ");
Serial.print("UVN800");
Serial.print(" UV IDX: ");
Serial.print(oregon.UV_index);
Serial.print(" BAT: ");
if (oregon.sens_battery) Serial.print("F "); else Serial.print("e ");
Serial.print("ID: ");
Serial.print(oregon.sens_id, HEX);
}
if (oregon.sens_type == PCR800 && oregon.crc_c){
Serial.print("\t");
float wnddata;
Serial.print(" TYPE: ");
Serial.print("PCR800,");
Serial.print(" RAIN RATE: ");
Serial.print(oregon.rain_rate, 3);
//Serial.print(" | ");
//Serial.print(oregon.rain_rate, 1);
Serial.print(" mm/h, ");
Serial.print(" TOTAL RAIN: ");
Serial.print(oregon.total_rain, 5);
//Serial.print(" | ");
//Serial.print(oregon.total_rain, DEC);
Serial.print(" mm, ");
Serial.print(" BAT: ");
if (oregon.sens_battery) Serial.print("F "); else Serial.print("e ");
Serial.print("ID: ");
Serial.print(oregon.sens_id, HEX);
//Serial.print(oregon.oregon_data);
//Serial.print("checksumm = ");
//Serial.print(oregon.crc_c, HEX);
//Serial.print(oregon.sens_id);
}
#if ADD_SENS_SUPPORT == 1
if ((oregon.sens_type & 0xFF00) == THP && oregon.crc_c) {
Serial.print("\t");
Serial.print(" TYPE: ");
Serial.print("THP");
Serial.print(" CHNL: ");
Serial.print(oregon.sens_chnl);
if (oregon.sens_tmp > 0 && oregon.sens_tmp < 10) Serial.print(" TMP: ");
if (oregon.sens_tmp < 0 && oregon.sens_tmp > -10) Serial.print(" TMP: ");
if (oregon.sens_tmp <= -10) Serial.print(" TMP:");
if (oregon.sens_tmp >= 10) Serial.print(" TMP: ");
Serial.print(oregon.sens_tmp, 1);
Serial.print("C ");
Serial.print("HUM: ");
Serial.print(oregon.sens_hmdty, 1);
Serial.print("% ");
Serial.print("PRESS: ");
Serial.print(oregon.sens_pressure, 1);
Serial.print("Hgmm");
Serial.print(" BAT: ");
Serial.print(oregon.sens_voltage, 2);
Serial.print("V");
}
#endif
Serial.println();
}
}