silenius

Untitled

Feb 8th, 2021 (edited)
672
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include "Arduino.h"
  2. #include "heltec.h"
  3. //#include "WiFi.h"
  4.  
  5. #define BAND    868E6
  6.  
  7. float snr = 0;
  8. String rssi = "RSSI --";  //rssi value
  9. String packSize = "--";   // size
  10. double latitude;
  11. double longitude;
  12. float latconv;
  13. float longconv;
  14. String packet;            // stores last packet
  15. unsigned int counter = 0; // counter for recieved packets
  16. bool receiveflag = false; // software flag for LoRa receiver, received data makes it true.
  17. uint32_t LatitudeBinary, LongitudeBinary;
  18.  
  19. bool deepsleepflag=false;
  20.  
  21. void setup()
  22. {
  23.   Heltec.begin(true /*DisplayEnable Enable*/, true /*LoRa Enable*/, true /*Serial Enable*/, true /*LoRa use PABOOST*/, BAND /*LoRa RF working band*/);
  24. //######################################################
  25.  
  26.   LoRa.setSpreadingFactor(12);
  27.  //LoRa.setSignalBandwidth(500E3);
  28.  
  29. //#######################################################
  30.   LoRa.onReceive(onReceive);
  31.   LoRa.receive();
  32.   displaySendReceive();
  33. }
  34. void loop()
  35. {
  36.  if(deepsleepflag)
  37.   {
  38.   LoRa.end();
  39.   LoRa.sleep();
  40.   delay(100);
  41.   pinMode(4,INPUT);
  42.   pinMode(5,INPUT);
  43.   pinMode(14,INPUT);
  44.   pinMode(15,INPUT);
  45.   pinMode(16,INPUT);
  46.   pinMode(17,INPUT);
  47.   pinMode(18,INPUT);
  48.   pinMode(19,INPUT);
  49.   pinMode(26,INPUT);
  50.   pinMode(27,INPUT);
  51.   digitalWrite(Vext,HIGH);
  52.   delay(2);
  53.   esp_deep_sleep_start();
  54.   }
  55.  
  56.  if(receiveflag)
  57.   {
  58.   digitalWrite(LED, HIGH);
  59.   counter++;
  60.   digitalWrite(25,HIGH);
  61.   displaySendReceive();
  62.   delay(1000);
  63.   receiveflag = false;  
  64.   digitalWrite(LED, LOW);
  65.   LoRa.receive();
  66.   displaySendReceive();
  67.   }
  68. }
  69.  
  70. void displaySendReceive()
  71.   {
  72.   Heltec.display -> drawString(0, 50, "Counter " + (String)(counter-1));
  73.   Heltec.display -> drawString(0, 0, "Received Size " + packSize);
  74.   Heltec.display -> drawString(0, 10, String(latconv, 10));
  75.   Heltec.display -> drawString(0, 20, String(longconv, 10));
  76.   Heltec.display -> drawString(0, 30, String(latitude) + " " + String(longitude));
  77.   Heltec.display -> drawString(0, 40, "RSSI  " + rssi + "db " + "  SNR " + String(snr, 2));
  78.   Heltec.display -> display();
  79.   delay(100);
  80.   Heltec.display -> clear();
  81.   }
  82. void onReceive(int packetSize)//LoRa receiver interrupt service
  83. {
  84.   //if (packetSize == 0) return;
  85.   packet = "";
  86.   packSize = String(packetSize,DEC);
  87.  
  88.   while (LoRa.available())
  89.    {
  90.     packet += (char) LoRa.read();
  91.    }
  92.  
  93.   Serial.println(packet);
  94.   rssi = String(LoRa.packetRssi(), DEC);    
  95.   snr = LoRa.packetSnr();
  96.   receiveflag = true;
  97.    
  98.   latitude = ((packet[0]<<16)) + ((packet[1]<<8)) + packet[2];
  99.   latconv = (latitude / 16777215.0 * 180) - 90;
  100.    
  101.   longitude = ((packet[3]<<16)) + ((packet[4]<<8)) + packet[5];
  102.   longconv = (longitude / 16777215.0 * 360) - 180;
  103. }
Add Comment
Please, Sign In to add comment