Advertisement
Guest User

Untitled

a guest
Sep 12th, 2019
508
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.76 KB | None | 0 0
  1. #include <lmic.h>
  2. #include <hal/hal.h>
  3. #include <SPI.h>
  4. #include <LowPower.h>
  5.  
  6. const int wake_pin = 2;
  7. const int done_pin = 7;
  8. const int en_pin = 3;
  9. const int trig_pin = A4;
  10. const int echo_pin = A5;
  11.  
  12. //node_001_otaa (LSB)
  13. static const u1_t PROGMEM APPEUI[8] = {};
  14. void os_getArtEui (u1_t* buf) { memcpy_P(buf, APPEUI, 8);}
  15.  
  16. //node_001_otaa (LSB)
  17. static const u1_t PROGMEM DEVEUI[8] = {};
  18. void os_getDevEui (u1_t* buf) { memcpy_P(buf, DEVEUI, 8);}
  19.  
  20. //node_001_otaa (MSB)
  21. static const u1_t PROGMEM APPKEY[16] = {};
  22. void os_getDevKey (u1_t* buf) {  memcpy_P(buf, APPKEY, 16);}
  23.  
  24. uint8_t data[] = {0xFF,0xFF};
  25. static osjob_t sendjob;
  26. unsigned int sensor_data = 0x0000;
  27.  
  28. const lmic_pinmap lmic_pins = {
  29.     .nss = 10,
  30.     .rxtx = LMIC_UNUSED_PIN,
  31.     .rst = LMIC_UNUSED_PIN,
  32.     .dio = {0, 16, LMIC_UNUSED_PIN},
  33. };
  34.  
  35. void wakeUp()
  36. {
  37.       detachInterrupt(0);
  38.       do_send(&sendjob);
  39.       os_runloop_once();
  40. }
  41.  
  42. unsigned int get_distance(void)
  43. {
  44.     digitalWrite(trig_pin, LOW);
  45.     delayMicroseconds(2);
  46.     digitalWrite(trig_pin, HIGH);
  47.     delayMicroseconds(10);
  48.     digitalWrite(trig_pin, LOW);
  49.     unsigned int distance = pulseIn(echo_pin, HIGH);
  50.     distance = distance/58;
  51.     pinMode(echo_pin, INPUT);
  52.     pinMode(trig_pin, OUTPUT);
  53.     return distance;
  54. }
  55.  
  56. void onEvent (ev_t ev) {
  57.     os_getTime();
  58.     switch(ev) {
  59.         case EV_JOINED:
  60.             done_pulse();
  61.             digitalWrite(en_pin, LOW);
  62.             attachInterrupt(0, wakeUp, RISING);
  63.             LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF);
  64.           break;
  65.         case EV_TXCOMPLETE:
  66.              done_pulse();
  67.              digitalWrite(en_pin, LOW);
  68.              attachInterrupt(0, wakeUp, RISING);
  69.              LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF);
  70.             break;
  71.         default:
  72.             break;
  73.     }
  74. }
  75.  
  76. void do_send(osjob_t* j){
  77.  
  78.  
  79.     if (LMIC.opmode & OP_TXRXPEND) {
  80.     } else {
  81.         digitalWrite(en_pin, HIGH);
  82.         sensor_data = get_distance();
  83.         data[0] = sensor_data & 255;
  84.         data[1] = (sensor_data >> 8) & 255;  
  85.         LMIC_setTxData2(1, data, sizeof(data), 0);
  86.     }
  87. }
  88.  
  89. void setup() {
  90.  
  91.     pinMode(echo_pin, INPUT);
  92.     pinMode(trig_pin, OUTPUT);
  93.        
  94.     pinMode(en_pin, OUTPUT);
  95.     digitalWrite(en_pin,LOW);    
  96.  
  97.     pinMode(done_pin, OUTPUT);
  98.     digitalWrite(done_pin,HIGH);
  99.  
  100.     attachInterrupt(0, wakeUp, RISING);
  101.  
  102.     os_init();
  103.     LMIC_reset();
  104.     LMIC_setClockError (MAX_CLOCK_ERROR * 15/100);
  105.     LMIC_setLinkCheckMode(0);
  106.     LMIC.dn2Dr = DR_SF12;
  107.     LMIC_setDrTxpow (DR_SF12, 13);
  108.     LMIC_startJoining();
  109.    
  110. }
  111.  
  112. void loop() {
  113.    os_runloop_once();
  114. }
  115.  
  116. void done_pulse(void) {
  117. digitalWrite(done_pin,LOW);
  118. delay(10);
  119. digitalWrite(done_pin,HIGH);
  120. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement