From f51f10574cb692dfccc060a36c7be0ca1394725b Mon Sep 17 00:00:00 2001 From: sessionm21 Date: Sun, 19 Apr 2020 04:22:39 +0100 Subject: [PATCH] move lora transmission to timer --- collar.cpp | 66 +++++++++++++++++++++++++++++------------------------- 1 file changed, 35 insertions(+), 31 deletions(-) diff --git a/collar.cpp b/collar.cpp index caab6fa..5eed5f4 100644 --- a/collar.cpp +++ b/collar.cpp @@ -37,7 +37,8 @@ uint8_t DevAddr[4] = {0x26, 0x02, 0x12, 0xB6}; unsigned char loraData[50] = {"hello LoRa"}; // How many times data transfer should occur, in seconds -const unsigned int sendInterval = 30; +// const unsigned int sendInterval = 30; +const unsigned int sendInterval = 60; // Pinout for Adafruit Feather 32u4 LoRa TinyLoRa lora = TinyLoRa(2, 10, 9); @@ -61,7 +62,7 @@ void clear_verts() { n_poly=0; } int pnpoly(int nvert, float *vertx, float *verty, float testx, float testy) -{ //from stack overflow +{ //from stack overflow, check that coordinate is within polygon boundary int i, j, c = 0; for (i = 0, j = nvert-1; i < nvert; j = i++) { if ( ((verty[i]>testy) != (verty[j]>testy)) && @@ -160,52 +161,55 @@ void setup() while(true); } - Fenceless_Coordinates coords; - coords.isr = 10; - coords.coord0.x = 1; coords.coord0.y = 2; - coords.coord1.x = 1; coords.coord1.y = 2; - coords.coord2.x = 1; coords.coord2.y = 2; - coords.coord3.x = 1; coords.coord3.y = 2; - coords.coord4.x = 1; coords.coord4.y = 2; - coords.coord5.x = 1; coords.coord5.y = 2; - coords.coord6.x = 1; coords.coord6.y = 2; - coords.coord7.x = 1; coords.coord7.y = 2; - coords.coord8.x = 1; coords.coord8.y = 2; - coords.coord9.x = 1; coords.coord9.y = 2; + Fenceless_CollarResponse coord; + coord.loc.x = 0; + coord.loc.y = 0; pb_ostream_t stream; stream = pb_ostream_from_buffer(loraData, sizeof(loraData)); - int err = pb_encode(&stream, Fenceless_Coordinates_fields, &coords); + int err = pb_encode(&stream, Fenceless_CollarResponse_fields, &coord); // Optional set transmit power. If not set default is +17 dBm. // Valid options are: -80, 1 to 17, 20 (dBm). // For safe operation in 20dBm: your antenna must be 3:1 VWSR or better // and respect the 1% duty cycle. lora.setPower(1); + + // start 1 second timer + TCCR1A = 0; + TCCR1B = 0; + + TCNT1 = 34286; // preload timer + TCCR1B |= (1 << CS12); // 256 prescaler + TIMSK1 |= (1 << TOIE1); // enable timer overflow interrupt + Serial.println("OK"); } +int sendCounter = 0; +ISR(TIMER1_OVF_vect) { + digitalWrite(LED_BUILTIN, sendCounter%2); + if(sendCounter==0) { + sendCounter = sendInterval; + + Serial.println("Sending LoRa Data..."); + lora.sendData(loraData, sizeof(loraData), lora.frameCounter); + // Optionally set the Frame Port (1 to 255) + // uint8_t framePort = 1; + // lora.sendData(loraData, sizeof(loraData), lora.frameCounter, framePort); + Serial.print("Frame Counter: ");Serial.println(lora.frameCounter); + lora.frameCounter++; + + Serial.println("delaying..."); + } + sendCounter--; +} void loop() { - Serial.println("Sending LoRa Data..."); - lora.sendData(loraData, sizeof(loraData), lora.frameCounter); - // Optionally set the Frame Port (1 to 255) - // uint8_t framePort = 1; - // lora.sendData(loraData, sizeof(loraData), lora.frameCounter, framePort); - Serial.print("Frame Counter: ");Serial.println(lora.frameCounter); - lora.frameCounter++; - - // blink LED to indicate packet sent - digitalWrite(LED_BUILTIN, HIGH); - delay(1000); - digitalWrite(LED_BUILTIN, LOW); - - Serial.println("delaying..."); - if(recieved) { Serial.println("Recieved something"); } else { Serial.println("Nothing yet"); } - delay(sendInterval * 1000); + delay(1000); }