9 uint16_t rx_ok, rx1_count, rx1_error;
12 uint16_t rx2_count, rx2_error;
15 #ifndef WITH_RF24_CHECKSUM
16 #define WITH_RF24_CHECKSUM 0
19 volatile uint16_t wdcount = 0;
20 volatile uint8_t wdreset = 0;
21 volatile uint8_t tx_blink = 0;
22 volatile uint8_t rx_blink = 0;
25 #define POWER_DIVIDER (470.0+100.0)/100.0
29 #define POWER_AD_PIN A3
32 #ifndef SENDING_INTERVAL
33 #define SENDING_INTERVAL 120000L
36 #ifndef NEXT_TRY_INTERVAL
37 #define NEXT_TRY_INTERVAL 300000L
40 #ifndef MAX_BUFFER_AVAILABLE
41 #define MAX_BUFFER_AVAILABLE 2000
44 unsigned long last_alive, last_send, last_try;
47 uint8_t gprs_sendmode=0;
57 if (wdcount > 5*60*4) {
59 Serial.println(
"RESET");
62 asm volatile (
" jmp 0");
66 if (digitalRead(TX_LED)) {
67 digitalWrite(TX_LED, LOW);
70 digitalWrite(TX_LED, HIGH);
76 if (digitalRead(RX_LED)) {
77 digitalWrite(RX_LED, LOW);
80 digitalWrite(RX_LED, HIGH);
86 void initWatchdog(
void) {
89 Serial.println(
"Starting");
92 Sleep.setupWatchdog(WDTO_250MS);
94 pinMode(RX_LED, OUTPUT);
97 pinMode(TX_LED, OUTPUT);
107 void initRF24(
void) {
110 radio.setChannel(NRF24_CHANNEL);
111 radio.setPayloadSize(32);
112 radio.enableDynamicPayloads();
113 radio.setCRCLength(RF24_CRC_16);
114 radio.setDataRate(RF24_250KBPS);
115 radio.setPALevel(RF24_PA_MAX);
116 radio.setRetries(15, 15);
117 radio.setAutoAck(
true);
118 radio.openReadingPipe(0, pipe_0);
119 radio.openReadingPipe(1, pipe_1);
120 radio.openReadingPipe(2, pipe_2);
121 radio.openReadingPipe(3, pipe_3);
122 radio.openReadingPipe(4, pipe_4);
123 radio.openReadingPipe(5, pipe_5);
125 radio.startListening();
126 #ifdef NRF24_2CHANNEL
129 radio2.setChannel(NRF24_2CHANNEL);
130 radio2.setPayloadSize(32);
131 radio2.enableDynamicPayloads();
132 radio2.setCRCLength( RF24_CRC_16 );
133 radio2.setDataRate(RF24_250KBPS);
134 radio2.setPALevel(RF24_PA_MAX);
135 radio2.setRetries(15, 15);
136 radio2.setAutoAck(
true);
137 radio2.openReadingPipe(0, pipe_0);
138 radio2.openReadingPipe(1, pipe_1);
139 radio2.openReadingPipe(2, pipe_2);
140 radio2.openReadingPipe(3, pipe_3);
141 radio2.openReadingPipe(4, pipe_4);
142 radio2.openReadingPipe(5, pipe_5);
143 radio2.startListening();
147 uint8_t handleRF24(
void) {
148 uint8_t pipe_num, len;
150 char origin[] =
"P0";
151 #ifdef RF24_P1_LETTER
152 origin[0]=RF24_P1_LETTER;
156 while (radio.available(&pipe_num)) {
158 if (len = radio.getDynamicPayloadSize()) {
160 origin[1] =
'0' + pipe_num;
164 radio.read(payload, len);
165 for (uint8_t i = 0; i < len; i++) {
168 #if WITH_RF24_CHECKSUM
169 if(! client.validateChecksum()) {
188 #ifdef NRF24_2CHANNEL
190 #ifdef RF24_P2_LETTER
191 origin[0]=RF24_P2_LETTER;
196 while (radio2.available(&pipe_num)) {
199 if (len = radio2.getDynamicPayloadSize()) {
201 origin[1]=
'0'+pipe_num;
204 if (len > 32) len = 32;
205 radio2.read( payload, len );
206 for (uint8_t i = 0; i < len; i++) {
209 #if WITH_RF24_CHECKSUM
210 if(! client.validateChecksum()) {
225 if (count > 10)
break;
236 void startGPRS(uint8_t checkRF24 = 1) {
237 uint8_t try_count = 0;
238 while (try_count < 5) {
244 tx_res = client.begin(38400);
245 tx_blink = tx_res + 1;
248 Serial.print(
"Client.begin: ");
249 Serial.println(tx_res);
253 if (try_count % 2 == 0)
260 void checkAlive(
void) {
261 if ((millis() - last_alive) < SENDING_INTERVAL)
264 Serial.print(
"Alive: ");
265 Serial.print(millis());
267 Serial.println(last_alive);
271 #ifdef NRF24_2CHANNEL
277 #ifdef NRF24_2CHANNEL
283 last_alive = millis();
289 analogReference (DEFAULT);
290 for (uint8_t z = 0; z < 3; z++) {
291 analogRead (POWER_AD_PIN);
295 (
float) analogRead(POWER_AD_PIN) / 1023 * 3.3 * POWER_DIVIDER);
302 #ifdef NRF24_2CHANNEL
312 void checkSend(
void) {
316 if (!gprs_sendmode && (millis() - last_send) < SENDING_INTERVAL
317 && myBuffer.
available() < MAX_BUFFER_AVAILABLE)
319 if (tx_error>1 && (millis() - last_try) < NEXT_TRY_INTERVAL){
323 Serial.print(
"Send: ");
324 Serial.print(millis());
326 Serial.println(last_send);
328 last_send = millis();
332 if (tx_res = client.sendMultiFromBuffer(MAX_BUFFER_AVAILABLE)) {
336 #if (BOARD == GBoardPro)
337 unsigned long current_time=client.now().get();
338 unsigned long max_dev=7200;
340 else gprs_sendmode=0;
342 if( current_time-myRTC.now().get()<max_dev || myRTC.now().get()-current_time<max_dev )
343 myRTC.adjust(current_time);
346 tx_blink = tx_res + 1;
349 Serial.print(
"TX Error: ");
350 Serial.print(millis());
352 Serial.println(tx_error);
354 if (tx_error % 8 == 7) {
unsigned long available(void)
Definition: BayEOSBuffer.cpp:78
uint8_t addChannelValue(float v, uint8_t channel_number=0)
Definition: BayEOS.cpp:61
uint8_t writeToBuffer(void)
Definition: BayEOS.cpp:322
void startFrame(void)
Definition: BayEOS.cpp:8
void startOriginFrame(const char *o, uint8_t routed=0)
Definition: BayEOS.cpp:20
uint8_t addToPayload(uint8_t b)
Definition: BayEOS.h:469
void startDataFrame(uint8_t subtype=BayEOS_Float32le, uint8_t checksum=0)
Definition: BayEOS.cpp:12