silenius

Untitled

Feb 9th, 2021
789
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.  
  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.   convert();
  111.   //sendGGA("$GPGGA,", 6);
  112. }
  113.  
  114. void convert()
  115. {
  116.   lat1 = packet[0];
  117.   lat2 = packet[1];
  118.   lat3 = packet[2];
  119.   latitude = (lat1*256) + (lat2*16) + lat3;
  120.  
  121.  
  122.   latconv = (latitude / 93206.75) - 90;
  123.   degLat = latconv;
  124.   minLat = (latconv - degLat)*60;
  125.   //dirtylat = (degLat*100) + minLat;
  126.  
  127.  
  128.   Serial.println(String(latconv,10));
  129.   /*longitude = (uint8_t)packet[3]*256 + (uint8_t)packet[4]*16 + (uint8_t)packet[5];
  130.   longconv = (longitude / 16777215.0 * 360) - 180;
  131.   degLo = (longitude / 16777215.0 * 360) - 180;
  132.   minLo = ((longitude / 16777215.0 * 360) - 180 - degLo)*60;
  133.   dirtylong = (degLo*100) + minLo;*/
  134. }
  135.  
Advertisement
Add Comment
Please, Sign In to add comment