silenius

Untitled

Feb 9th, 2021 (edited)
315
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include "Arduino.h"
  2. #include "heltec.h"
  3.  
  4. #define BAND    868E6
  5.  
  6. long lastReceiveTime = 0;
  7. unsigned int counter = 0;
  8. float snr = 0;
  9. String rssi = "RSSI --";  //rssi value
  10. String packSize = "--";   // size
  11. String packet;            // stores last packet
  12.  
  13. int degLo, degLat;
  14. float minLat, minLo;
  15. float latconv, longconv;
  16. float dirtylong, dirtylat;
  17. int latitude, longitude;
  18. uint8_t lat1,lat2,lat3;
  19. uint8_t lon1,lon2,lon3;
  20.  
  21. bool deepsleepflag=false;
  22. bool receiveflag = false;
  23.  
  24. void interrupt_GPIO0()
  25. {
  26.   delay(10);
  27.   if(digitalRead(0)==0){  
  28.   deepsleepflag=true;
  29.   }
  30. }
  31.  
  32. void setup()
  33. {
  34.   Heltec.begin(true /*DisplayEnable Enable*/, true /*LoRa Enable*/, true /*Serial Enable*/, true /*LoRa use PABOOST*/, BAND /*LoRa RF working band*/);
  35.   attachInterrupt(0,interrupt_GPIO0,FALLING);
  36.   LoRa.setSpreadingFactor(12);
  37. //LoRa.setSignalBandwidth(500E3);
  38.   LoRa.onReceive(onReceive);
  39.   LoRa.receive();
  40.   displaySendReceive();
  41. }
  42. void loop()
  43. {
  44.  if(deepsleepflag)
  45.   {
  46.   LoRa.end();
  47.   LoRa.sleep();
  48.   delay(100);
  49.   pinMode(4,INPUT);
  50.   pinMode(5,INPUT);
  51.   pinMode(14,INPUT);
  52.   pinMode(15,INPUT);
  53.   pinMode(16,INPUT);
  54.   pinMode(17,INPUT);
  55.   pinMode(18,INPUT);
  56.   pinMode(19,INPUT);
  57.   pinMode(26,INPUT);
  58.   pinMode(27,INPUT);
  59.   digitalWrite(Vext,HIGH);
  60.   delay(2);
  61.   esp_deep_sleep_start();
  62.   }
  63.  
  64.   if(receiveflag)
  65.   {
  66.   digitalWrite(LED, HIGH);
  67.   counter++;
  68.   lastReceiveTime = millis();
  69.   digitalWrite(25,HIGH);
  70.   delay(1000);
  71.   receiveflag = false;  
  72.   digitalWrite(LED, LOW);
  73.   LoRa.receive();
  74.   displaySendReceive();
  75.   }
  76. }
  77.  
  78. void displaySendReceive()
  79.   {
  80.   Heltec.display -> clear();
  81.   Heltec.display -> drawString(0, 50, "Counter " + (String)(counter-1));
  82.   Heltec.display -> drawString(0, 0, "Received Size " + packSize);
  83.   Heltec.display -> drawString(0, 10, String(latconv,10));
  84.   Heltec.display -> drawString(0, 20, String(longconv,10));
  85.   Heltec.display -> drawString(0, 40, "RSSI  " + rssi + "db " + "  SNR " + String(snr, 2));
  86.   Heltec.display -> display();
  87.   delay(100);
  88.   }
  89.  
  90. void onReceive(int packetSize)//LoRa receiver interrupt service
  91. {
  92.   //if (packetSize == 0) return;
  93.    packSize = String(packetSize,DEC);
  94.    while (LoRa.available())
  95.      {
  96.      packet += (char) LoRa.read();
  97.      }
  98.  
  99.  
  100.  
  101.  /* for(int i = 0;i<6;i++)
  102.    {
  103.     packet[i]= (char) LoRa.read();
  104.    }
  105. */
  106.   rssi = String(LoRa.packetRssi(), DEC);    
  107.   snr = LoRa.packetSnr();
  108.   receiveflag = true;
  109.  
  110.  
  111.  
  112.   convert();
  113.   //sendGGA("$GPGGA,", 6);
  114. }
  115.  
  116. void convert()
  117. {
  118.   lat1 = packet[0];
  119.   lat2 = packet[1];
  120.   lat3 = packet[2];
  121.   latitude = (lat1*65536) + (lat2*256) + lat3;
  122.  
  123.   latconv = (latitude / 93206.75) - 90;
  124.   //degLat = latconv;
  125.   //minLat = (latconv - degLat)*60;
  126.   //dirtylat = (degLat*100) + minLat;
  127.  
  128.   Serial.println(String(latconv,5));
  129.  
  130.   lon1 = packet[3];
  131.   lon2 = packet[4];
  132.   lon3 = packet[5];
  133.   latitude = (lat1*65536) + (lat2*256) + lat3;
  134.  
  135.   /*longitude = (uint8_t)packet[3]*65536 + (uint8_t)packet[4]*256 + (uint8_t)packet[5];
  136.   longconv = (longitude / 16777215.0 * 360) - 180;
  137.   degLo = (longitude / 16777215.0 * 360) - 180;
  138.   minLo = ((longitude / 16777215.0 * 360) - 180 - degLo)*60;
  139.   dirtylong = (degLo*100) + minLo;*/
  140. }
  141.  
  142. PC: 0x400d5866: String::String(float, unsigned char) at C:\Users\chaos\Documents\Arduino\hardware\heltec\esp32\cores\esp32\WString.cpp line 111
  143. EXCVADDR: 0x00000000
  144.  
  145. Decoding stack results
  146. 0x400d5866: String::String(float, unsigned char) at C:\Users\chaos\Documents\Arduino\hardware\heltec\esp32\cores\esp32\WString.cpp line 111
  147. 0x400d1332: convert() at C:\Users\chaos\Documents\Arduino\gps_receiver/gps_receiver.ino line 126
  148. 0x400d14a1: onReceive(int) at C:\Users\chaos\Documents\Arduino\gps_receiver/gps_receiver.ino line 110
  149. 0x400d207c: LoRaClass::handleDio0Rise() at C:\Users\chaos\Documents\Arduino\libraries\Heltec_ESP32_Dev-Boards\src\lora\LoRa.cpp line 518
  150. 0x400d2092: LoRaClass::onDio0Rise() at C:\Users\chaos\Documents\Arduino\libraries\Heltec_ESP32_Dev-Boards\src\lora\LoRa.cpp line 548
  151. 0x4008101d: __onPinInterrupt at C:\Users\chaos\Documents\Arduino\hardware\heltec\esp32\cores\esp32\esp32-hal-gpio.c line 220
  152. 0x400d11e6: loop() at C:\Users\chaos\Documents\Arduino\gps_receiver/gps_receiver.ino line 44
  153. 0x400d5a35: loopTask(void*) at C:\Users\chaos\Documents\Arduino\hardware\heltec\esp32\cores\esp32\main.cpp line 19
  154. 0x40086829: vPortTaskWrapper at /Users/ficeto/Desktop/ESP32/ESP32/esp-idf-public/components/freertos/port.c line 143
Add Comment
Please, Sign In to add comment