Hi, i am trying to send sensor data from the HC-SR04 with an Arduino mega and a lora shield to The Things Network. I can send text messages like Hello World but it doesn't work with the sensor data. I am also not too expirienced with programming so would be great if someone could help me.
This is my code:
#include <HCSR04.h>
#include <arduino_lmic_user_configuration.h>
#include <arduino_lmic_hal_configuration.h>
#include <lmic.h>
#include <arduino_lmic.h>
#include <arduino_lmic_hal_boards.h>
#include <lmic.h>
#include <hal/hal.h>
#include <SPI.h>
//init HC SR04
int triggerPin = 2;
int echoPin = 3;
UltraSonicDistanceSensor distanceSensor(triggerPin, echoPin);
#ifdef COMPILE_REGRESSION_TEST
define FILLMEIN 0
#else
warning "You must replace the values marked FILLMEIN with real values from the TTN control panel!"
define FILLMEIN (#dont edit this, edit the lines that use FILLMEIN)
#endif
// This EUI must be in little-endian format, so least-significant-byte
// first. When copying an EUI from ttnctl output, this means to reverse
// the bytes. For TTN issued EUIs the last bytes should be 0xD5, 0xB3,
// 0x70.
static const u1_t PROGMEM APPEUI[8]={xx};
void os_getArtEui (u1_t* buf) { memcpy_P(buf, APPEUI, 8);}
// This should also be in little endian format, see above.
static const u1_t PROGMEM DEVEUI[8]={xx};
void os_getDevEui (u1_t* buf) { memcpy_P(buf, DEVEUI, 8);}
// This key should be in big endian format (or, since it is not really a
// number but a block of memory, endianness does not really apply). In
// practice, a key taken from ttnctl can be copied as-is.
static const u1_t PROGMEM APPKEY[16] = {xx};
void os_getDevKey (u1_t* buf) { memcpy_P(buf, APPKEY, 16);}
static osjob_t sendjob;
// Schedule TX every this many seconds (might become longer due to duty
// cycle limitations).
const unsigned TX_INTERVAL = 30;
// Pin mapping
const lmic_pinmap lmic_pins = {
.nss = 10,
.rxtx = LMIC_UNUSED_PIN,
.rst = 9,
.dio = {2, 6, 7 },
};
void onEvent (ev_t ev) {
Serial.print(os_getTime());
Serial.print(": ");
switch(ev) {
case EV_SCAN_TIMEOUT:
Serial.println(F("EV_SCAN_TIMEOUT"));
break;
case EV_BEACON_FOUND:
Serial.println(F("EV_BEACON_FOUND"));
break;
case EV_BEACON_MISSED:
Serial.println(F("EV_BEACON_MISSED"));
break;
case EV_BEACON_TRACKED:
Serial.println(F("EV_BEACON_TRACKED"));
break;
case EV_JOINING:
Serial.println(F("EV_JOINING"));
break;
case EV_JOINED:
Serial.println(F("EV_JOINED"));
{
u4_t netid = 0;
devaddr_t devaddr = 0;
u1_t nwkKey[16];
u1_t artKey[16];
LMIC_getSessionKeys(&netid, &devaddr, nwkKey, artKey);
Serial.print("netid: ");
Serial.println(netid, DEC);
Serial.print("devaddr: ");
Serial.println(devaddr, HEX);
Serial.print("artKey: ");
for (int i=0; i<sizeof(artKey); ++i) {
Serial.print(artKey*, HEX);*
- }*
- Serial.println("");*
- Serial.print("nwkKey: ");*
- for (int i=0; i<sizeof(nwkKey); ++i) {*
_ Serial.print(nwkKey*, HEX);_
_ }_
_ Serial.println("");_
_ }_
_ // Disable link check validation (automatically enabled*_
* // during join, but because slow data rates change max TX*
* // size, we don't use it in this example.*
* LMIC_setLinkCheckMode(0);
_ break;_
_ /
* || This event is defined but not used in the code. No*
* || point in wasting codespace on it.*
* ||*
* || case EV_RFU1:
|| Serial.println(F("EV_RFU1"));
_ || break;*
_ /_
case EV_JOIN_FAILED:
Serial.println(F("EV_JOIN_FAILED"));
_ break;_
case EV_REJOIN_FAILED:
Serial.println(F("EV_REJOIN_FAILED"));
_ break;_
case EV_TXCOMPLETE:
Serial.println(F("EV_TXCOMPLETE (includes waiting for RX windows)"));
if (LMIC.txrxFlags & TXRX_ACK)
_ Serial.println(F("Received ack"));_
_ if (LMIC.dataLen) {_
_ Serial.print(F("Received "));_
_ Serial.print(LMIC.dataLen);_
_ Serial.println(F(" bytes of payload"));_
_ }_
_ // Schedule next transmission*_
* os_setTimedCallback(&sendjob, os_getTime()+sec2osticks(TX_INTERVAL), do_send);
_ break;_
case EV_LOST_TSYNC:
Serial.println(F("EV_LOST_TSYNC"));
_ break;_
case EV_RESET:
Serial.println(F("EV_RESET"));
_ break;_
case EV_RXCOMPLETE:
_ // data received in ping slot*_
* Serial.println(F("EV_RXCOMPLETE"));
_ break;_
case EV_LINK_DEAD:
Serial.println(F("EV_LINK_DEAD"));
_ break;_
case EV_LINK_ALIVE:
Serial.println(F("EV_LINK_ALIVE"));
_ break;_
_ /
* || This event is defined but not used in the code. No*
* || point in wasting codespace on it.*
* ||*
* || case EV_SCAN_FOUND:
|| Serial.println(F("EV_SCAN_FOUND"));
_ || break;*
_ /_
case EV_TXSTART:
Serial.println(F("EV_TXSTART"));
_ break;_
_ default:_
_ Serial.print(F("Unknown event: "));_
_ Serial.println((unsigned) ev);_
_ break;_
_ }_
_}_
void do_send(osjob_t j){
* // Check if there is not a current TX/RX job running*
* if (LMIC.opmode & OP_TXRXPEND) {
Serial.println(F("OP_TXRXPEND, not sending"));
_ } else {_
_ //read distance from HC-SR04*_
uint32_t mydistance = distanceSensor.measureDistanceCm() * 100;
* Serial.println("Distance: " + String(mydistance));*
* byte payload[2];*
* payload[0] = highByte(mydistance);*
* payload[1] = lowByte(mydistance);*
* // Prepare upstream data transmission at the next possible time.*
LMIC_setTxData2(1, (uint8_t*)payload, sizeof(payload), 0);
* Serial.println(F("Packet queued"));*
* }*
* // Next TX is scheduled after TX_COMPLETE event.
_}_
void setup() {
_ delay(5000);_
_ while (! Serial);_
_ Serial.begin(9600);_
_ Serial.println(F("Starting"));*_
/*
* #ifdef VCC_ENABLE*
* // For Pinoccio Scout boards*
* pinMode(VCC_ENABLE, OUTPUT);
digitalWrite(VCC_ENABLE, HIGH);
_ delay(1000);_
_ #endif*_
*/
* // LMIC init*
* os_init();
_ // Reset the MAC state. Session and pending data transfers will be discarded._
LMIC_reset();
_ // Start job (sending automatically starts OTAA too)_
do_send(&sendjob);
_}_
void loop() {
os_runloop_once();
_}*_
Thank you