Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <lmic.h>
- #include <hal/hal.h>
- #include <SPI.h>
- #include <LowPower.h>
- const int wake_pin = 2;
- const int done_pin = 7;
- const int en_pin = 3;
- const int trig_pin = A4;
- const int echo_pin = A5;
- //node_001_otaa (LSB)
- static const u1_t PROGMEM APPEUI[8] = {};
- void os_getArtEui (u1_t* buf) { memcpy_P(buf, APPEUI, 8);}
- //node_001_otaa (LSB)
- static const u1_t PROGMEM DEVEUI[8] = {};
- void os_getDevEui (u1_t* buf) { memcpy_P(buf, DEVEUI, 8);}
- //node_001_otaa (MSB)
- static const u1_t PROGMEM APPKEY[16] = {};
- void os_getDevKey (u1_t* buf) { memcpy_P(buf, APPKEY, 16);}
- uint8_t data[] = {0xFF,0xFF};
- static osjob_t sendjob;
- unsigned int sensor_data = 0x0000;
- const lmic_pinmap lmic_pins = {
- .nss = 10,
- .rxtx = LMIC_UNUSED_PIN,
- .rst = LMIC_UNUSED_PIN,
- .dio = {0, 16, LMIC_UNUSED_PIN},
- };
- void wakeUp()
- {
- detachInterrupt(0);
- do_send(&sendjob);
- os_runloop_once();
- }
- unsigned int get_distance(void)
- {
- digitalWrite(trig_pin, LOW);
- delayMicroseconds(2);
- digitalWrite(trig_pin, HIGH);
- delayMicroseconds(10);
- digitalWrite(trig_pin, LOW);
- unsigned int distance = pulseIn(echo_pin, HIGH);
- distance = distance/58;
- pinMode(echo_pin, INPUT);
- pinMode(trig_pin, OUTPUT);
- return distance;
- }
- void onEvent (ev_t ev) {
- os_getTime();
- switch(ev) {
- case EV_JOINED:
- done_pulse();
- digitalWrite(en_pin, LOW);
- attachInterrupt(0, wakeUp, RISING);
- LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF);
- break;
- case EV_TXCOMPLETE:
- done_pulse();
- digitalWrite(en_pin, LOW);
- attachInterrupt(0, wakeUp, RISING);
- LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF);
- break;
- default:
- break;
- }
- }
- void do_send(osjob_t* j){
- if (LMIC.opmode & OP_TXRXPEND) {
- } else {
- digitalWrite(en_pin, HIGH);
- sensor_data = get_distance();
- data[0] = sensor_data & 255;
- data[1] = (sensor_data >> 8) & 255;
- LMIC_setTxData2(1, data, sizeof(data), 0);
- }
- }
- void setup() {
- pinMode(echo_pin, INPUT);
- pinMode(trig_pin, OUTPUT);
- pinMode(en_pin, OUTPUT);
- digitalWrite(en_pin,LOW);
- pinMode(done_pin, OUTPUT);
- digitalWrite(done_pin,HIGH);
- attachInterrupt(0, wakeUp, RISING);
- os_init();
- LMIC_reset();
- LMIC_setClockError (MAX_CLOCK_ERROR * 15/100);
- LMIC_setLinkCheckMode(0);
- LMIC.dn2Dr = DR_SF12;
- LMIC_setDrTxpow (DR_SF12, 13);
- LMIC_startJoining();
- }
- void loop() {
- os_runloop_once();
- }
- void done_pulse(void) {
- digitalWrite(done_pin,LOW);
- delay(10);
- digitalWrite(done_pin,HIGH);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement