Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: Custom_LSM303 Custom_UBloxGPS LRAT-mbed-os USBDevice mbed-lora-radio-drv stm32EEPROM
Fork of LRAT-example-lorawan by
Diff: main.cpp
- Revision:
- 34:341fb423e74b
- Parent:
- 33:e47306c32791
- Child:
- 35:73b3963c6dd3
diff -r e47306c32791 -r 341fb423e74b main.cpp
--- a/main.cpp Wed Aug 15 22:16:56 2018 +0000
+++ b/main.cpp Tue Aug 21 14:56:58 2018 +0000
@@ -14,10 +14,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+//#define TARGET_LRAT 1
+//#define SENSOR_TEMP 1
#include <stdio.h>
#include "mbed.h"
-//#include "unsupported/USBDevice/USBSerial/USBSerial.h"
-#include "USBSerial.h"
#include "lorawan/LoRaWANInterface.h"
#include "lorawan/system/lorawan_data_structures.h"
@@ -93,6 +93,14 @@
*/
static lorawan_app_callbacks_t callbacks;
+#if defined(TARGET_LRAT)
+#include "USBSerial.h"
+USBSerial serial;
+FileHandle* mbed::mbed_override_console(int) {
+ return &serial;
+}
+#endif
+
int mytime = 0;
int mybatt = 0;
double mylat = 0;
@@ -124,22 +132,23 @@
int16_t magMaxZ = 0;
#define NEOM8M_ADR_GPS 0x84
-#define LSM303_ADR_ACC 0x32
+//#define LSM303_ADR_ACC 0x32
#define LSM303_ADR_MAG 0x3C
#define NEOM8M_REG_GPS_LENH 0xFD
#define NEOM8M_REG_GPS_LENL 0xFE
#define NEOM8M_REG_GPS_DATA 0xFE
#define LSM303_REG_ACC_STATUS_REG_AUX_A 0x07
-#define LSM303_REG_ACC_OUT_TEMP_L_A 0x0C
-#define LSM303_REG_ACC_OUT_TEMP_H_A 0x0D
+//#define LSM303_REG_ACC_OUT_TEMP_L_A 0x0C
+//#define LSM303_REG_ACC_OUT_TEMP_H_A 0x0D
#define LSM303_REG_ACC_WHO_AM_I_A 0x0F
-#define LSM303_REG_ACC_TEMP_CFG_REG_A 0x1F
+//#define LSM303_REG_ACC_TEMP_CFG_REG_A 0x1F
#define LSM303_REG_ACC_CTRL_REG1_A 0x20
#define LSM303_REG_ACC_CTRL_REG2_A 0x21
#define LSM303_REG_ACC_CTRL_REG3_A 0x22
#define LSM303_REG_ACC_CTRL_REG4_A 0x23
#define LSM303_REG_ACC_CTRL_REG5_A 0x24
+#define LSM303_REG_ACC_CTRL_REG6_A 0x25
#define LSM303_REG_ACC_STATUS_REG_A 0x27
#define LSM303_REG_ACC_OUT_X_L_A 0x28
#define LSM303_REG_ACC_OUT_X_H_A 0x29
@@ -151,29 +160,88 @@
#define LSM303_REG_ACC_INT1_SRC_A 0x31
#define LSM303_REG_ACC_INT1_THS_A 0x32
#define LSM303_REG_ACC_INT1_DURATION_A 0x33
+/*
//#define LSM303_REG_MAG_CRA_REG_M 0x00
//#define LSM303_REG_MAG_MR_REG_M 0x02
+*/
#define LSM303_REG_MAG_OFFSET_X_REG_L_M 0x45
#define LSM303_REG_MAG_OFFSET_X_REG_H_M 0x46
#define LSM303_REG_MAG_OFFSET_Y_REG_L_M 0x47
#define LSM303_REG_MAG_OFFSET_Y_REG_H_M 0x48
#define LSM303_REG_MAG_OFFSET_Z_REG_L_M 0x49
#define LSM303_REG_MAG_OFFSET_Z_REG_H_M 0x4A
-#define LSM303_REG_MAG_WHO_AM_I_M 0x4F
-#define LSM303_REG_MAG_CFG_REG_A_M 0x60
-#define LSM303_REG_MAG_CFG_REG_C_M 0x62
+//#define LSM303_REG_MAG_WHO_AM_I_M 0x4F
+//#define LSM303_REG_MAG_CFG_REG_A_M 0x60
+//#define LSM303_REG_MAG_CFG_REG_B_M 0x61
+//#define LSM303_REG_MAG_CFG_REG_C_M 0x62
#define LSM303_REG_MAG_INT_CTRL_REG_M 0x63
#define LSM303_REG_MAG_INT_SOURCE_REG_M 0x64
#define LSM303_REG_MAG_INT_THS_L_REG_M 0x65
#define LSM303_REG_MAG_INT_THS_H_REG_M 0x66
-#define LSM303_REG_MAG_STATUS_REG_M 0x67
-#define LSM303_REG_MAG_OUTX_L_REG_M 0x68
-#define LSM303_REG_MAG_OUTX_H_REG_M 0x69
-#define LSM303_REG_MAG_OUTY_L_REG_M 0x6A
-#define LSM303_REG_MAG_OUTY_H_REG_M 0x6B
-#define LSM303_REG_MAG_OUTZ_L_REG_M 0x6C
-#define LSM303_REG_MAG_OUTZ_H_REG_M 0x6D
+//#define LSM303_REG_MAG_STATUS_REG_M 0x67
+//#define LSM303_REG_MAG_OUTX_L_REG_M 0x68
+//#define LSM303_REG_MAG_OUTX_H_REG_M 0x69
+//#define LSM303_REG_MAG_OUTY_L_REG_M 0x6A
+//#define LSM303_REG_MAG_OUTY_H_REG_M 0x6B
+//#define LSM303_REG_MAG_OUTZ_L_REG_M 0x6C
+//#define LSM303_REG_MAG_OUTZ_H_REG_M 0x6D
+#if defined(TARGET_LRAT)
+ #define LEDR PB_6
+ #define LEDG PB_7
+ #define LEDB PB_5
+ #define LEDW PB_2
+ #define LSM303_ADR_ACC 0x3A
+ #define LSM303_REG_MAG_WHO_AM_I_M 0x0F
+ #define LSM303_WHO_ACC 0x41
+ #define LSM303_WHO_MAG 0x3D
+ #define LSM303_CTRL_REG7_A 0x26
+ #define LSM303_REG_MAG_CTRL_REG1_M 0x20
+ #define LSM303_REG_MAG_CTRL_REG2_M 0x21
+ #define LSM303_REG_MAG_CTRL_REG3_M 0x22
+ #define LSM303_REG_MAG_CTRL_REG4_M 0x23
+ #define LSM303_REG_MAG_CTRL_REG5_M 0x24
+ #define LSM303_REG_MAG_STATUS_REG_M 0x27
+ #define LSM303_REG_MAG_OUTX_L_REG_M 0x28
+ #define LSM303_REG_MAG_OUTX_H_REG_M 0x29
+ #define LSM303_REG_MAG_OUTY_L_REG_M 0x2A
+ #define LSM303_REG_MAG_OUTY_H_REG_M 0x2B
+ #define LSM303_REG_MAG_OUTZ_L_REG_M 0x2C
+ #define LSM303_REG_MAG_OUTZ_H_REG_M 0x2D
+ #define LSM303_REG_MAG_TEMP_L_M 0x2E
+ #define LSM303_REG_MAG_TEMP_H_M 0x2F
+ #define LSM303_REG_MAG_TEMP_CFG_REG_A 0x1F
+ #define CFG_ACC_ADR LSM303_REG_ACC_CTRL_REG1_A
+ #define CFG_ACC_LEN 7
+ #define CFG_MAG_ADR LSM303_REG_MAG_CTRL_REG1_M
+ #define CFG_MAG_LEN 5
+#else
+ #define LEDR PB_7
+ #define LEDG PB_5
+ #define LEDB PB_6
+ #define LEDW PA_5
+ #define LSM303_ADR_ACC 0x32
+ #define LSM303_REG_MAG_WHO_AM_I_M 0x4F
+ #define LSM303_WHO_ACC 0x33
+ #define LSM303_WHO_MAG 0x40
+ #define LSM303_REG_ACC_OUT_TEMP_L_A 0x0C
+ #define LSM303_REG_ACC_OUT_TEMP_H_A 0x0D
+ #define LSM303_REG_ACC_TEMP_CFG_REG_A 0x1F
+ #define LSM303_REG_MAG_CFG_REG_A_M 0x60
+ #define LSM303_REG_MAG_CFG_REG_B_M 0x61
+ #define LSM303_REG_MAG_CFG_REG_C_M 0x62
+ #define LSM303_REG_MAG_STATUS_REG_M 0x67
+ #define LSM303_REG_MAG_OUTX_L_REG_M 0x68
+ #define LSM303_REG_MAG_OUTX_H_REG_M 0x69
+ #define LSM303_REG_MAG_OUTY_L_REG_M 0x6A
+ #define LSM303_REG_MAG_OUTY_H_REG_M 0x6B
+ #define LSM303_REG_MAG_OUTZ_L_REG_M 0x6C
+ #define LSM303_REG_MAG_OUTZ_H_REG_M 0x6D
+ #define CFG_ACC_ADR LSM303_REG_ACC_TEMP_CFG_REG_A // Start Disco at TEMP CFG.
+ #define CFG_ACC_LEN 7
+ #define CFG_MAG_ADR LSM303_REG_MAG_CFG_REG_A_M
+ #define CFG_MAG_LEN 3
+#endif
I2C i2c(PB_9, PB_8);
InterruptIn accPin(PB_14);
@@ -203,6 +271,19 @@
char cmdSendLoop[9] = "SendLoop";
+DigitalOut myLedR(LEDR);
+DigitalOut myLedG(LEDG);
+DigitalOut myLedB(LEDB);
+DigitalOut myLedW(LEDW);
+
+void magInitSequence();
+void accInitSequence();
+void gpsInitSequence();
+void tmpRead();
+void magRead();
+void accRead();
+void gpsRead();
+
void onAccIrq()
{
accHFire++;
@@ -215,46 +296,38 @@
void accDumpCfg()
{
- char start = LSM303_REG_ACC_CTRL_REG1_A;
- int i;
- for (i = 0; i < 6; i++)
+ char start = CFG_ACC_ADR;
+ for (int i = 0; i < CFG_ACC_LEN; i++)
{
cmd[0] = start + i;
i2c.write(LSM303_ADR_ACC, cmd, 1);
i2c.read(LSM303_ADR_ACC, &buf[i], 1);
}
- printf("CFGACC: |%02X %02X %02X %02X %02X %02X|\r\n", buf[0], buf[1], buf[2], buf[3], buf[4], buf[5]);
+ printf("CFGACC: | ");
+ for (int i = 0; i < CFG_ACC_LEN; i++)
+ {
+ printf("%02X ", buf[i]);
+ }
+ printf("|\r\n");
}
void magDumpCfg()
{
- char start = LSM303_REG_MAG_CFG_REG_A_M;
- int i;
- for (i = 0; i < 3; i++)
+ char start = CFG_MAG_ADR;
+ for (int i = 0; i < CFG_MAG_LEN; i++)
{
cmd[0] = start + i;
i2c.write(LSM303_ADR_MAG, cmd, 1);
i2c.read(LSM303_ADR_MAG, &buf[i], 1);
}
- printf("CFGMAG: |%02X %02X %02X|\r\n", buf[0], buf[1], buf[2]);
+ printf("CFGMAG: | ");
+ for (int i = 0; i < CFG_MAG_LEN; i++)
+ {
+ printf("%02X ", buf[i]);
+ }
+ printf("|\r\n");
}
-#define LEDR PB_7
-#define LEDG PB_5
-#define LEDB PB_6
-//#define LEDW PB_2
-
-DigitalOut myLedR(LEDR);
-DigitalOut myLedG(LEDG);
-DigitalOut myLedB(LEDB);
-//DigitalOut myLedW(LEDW);
-
-/*int myLedR = 0;
-int myLedG = 0;
-int myLedB = 0;
-int myLedW = 0;*/
-//uint8_t myFoo;
-
/**
* Entry point for application
*/
@@ -262,67 +335,17 @@
{
wait(4);
printf("\r\n-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\r\n");
- USBSerial serial;
-/* printf("Turning the lights on...\r\n");
- myLedR = 1;
- myLedG = 1;
- myLedB = 1;
- myLedW = 1;
- printf("The lights are on.\r\n");
- wait(0.5);
- printf("Turning the lights off...\r\n");
- myLedR = 0;
- myLedG = 0;
- myLedB = 0;
- myLedW = 0;
- printf("The lights are off.\r\n");
- wait(0.5);
- printf("Turning the lights on...\r\n");
- myLedR = 1;
- myLedG = 1;
- myLedB = 1;
- myLedW = 1;
- printf("The lights are on.\r\n");
- wait(0.5);
- printf("Turning the lights off...\r\n");
- myLedR = 0;
- myLedG = 0;
- myLedB = 0;
- myLedW = 0;
- printf("The lights are off.\r\n");
- printf("Initializing USBSerial.\r\n");
- USBSerial serial;
- printf("USBSerial initialized.\r\n");*/
- int myFoo = 1;
- while(1)
+
+ // Boot Flash
+ for (int i = 0; i <= 64; i++)
{
- myLedR = 1;
- //serial.printf("LED = Red\r\n");
- wait(0.5);
- myLedR = 0;
- myLedG = 1;
- //serial.printf("LED = Green\r\n");
- wait(0.5);
- myLedG = 0;
- myLedB = 1;
- //serial.printf("LED = Blue\r\n");
- wait(0.5);
- myLedB = 0;
- //myLedW = 1;
- //serial.printf("LED = White\r\n");
- //wait(0.5);
- //myLedW = 0;
- if (myFoo % 6 == 0)
- {
- myLedR = 1;
- myLedG = 1;
- myLedB = 1;
- //myLedW = 1;
- }
- myFoo++;
+ myLedR = i & 0x01;
+ myLedG = i & 0x02;
+ myLedB = i & 0x04;
+ myLedW = i & 0x08;
+ wait(0.01);
}
-
-
+ wait(4);
// setup tracing
setup_trace();
@@ -330,163 +353,33 @@
// stores the status of a call to LoRaWAN protocol
lorawan_status_t retcode;
- wait(4);
-
- printf("\r\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\r\n");
-
+ /* I2C init */
+ ret = 0x00;
+ magDumpCfg();
+ accDumpCfg();
+ magInitSequence();
+ accInitSequence();
+ gpsInitSequence();
magDumpCfg();
accDumpCfg();
- /* I2C init */
- ret = 0x00;
-
- cmd[0] = LSM303_REG_MAG_WHO_AM_I_M;
- i2c.write(LSM303_ADR_MAG, cmd, 1);
- i2c.read(LSM303_ADR_MAG, &ret, 1);
- res = (ret == 0x40 ? sPass : sFail);
- printf("MAG WhoAmI: %02x %s\r\n", ret, res);
-
- cmd[0] = LSM303_REG_MAG_CFG_REG_A_M;
- cmd[1] = 0x00; // Mag = 10 Hz (high-resolution and continuous mode)
- i2c.write(LSM303_ADR_MAG, cmd, 2);
- cmd[0] = LSM303_REG_MAG_CFG_REG_C_M;
- //cmd[1] = 0x01; // Mag data-ready interrupt enable
- cmd[1] = 0x40; // Mag enable interrupt on pin
- i2c.write(LSM303_ADR_MAG, cmd, 2);
- cmd[0] = LSM303_REG_MAG_CFG_REG_A_M;
- i2c.write(LSM303_ADR_MAG, cmd, 1);
- i2c.read(LSM303_ADR_MAG, &ret, 1);
- printf("MAG RetVal: %02x\r\n", ret);
-
- cmd[0] = LSM303_REG_ACC_WHO_AM_I_A;
- i2c.write(LSM303_ADR_ACC, cmd, 1);
- i2c.read(LSM303_ADR_ACC, &ret, 1);
- res = (ret == 0x33 ? sPass : sFail);
- printf("ACC WhoAmI: %02x %s\r\n", ret, res);
-
- cmd[0] = LSM303_REG_ACC_CTRL_REG1_A;
- cmd[1] = 0x57; // Accel = 100 Hz (normal mode)
- i2c.write(LSM303_ADR_ACC, cmd, 2);
+ cfg = 0x00;
+#if defined(TARGET_LRAT)
cmd[0] = LSM303_REG_ACC_CTRL_REG1_A;
i2c.write(LSM303_ADR_ACC, cmd, 1);
i2c.read(LSM303_ADR_ACC, &ret, 1);
- printf("ACC RetVal: %02x\r\n", ret);
-
- // Enable High Resolution Mode
- cmd[0] = LSM303_REG_ACC_CTRL_REG4_A;
- i2c.write(LSM303_ADR_ACC, cmd, 1);
- i2c.read(LSM303_ADR_ACC, &ret, 1);
- cmd[0] = LSM303_REG_ACC_CTRL_REG4_A;
- cmd[1] = ret | 0x08;
- i2c.write(LSM303_ADR_ACC, cmd, 2);
-
- // Enable Temp Sensor
- cmd[0] = LSM303_REG_ACC_TEMP_CFG_REG_A;
- cmd[1] = 0xC0;
- i2c.write(LSM303_ADR_ACC, cmd, 2);
- cmd[0] = LSM303_REG_ACC_CTRL_REG4_A;
- i2c.write(LSM303_ADR_ACC, cmd, 1);
- i2c.read(LSM303_ADR_ACC, &ret, 1);
- cmd[0] = LSM303_REG_ACC_CTRL_REG4_A;
- cmd[1] = ret | 0x80;
- i2c.write(LSM303_ADR_ACC, cmd, 2);
-
- // Set Full Scale to 4g
- /*
+ cfg |= (ret & 0x80) >> 7;
cmd[0] = LSM303_REG_ACC_CTRL_REG4_A;
i2c.write(LSM303_ADR_ACC, cmd, 1);
i2c.read(LSM303_ADR_ACC, &ret, 1);
- cmd[0] = LSM303_REG_ACC_CTRL_REG4_A;
- //cmd[1] = ret | 0x30; // 16g
- //cmd[1] = (ret & ~0x10) | 0x20; // 8g
- cmd[1] = (ret & ~0x20) | 0x10; // 4g
- //cmd[1] = ret & ~0x30; // 2g
- i2c.write(LSM303_ADR_ACC, cmd, 2);
- */
-/*
- // IRQ Init from Datasheet.
- cmd[0] = LSM303_REG_ACC_CTRL_REG1_A;
- cmd[1] = 0xA7;
- i2c.write(LSM303_ADR_ACC, cmd, 2);
- cmd[0] = LSM303_REG_ACC_CTRL_REG2_A;
- cmd[1] = 0x00;
- i2c.write(LSM303_ADR_ACC, cmd, 2);
- cmd[0] = LSM303_REG_ACC_CTRL_REG3_A;
- cmd[1] = 0x40;
- i2c.write(LSM303_ADR_ACC, cmd, 2);
- cmd[0] = LSM303_REG_ACC_CTRL_REG4_A;
- cmd[1] = 0x00;
- //cmd[1] = 0x10;
- i2c.write(LSM303_ADR_ACC, cmd, 2);
- cmd[0] = LSM303_REG_ACC_CTRL_REG5_A;
- cmd[1] = 0x08;
- i2c.write(LSM303_ADR_ACC, cmd, 2);
-*/
-
- magDumpCfg();
- accDumpCfg();
-
- /*
- // ACC INTERRUPT SETUP
- // Enable Interrupt Pin
- cmd[0] = LSM303_REG_ACC_CTRL_REG3_A;
- i2c.write(LSM303_ADR_ACC, cmd, 1);
- i2c.read(LSM303_ADR_ACC, &ret, 1);
- cmd[0] = LSM303_REG_ACC_CTRL_REG3_A;
- cmd[1] = ret | 0x40;
- i2c.write(LSM303_ADR_ACC, cmd, 2);
- // Enable Interrupt Latch
- cmd[0] = LSM303_REG_ACC_CTRL_REG5_A;
- i2c.write(LSM303_ADR_ACC, cmd, 1);
- i2c.read(LSM303_ADR_ACC, &ret, 1);
- cmd[0] = LSM303_REG_ACC_CTRL_REG5_A;
- cmd[1] = ret | 0x08;
- i2c.write(LSM303_ADR_ACC, cmd, 2);
-
- // Set Threshold/Duration/Config
- cmd[0] = LSM303_REG_ACC_INT1_THS_A;
- //cmd[1] = 0x10;
- //cmd[1] = 0x40;
- //cmd[1] = 0x60;
- cmd[1] = 0x7D;
- i2c.write(LSM303_ADR_ACC, cmd, 2);
- cmd[0] = LSM303_REG_ACC_INT1_DURATION_A;
- cmd[1] = 0x00;
- i2c.write(LSM303_ADR_ACC, cmd, 2);
- cmd[0] = LSM303_REG_ACC_INT1_CFG_A;
- cmd[1] = 0x2A;
- //cmd[1] = 0x0A;
- i2c.write(LSM303_ADR_ACC, cmd, 2);
- //accPin.rise(&onAccIrq);
- */
-
-
- /*
- // MAG INTERRUPT SETUP
- cmd[0] = LSM303_REG_MAG_INT_THS_L_REG_M;
- cmd[1] = 0xF4;
- i2c.write(LSM303_ADR_MAG, cmd, 2);
- cmd[0] = LSM303_REG_MAG_INT_THS_H_REG_M;
- cmd[1] = 0x01;
- i2c.write(LSM303_ADR_MAG, cmd, 2);
- cmd[0] = LSM303_REG_MAG_INT_CTRL_REG_M;
- cmd[1] = 0xE7;
- i2c.write(LSM303_ADR_MAG, cmd, 2);
- magPin.rise(&onMagIrq);
- */
-
-
- /*while(1)
- {
- time_t tNow = time(NULL);
- cmd[0] = LSM303_REG_ACC_INT1_SRC_A;
- i2c.write(LSM303_ADR_ACC, cmd, 1);
- i2c.read(LSM303_ADR_ACC, &ret, 1);
- printf("%08X - %02X - IRQ: %d\r\n", tNow, ret, irqFired);
- wait(1);
- }*/
-
- cfg = 0x00;
+ accScale = 1 << (!(ret & 0x30) ? 0 : ((ret & 0x30) >> 4) - 1);
+ cmd[0] = LSM303_REG_MAG_CTRL_REG2_M;
+ i2c.write(LSM303_ADR_MAG, cmd, 1);
+ i2c.read(LSM303_ADR_MAG, &ret, 1);
+ cfg |= (ret & 0x60) >> 1;
+ //accShift = 0; // Full 16-bit resolution
+ accShift = 4;
+#else
cmd[0] = LSM303_REG_ACC_CTRL_REG1_A;
i2c.write(LSM303_ADR_ACC, cmd, 1);
i2c.read(LSM303_ADR_ACC, &ret, 1);
@@ -506,210 +399,21 @@
accShift = 4;
else
accShift = 6;
+#endif
printf("Quality: %02x AccShift: %d AccScale: %d\r\n", cfg, accShift, accScale);
-
- /*
- while(1)
- {
- cmd[0] = LSM303_REG_ACC_STATUS_REG_AUX_A;
- i2c.write(LSM303_ADR_ACC, cmd, 1);
- i2c.read(LSM303_ADR_ACC, &rda, 1);
- if (rda & 0x04)
- {
- cmd[0] = LSM303_REG_ACC_OUT_TEMP_L_A;
- i2c.write(LSM303_ADR_ACC, cmd, 1);
- i2c.read(LSM303_ADR_ACC, &buf[0], 1);
- cmd[0] = LSM303_REG_ACC_OUT_TEMP_H_A;
- i2c.write(LSM303_ADR_ACC, cmd, 1);
- i2c.read(LSM303_ADR_ACC, &buf[1], 1);
- myTemp = (int16_t)(buf[0] | (buf[1] << 8)) >> 6;
- printf("TMP: |%02X %02X %02X| (%d)\r\n", rda, buf[0], buf[1], myTemp);
- }
- }
- */
-
- /*
- while(1)
- {
- cmd[0] = LSM303_REG_ACC_STATUS_REG_AUX_A | 0x80;
- i2c.write(LSM303_ADR_ACC, cmd, 1);
- i2c.read(LSM303_ADR_ACC, &buf[0], 7);
- if (buf[0] & 0x04)
- {
- myTemp = (int16_t)(buf[5] | (buf[6] << 8)) >> 6;
- printf("TMP: |%02X %02X %02X| (%d)\r\n", buf[0], buf[5], buf[6], myTemp);
- }
- }
- */
- /*
while(1)
{
- cmd[0] = LSM303_REG_ACC_STATUS_REG_AUX_A;
- i2c.write(LSM303_ADR_ACC, cmd, 1);
- i2c.read(LSM303_ADR_ACC, &rda, 1);
- if (rda & 0x04)
- {
- cmd[0] = LSM303_REG_ACC_OUT_TEMP_L_A | 0x80;
- i2c.write(LSM303_ADR_ACC, cmd, 1);
- i2c.read(LSM303_ADR_ACC, &buf[0], 2);
- myTemp = (int16_t)(buf[0] | (buf[1] << 8)) >> 6;
- printf("TMP: |%02X %02X %02X| (%d)\r\n", rda, buf[0], buf[1], myTemp);
- }
- }
- */
-
- cmd[0] = LSM303_REG_ACC_STATUS_REG_AUX_A;
- i2c.write(LSM303_ADR_ACC, cmd, 1);
- i2c.read(LSM303_ADR_ACC, &rda, 1);
- if (rda & 0x04)
- {
- cmd[0] = LSM303_REG_ACC_OUT_TEMP_L_A | 0x80;
- i2c.write(LSM303_ADR_ACC, cmd, 1);
- i2c.read(LSM303_ADR_ACC, &buf[0], 2);
- myTemp = (int16_t)(buf[0] | (buf[1] << 8)) >> 6;
- printf("TMP: |%02X %02X %02X| (%d)\r\n", rda, buf[0], buf[1], myTemp);
- }
-
-/*
- //wait(8);
-
- while(1) {
- cmd[0] = LSM303_REG_MAG_STATUS_REG_M;
- i2c.write(LSM303_ADR_MAG, cmd, 1);
- i2c.read(LSM303_ADR_MAG, &rda, 1);
- if (rda)
- {
- cmd[0] = LSM303_REG_MAG_OUTX_L_REG_M;
- i2c.write(LSM303_ADR_MAG, cmd, 1);
- i2c.read(LSM303_ADR_MAG, &buf[0], 1);
- cmd[0] = LSM303_REG_MAG_OUTX_H_REG_M;
- i2c.write(LSM303_ADR_MAG, cmd, 1);
- i2c.read(LSM303_ADR_MAG, &buf[1], 1);
- cmd[0] = LSM303_REG_MAG_OUTY_L_REG_M;
- i2c.write(LSM303_ADR_MAG, cmd, 1);
- i2c.read(LSM303_ADR_MAG, &buf[2], 1);
- cmd[0] = LSM303_REG_MAG_OUTY_H_REG_M;
- i2c.write(LSM303_ADR_MAG, cmd, 1);
- i2c.read(LSM303_ADR_MAG, &buf[3], 1);
- cmd[0] = LSM303_REG_MAG_OUTZ_L_REG_M;
- i2c.write(LSM303_ADR_MAG, cmd, 1);
- i2c.read(LSM303_ADR_MAG, &buf[4], 1);
- cmd[0] = LSM303_REG_MAG_OUTZ_H_REG_M;
- i2c.write(LSM303_ADR_MAG, cmd, 1);
- i2c.read(LSM303_ADR_MAG, &buf[5], 1);
- myMagX = (buf[0] | (buf[1] << 8));
- myMagY = (buf[2] | (buf[3] << 8));
- myMagZ = (buf[4] | (buf[5] << 8));
- if (myMagX < magMinX)
- magMinX = myMagX;
- if (myMagY < magMinY)
- magMinY = myMagY;
- if (myMagZ < magMinZ)
- magMinZ = myMagZ;
- if (myMagX > magMaxX)
- magMaxX = myMagX;
- if (myMagY > magMaxY)
- magMaxY = myMagY;
- if (myMagZ > magMaxZ)
- magMaxZ = myMagZ;
- //printf("MAG: |%02X %02X %02X %02X %02X %02X| (%d,%d,%d)\r\n", buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], myMagX, myMagY, myMagZ);
- cmd[0] = LSM303_REG_MAG_INT_SOURCE_REG_M;
- i2c.write(LSM303_ADR_MAG, cmd, 1);
- i2c.read(LSM303_ADR_MAG, &ret, 1);
- if (ret & 0x01 && magEvent == 0 && ret & 0xFC)
- {
- magSFire++;
- magEvent = 1;
- magSHIRQ++;
+ time_t tNow = time(NULL);
+ printf("Clock: %d\r\n", tNow);
+#if defined(SENSOR_TEMP)
+ tmpRead();
+#endif
+ magRead();
+ accRead();
+ gpsRead();
+ wait(4);
}
- else if (!(ret & 0x01) && magEvent == 1 && !(ret & 0xFC))
- {
- magSFire++;
- magEvent = 0;
- magSLIRQ++;
- }
- printf("M|%02X|%02X %02X %02X %02X %02X %02X|%*d,%*d,%*d|%*d,%*d,%*d|%*d,%*d,%*d|%02X|%02X/%02X %02X/%02X\r\n", rda, buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], 6, myMagX, 6, myMagY, 6, myMagZ, 6, magMinX, 6, magMinY, 6, magMinZ, 6, magMaxX, 6, magMaxY, 6, magMaxZ, ret, magSHIRQ, magSLIRQ, magSFire, magHFire);
- }
-
- cmd[0] = LSM303_REG_ACC_STATUS_REG_A;
- i2c.write(LSM303_ADR_ACC, cmd, 1);
- i2c.read(LSM303_ADR_ACC, &rda, 1);
- if (rda)
- {
- cmd[0] = LSM303_REG_ACC_OUT_X_L_A;
- i2c.write(LSM303_ADR_ACC, cmd, 1);
- i2c.read(LSM303_ADR_ACC, &buf[0], 1);
- cmd[0] = LSM303_REG_ACC_OUT_X_H_A;
- i2c.write(LSM303_ADR_ACC, cmd, 1);
- i2c.read(LSM303_ADR_ACC, &buf[1], 1);
- cmd[0] = LSM303_REG_ACC_OUT_Y_L_A;
- i2c.write(LSM303_ADR_ACC, cmd, 1);
- i2c.read(LSM303_ADR_ACC, &buf[2], 1);
- cmd[0] = LSM303_REG_ACC_OUT_Y_H_A;
- i2c.write(LSM303_ADR_ACC, cmd, 1);
- i2c.read(LSM303_ADR_ACC, &buf[3], 1);
- cmd[0] = LSM303_REG_ACC_OUT_Z_L_A;
- i2c.write(LSM303_ADR_ACC, cmd, 1);
- i2c.read(LSM303_ADR_ACC, &buf[4], 1);
- cmd[0] = LSM303_REG_ACC_OUT_Z_H_A;
- i2c.write(LSM303_ADR_ACC, cmd, 1);
- i2c.read(LSM303_ADR_ACC, &buf[5], 1);
- myAccX = ((int16_t)(buf[0] | (buf[1] << 8)) >> accShift);
- myAccY = ((int16_t)(buf[2] | (buf[3] << 8)) >> accShift);
- myAccZ = ((int16_t)(buf[4] | (buf[5] << 8)) >> accShift);
- if (myAccX < accMinX)
- accMinX = myAccX;
- if (myAccY < accMinY)
- accMinY = myAccY;
- if (myAccZ < accMinZ)
- accMinZ = myAccZ;
- if (myAccX > accMaxX)
- accMaxX = myAccX;
- if (myAccY > accMaxY)
- accMaxY = myAccY;
- if (myAccZ > accMaxZ)
- accMaxZ = myAccZ;
- //printf("ACC: |%02X %02X %02X %02X %02X %02X| (%d,%d,%d)\r\n", buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], myAccX, myAccY, myAccZ);
- cmd[0] = LSM303_REG_ACC_INT1_SRC_A;
- i2c.write(LSM303_ADR_ACC, cmd, 1);
- i2c.read(LSM303_ADR_ACC, &ret, 1);
- if (ret & 0x40)
- {
- accSFire++;
- if (accEvent == 1)
- {
- accEvent = 0;
- accSLIRQ++;
- cmd[0] = LSM303_REG_ACC_INT1_THS_A;
- cmd[1] = 0x7D;
- i2c.write(LSM303_ADR_ACC, cmd, 2);
- cmd[0] = LSM303_REG_ACC_INT1_DURATION_A;
- cmd[1] = 0x00;
- i2c.write(LSM303_ADR_ACC, cmd, 2);
- cmd[0] = LSM303_REG_ACC_INT1_CFG_A;
- cmd[1] = 0x2A;
- i2c.write(LSM303_ADR_ACC, cmd, 2);
- }
- else
- {
- accEvent = 1;
- accSHIRQ++;
- cmd[0] = LSM303_REG_ACC_INT1_THS_A;
- cmd[1] = 0x50;
- i2c.write(LSM303_ADR_ACC, cmd, 2);
- cmd[0] = LSM303_REG_ACC_INT1_DURATION_A;
- //cmd[1] = 0x7D;
- cmd[1] = 0x03;
- i2c.write(LSM303_ADR_ACC, cmd, 2);
- cmd[0] = LSM303_REG_ACC_INT1_CFG_A;
- cmd[1] = 0x95;
- i2c.write(LSM303_ADR_ACC, cmd, 2);
- }
- }
- printf("A|%02X|%02X %02X %02X %02X %02X %02X|%*d,%*d,%*d|%*d,%*d,%*d|%*d,%*d,%*d|%02X|%04X/%04X %04X/%04X\r\n", rda, buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], 5, myAccX, 5, myAccY, 5, myAccZ, 5, accMinX, 5, accMinY, 5, accMinZ, 5, accMaxX, 5, accMaxY, 5, accMaxZ, ret, accSHIRQ, accSLIRQ, accSFire, accHFire);
- }
- }*/
// Initialize LoRaWAN stack
if (lorawan.initialize(&ev_queue) != LORAWAN_STATUS_OK) {
@@ -767,7 +471,6 @@
uint16_t packet_len;
int16_t retcode;
float sensor_value;
- bool gpsDone = false;
if (ds1820.begin()) {
ds1820.startConversion();
@@ -781,7 +484,564 @@
time_t tNow = time(NULL);
printf("Clock: %d\r\n", tNow);
+
+#if defined(SENSOR_TEMP)
+ tmpRead();
+#endif
+ magRead();
+ accRead();
+ gpsRead();
+
+ int ilat = (int)(mylat * 100000);
+ int ilon = (int)(mylon * 100000);
+ printf("TIM: %d, SAT: %d, LAT: %d, LON: %d\r\n", mytime, mybatt, ilat, ilon);
+ packet_len = 11;
+ tx_buffer[0] = (mytime >> 24) & 0xFF;
+ tx_buffer[1] = (mytime >> 16) & 0xFF;
+ tx_buffer[2] = (mytime >> 8) & 0xFF;
+ tx_buffer[3] = (mytime >> 0) & 0xFF;
+ tx_buffer[4] = ((mybatt << 4) & 0xF0) | ((ilat >> 22) & 0x0F);
+ tx_buffer[5] = (ilat >> 14) & 0xFF;
+ tx_buffer[6] = (ilat >> 6) & 0xFF;
+ tx_buffer[7] = ((ilat << 2) & 0xFC) | ((ilon >> 24) & 0x03);
+ tx_buffer[8] = (ilon >> 16) & 0xFF;
+ tx_buffer[9] = (ilon >> 8) & 0xFF;
+ tx_buffer[10] = (ilon >> 0) & 0xFF;
+ printf("\r\nBUF: |");
+ for (int i = 0; i < packet_len; i++) { printf("%02X", tx_buffer[i]); }
+ printf("|\r\n");
+ retcode = lorawan.send(MBED_CONF_LORA_APP_PORT, tx_buffer, packet_len,
+ MSG_CONFIRMED_FLAG);
+ if (retcode < 0) {
+ retcode == LORAWAN_STATUS_WOULD_BLOCK ? printf("send - WOULD BLOCK\r\n")
+ : printf("\r\n send() - Error code %d \r\n", retcode);
+
+ if (retcode == LORAWAN_STATUS_WOULD_BLOCK) {
+ //retry in 3 seconds
+ if (MBED_CONF_LORA_DUTY_CYCLE_ON) {
+ ev_queue.call_in(3000, send_message);
+ }
+ }
+ return;
+ }
+
+ printf("\r\n %d bytes scheduled for transmission \r\n", retcode);
+ memset(tx_buffer, 0, sizeof(tx_buffer));
+
+ //LED Confirmation Output - MESSAGE SENT
+ for (int i = 0; i < 10; i++) {
+ myLedG = 1;
+ wait(0.1);
+ myLedG = 0;
+ myLedR = 1;
+ wait(0.1);
+ myLedR = 0;
+ myLedB = 1;
+ wait(0.1);
+ myLedB = 0;
+ }
+}
+
+/**
+ * Receive a message from the Network Server
+ */
+static void receive_message()
+{
+ int16_t retcode;
+ retcode = lorawan.receive(MBED_CONF_LORA_APP_PORT, rx_buffer,
+ sizeof(rx_buffer),
+ MSG_CONFIRMED_FLAG|MSG_UNCONFIRMED_FLAG);
+
+ if (retcode < 0) {
+ printf("\r\n receive() - Error code %d \r\n", retcode);
+ return;
+ }
+
+ printf(" Data:");
+
+ for (uint8_t i = 0; i < retcode; i++) {
+ printf("%x", rx_buffer[i]);
+ }
+
+ printf("\r\n Data Length: %d\r\n", retcode);
+
+ /*
+ int startLoop = 0;
+ if (strncmp((char *)rx_buffer, cmdSendLoop, 8) == 0)
+ {
+ printf("SendLoop Command Received!\r\n");
+ startLoop = 1;
+ }
+ */
+
+ memset(rx_buffer, 0, sizeof(rx_buffer));
+ /*
+ if (startLoop)
+ send_message();
+ */
+}
+
+/**
+ * Event handler
+ */
+static void lora_event_handler(lorawan_event_t event)
+{
+ tr_debug("In lora_event_handler(%d)...", event);
+ switch (event) {
+ case CONNECTED:
+ printf("\r\n Connection - Successful \r\n");
+ if (MBED_CONF_LORA_DUTY_CYCLE_ON) {
+ send_message();
+ } else {
+ ev_queue.call_every(TX_TIMER, send_message);
+ }
+
+ break;
+ case DISCONNECTED:
+ ev_queue.break_dispatch();
+ printf("\r\n Disconnected Successfully \r\n");
+ break;
+ case TX_DONE:
+ printf("\r\n Message Sent to Network Server \r\n");
+ if (MBED_CONF_LORA_DUTY_CYCLE_ON) {
+ send_message();
+ }
+ break;
+ case TX_TIMEOUT:
+ case TX_ERROR:
+ case TX_CRYPTO_ERROR:
+ case TX_SCHEDULING_ERROR:
+ printf("\r\n Transmission Error - EventCode = %d \r\n", event);
+ // try again
+ if (MBED_CONF_LORA_DUTY_CYCLE_ON) {
+ send_message();
+ }
+ break;
+ case RX_DONE:
+ printf("\r\n Received message from Network Server \r\n");
+ receive_message();
+ break;
+ case RX_TIMEOUT:
+ case RX_ERROR:
+ printf("\r\n Error in reception - Code = %d \r\n", event);
+ break;
+ case JOIN_FAILURE:
+ printf("\r\n OTAA Failed - Check Keys \r\n");
+ break;
+ case UPLINK_REQUIRED:
+ printf("\r\n Uplink required by NS \r\n");
+ if (MBED_CONF_LORA_DUTY_CYCLE_ON) {
+ send_message();
+ }
+ break;
+ default:
+ MBED_ASSERT("Unknown Event");
+ }
+}
+
+void magInitSequence()
+{
+ myLedR = 0;
+ myLedG = 0;
+ cmd[0] = LSM303_REG_MAG_WHO_AM_I_M;
+ i2c.write(LSM303_ADR_MAG, cmd, 1);
+ i2c.read(LSM303_ADR_MAG, &ret, 1);
+ res = (ret == LSM303_WHO_MAG ? sPass : sFail);
+ printf("MAG WhoAmI: %02X %s\r\n", ret, res);
+
+ if (ret == LSM303_WHO_MAG)
+ myLedG = 1;
+ else
+ myLedR = 1;
+
+ for (int i = 0; i < 2; i++) {
+ myLedB = 1;
+ wait(0.3);
+ myLedB = 0;
+ wait(0.3);
+ }
+
+#if defined(TARGET_LRAT)
+ cmd[0] = LSM303_REG_MAG_CTRL_REG1_M;
+ cmd[1] = 0x70; // Ultra-High Performance Mode on XY axes, ODR=10Hz
+ i2c.write(LSM303_ADR_MAG, cmd, 2);
+ cmd[0] = LSM303_REG_MAG_CTRL_REG3_M;
+ cmd[1] = 0x00; // High Resolution? (Full-power), Continuous
+ i2c.write(LSM303_ADR_MAG, cmd, 2);
+ cmd[0] = LSM303_REG_MAG_CTRL_REG4_M;
+ cmd[1] = 0x0C; // Ultra-High Performance Mode on Z axis
+ i2c.write(LSM303_ADR_MAG, cmd, 2);
+ #if defined(SENSOR_TEMP)
+ // Enable Temp Sensor
+ cmd[0] = LSM303_REG_MAG_CTRL_REG1_M;
+ i2c.write(LSM303_ADR_MAG, cmd, 1);
+ i2c.read(LSM303_ADR_MAG, &ret, 1);
+ cmd[0] = LSM303_REG_MAG_CTRL_REG1_M;
+ cmd[1] = ret | 0x80;
+ i2c.write(LSM303_ADR_MAG, cmd, 2);
+ /*
+ cmd[0] = LSM303_REG_MAG_CTRL_REG5_M;
+ i2c.write(LSM303_ADR_MAG, cmd, 1);
+ i2c.read(LSM303_ADR_MAG, &ret, 1);
+ cmd[0] = LSM303_REG_MAG_CTRL_REG5_M;
+ cmd[1] = ret | 0x40;
+ i2c.write(LSM303_ADR_MAG, cmd, 2);
+ */
+ #endif
+#else
+ cmd[0] = LSM303_REG_MAG_CFG_REG_A_M;
+ cmd[1] = 0x00; // Mag = 10 Hz (high-resolution and continuous mode)
+ i2c.write(LSM303_ADR_MAG, cmd, 2);
+ cmd[0] = LSM303_REG_MAG_CFG_REG_C_M;
+ //cmd[1] = 0x01; // Mag data-ready interrupt enable
+ cmd[1] = 0x40; // Mag enable interrupt on pin
+ i2c.write(LSM303_ADR_MAG, cmd, 2);
+#endif
+
+ for (int i = 0; i < 2; i++) {
+ myLedR = 1;
+ myLedG = 1;
+ myLedB = 1;
+ wait(0.5);
+ myLedR = 0;
+ myLedG = 0;
+ myLedB = 0;
+ wait(0.5);
+ }
+ /*
+ // MAG INTERRUPT SETUP
+ cmd[0] = LSM303_REG_MAG_INT_THS_L_REG_M;
+ cmd[1] = 0xF4;
+ i2c.write(LSM303_ADR_MAG, cmd, 2);
+ cmd[0] = LSM303_REG_MAG_INT_THS_H_REG_M;
+ cmd[1] = 0x01;
+ i2c.write(LSM303_ADR_MAG, cmd, 2);
+ cmd[0] = LSM303_REG_MAG_INT_CTRL_REG_M;
+ cmd[1] = 0xE7;
+ i2c.write(LSM303_ADR_MAG, cmd, 2);
+ magPin.rise(&onMagIrq);
+ */
+}
+
+void accInitSequence()
+{
+ myLedR = 0;
+ myLedG = 0;
+ cmd[0] = LSM303_REG_ACC_WHO_AM_I_A;
+ i2c.write(LSM303_ADR_ACC, cmd, 1);
+ i2c.read(LSM303_ADR_ACC, &ret, 1);
+ res = (ret == LSM303_WHO_ACC ? sPass : sFail);
+ printf("ACC WhoAmI: %02X %s\r\n", ret, res);
+
+ if (ret == LSM303_WHO_ACC)
+ myLedG = 1;
+ else
+ myLedR = 1;
+
+ for (int i = 0; i < 2; i++) {
+ myLedB = 1;
+ wait(0.3);
+ myLedB = 0;
+ wait(0.3);
+ }
+
+#if defined(TARGET_LRAT)
+ cmd[0] = LSM303_REG_ACC_CTRL_REG1_A;
+ cmd[1] = 0xB7; // High Resolution, ODR=100Hz, Enable XYZ Axes
+ i2c.write(LSM303_ADR_ACC, cmd, 2);
+#else
+ cmd[0] = LSM303_REG_ACC_CTRL_REG1_A;
+ cmd[1] = 0x57; // Enable XYZ Axes, ODR=100Hz
+ i2c.write(LSM303_ADR_ACC, cmd, 2);
+
+ // Enable High Resolution Mode
+ cmd[0] = LSM303_REG_ACC_CTRL_REG4_A;
+ i2c.write(LSM303_ADR_ACC, cmd, 1);
+ i2c.read(LSM303_ADR_ACC, &ret, 1);
+ cmd[0] = LSM303_REG_ACC_CTRL_REG4_A;
+ cmd[1] = ret | 0x08; // High Resolution
+ i2c.write(LSM303_ADR_ACC, cmd, 2);
+
+ #if defined(SENSOR_TEMP)
+ // Enable Temp Sensor
+ cmd[0] = LSM303_REG_ACC_TEMP_CFG_REG_A;
+ cmd[1] = 0xC0;
+ i2c.write(LSM303_ADR_ACC, cmd, 2);
+ cmd[0] = LSM303_REG_ACC_CTRL_REG4_A;
+ i2c.write(LSM303_ADR_ACC, cmd, 1);
+ i2c.read(LSM303_ADR_ACC, &ret, 1);
+ cmd[0] = LSM303_REG_ACC_CTRL_REG4_A;
+ cmd[1] = ret | 0x80;
+ i2c.write(LSM303_ADR_ACC, cmd, 2);
+ #endif
+#endif
+
+ //LED Confirmation Output - ACC INIT COMPLETE
+ for (int i = 0; i < 2; i++) {
+ myLedR = 1;
+ myLedG = 1;
+ myLedB = 1;
+ wait(0.5);
+ myLedR = 0;
+ myLedG = 0;
+ myLedB = 0;
+ wait(0.5);
+ }
+
+ // Set Full Scale to 4g
+ /*
+ cmd[0] = LSM303_REG_ACC_CTRL_REG4_A;
+ i2c.write(LSM303_ADR_ACC, cmd, 1);
+ i2c.read(LSM303_ADR_ACC, &ret, 1);
+ cmd[0] = LSM303_REG_ACC_CTRL_REG4_A;
+ //cmd[1] = ret | 0x30; // 16g
+ //cmd[1] = (ret & ~0x10) | 0x20; // 8g
+ cmd[1] = (ret & ~0x20) | 0x10; // 4g
+ //cmd[1] = ret & ~0x30; // 2g
+ i2c.write(LSM303_ADR_ACC, cmd, 2);
+ */
+/*
+ // IRQ Init from Datasheet.
+ cmd[0] = LSM303_REG_ACC_CTRL_REG1_A;
+ cmd[1] = 0xA7;
+ i2c.write(LSM303_ADR_ACC, cmd, 2);
+ cmd[0] = LSM303_REG_ACC_CTRL_REG2_A;
+ cmd[1] = 0x00;
+ i2c.write(LSM303_ADR_ACC, cmd, 2);
+ cmd[0] = LSM303_REG_ACC_CTRL_REG3_A;
+ cmd[1] = 0x40;
+ i2c.write(LSM303_ADR_ACC, cmd, 2);
+ cmd[0] = LSM303_REG_ACC_CTRL_REG4_A;
+ cmd[1] = 0x00;
+ //cmd[1] = 0x10;
+ i2c.write(LSM303_ADR_ACC, cmd, 2);
+ cmd[0] = LSM303_REG_ACC_CTRL_REG5_A;
+ cmd[1] = 0x08;
+ i2c.write(LSM303_ADR_ACC, cmd, 2);
+*/
+ /*
+ // ACC INTERRUPT SETUP
+ // Enable Interrupt Pin
+ cmd[0] = LSM303_REG_ACC_CTRL_REG3_A;
+ i2c.write(LSM303_ADR_ACC, cmd, 1);
+ i2c.read(LSM303_ADR_ACC, &ret, 1);
+ cmd[0] = LSM303_REG_ACC_CTRL_REG3_A;
+ cmd[1] = ret | 0x40;
+ i2c.write(LSM303_ADR_ACC, cmd, 2);
+ // Enable Interrupt Latch
+ cmd[0] = LSM303_REG_ACC_CTRL_REG5_A;
+ i2c.write(LSM303_ADR_ACC, cmd, 1);
+ i2c.read(LSM303_ADR_ACC, &ret, 1);
+ cmd[0] = LSM303_REG_ACC_CTRL_REG5_A;
+ cmd[1] = ret | 0x08;
+ i2c.write(LSM303_ADR_ACC, cmd, 2);
+
+ // Set Threshold/Duration/Config
+ cmd[0] = LSM303_REG_ACC_INT1_THS_A;
+ //cmd[1] = 0x10;
+ //cmd[1] = 0x40;
+ //cmd[1] = 0x60;
+ cmd[1] = 0x7D;
+ i2c.write(LSM303_ADR_ACC, cmd, 2);
+ cmd[0] = LSM303_REG_ACC_INT1_DURATION_A;
+ cmd[1] = 0x00;
+ i2c.write(LSM303_ADR_ACC, cmd, 2);
+ cmd[0] = LSM303_REG_ACC_INT1_CFG_A;
+ cmd[1] = 0x2A;
+ //cmd[1] = 0x0A;
+ i2c.write(LSM303_ADR_ACC, cmd, 2);
+ //accPin.rise(&onAccIrq);
+ */
+}
+
+void gpsInitSequence()
+{
+ myLedG = 1;
+ myLedR = 1;
+
+ // LED Confirmation Output - GPS
+ for (int i = 0; i < 2; i++) {
+ myLedB = 1;
+ wait(0.3);
+ myLedB = 0;
+ wait(0.3);
+ }
+ myLedG = 0;
+ myLedR = 0;
+}
+
+void magRead()
+{
+ cmd[0] = LSM303_REG_MAG_STATUS_REG_M;
+ i2c.write(LSM303_ADR_MAG, cmd, 1);
+ i2c.read(LSM303_ADR_MAG, &rda, 1);
+ if (rda)
+ {
+ cmd[0] = LSM303_REG_MAG_OUTX_L_REG_M;
+ i2c.write(LSM303_ADR_MAG, cmd, 1);
+ i2c.read(LSM303_ADR_MAG, &buf[0], 1);
+ cmd[0] = LSM303_REG_MAG_OUTX_H_REG_M;
+ i2c.write(LSM303_ADR_MAG, cmd, 1);
+ i2c.read(LSM303_ADR_MAG, &buf[1], 1);
+ cmd[0] = LSM303_REG_MAG_OUTY_L_REG_M;
+ i2c.write(LSM303_ADR_MAG, cmd, 1);
+ i2c.read(LSM303_ADR_MAG, &buf[2], 1);
+ cmd[0] = LSM303_REG_MAG_OUTY_H_REG_M;
+ i2c.write(LSM303_ADR_MAG, cmd, 1);
+ i2c.read(LSM303_ADR_MAG, &buf[3], 1);
+ cmd[0] = LSM303_REG_MAG_OUTZ_L_REG_M;
+ i2c.write(LSM303_ADR_MAG, cmd, 1);
+ i2c.read(LSM303_ADR_MAG, &buf[4], 1);
+ cmd[0] = LSM303_REG_MAG_OUTZ_H_REG_M;
+ i2c.write(LSM303_ADR_MAG, cmd, 1);
+ i2c.read(LSM303_ADR_MAG, &buf[5], 1);
+ myMagX = (buf[0] | (buf[1] << 8));
+ myMagY = (buf[2] | (buf[3] << 8));
+ myMagZ = (buf[4] | (buf[5] << 8));
+ if (myMagX < magMinX)
+ magMinX = myMagX;
+ if (myMagY < magMinY)
+ magMinY = myMagY;
+ if (myMagZ < magMinZ)
+ magMinZ = myMagZ;
+ if (myMagX > magMaxX)
+ magMaxX = myMagX;
+ if (myMagY > magMaxY)
+ magMaxY = myMagY;
+ if (myMagZ > magMaxZ)
+ magMaxZ = myMagZ;
+ cmd[0] = LSM303_REG_MAG_INT_SOURCE_REG_M;
+ i2c.write(LSM303_ADR_MAG, cmd, 1);
+ i2c.read(LSM303_ADR_MAG, &ret, 1);
+ if (ret & 0x01 && magEvent == 0 && ret & 0xFC)
+ {
+ magSFire++;
+ magEvent = 1;
+ magSHIRQ++;
+ }
+ else if (!(ret & 0x01) && magEvent == 1 && !(ret & 0xFC))
+ {
+ magSFire++;
+ magEvent = 0;
+ magSLIRQ++;
+ }
+ printf("M|%02X|%02X %02X %02X %02X %02X %02X|%*d,%*d,%*d|%*d,%*d,%*d|%*d,%*d,%*d|%02X|%02X/%02X %02X/%02X\r\n", rda, buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], 6, myMagX, 6, myMagY, 6, myMagZ, 6, magMinX, 6, magMinY, 6, magMinZ, 6, magMaxX, 6, magMaxY, 6, magMaxZ, ret, magSHIRQ, magSLIRQ, magSFire, magHFire);
+ }
+}
+
+void accRead()
+{
+ cmd[0] = LSM303_REG_ACC_STATUS_REG_A;
+ i2c.write(LSM303_ADR_ACC, cmd, 1);
+ i2c.read(LSM303_ADR_ACC, &rda, 1);
+ if (rda)
+ {
+ cmd[0] = LSM303_REG_ACC_OUT_X_L_A;
+ i2c.write(LSM303_ADR_ACC, cmd, 1);
+ i2c.read(LSM303_ADR_ACC, &buf[0], 1);
+ cmd[0] = LSM303_REG_ACC_OUT_X_H_A;
+ i2c.write(LSM303_ADR_ACC, cmd, 1);
+ i2c.read(LSM303_ADR_ACC, &buf[1], 1);
+ cmd[0] = LSM303_REG_ACC_OUT_Y_L_A;
+ i2c.write(LSM303_ADR_ACC, cmd, 1);
+ i2c.read(LSM303_ADR_ACC, &buf[2], 1);
+ cmd[0] = LSM303_REG_ACC_OUT_Y_H_A;
+ i2c.write(LSM303_ADR_ACC, cmd, 1);
+ i2c.read(LSM303_ADR_ACC, &buf[3], 1);
+ cmd[0] = LSM303_REG_ACC_OUT_Z_L_A;
+ i2c.write(LSM303_ADR_ACC, cmd, 1);
+ i2c.read(LSM303_ADR_ACC, &buf[4], 1);
+ cmd[0] = LSM303_REG_ACC_OUT_Z_H_A;
+ i2c.write(LSM303_ADR_ACC, cmd, 1);
+ i2c.read(LSM303_ADR_ACC, &buf[5], 1);
+ myAccX = ((int16_t)(buf[0] | (buf[1] << 8)) >> accShift);
+ myAccY = ((int16_t)(buf[2] | (buf[3] << 8)) >> accShift);
+ myAccZ = ((int16_t)(buf[4] | (buf[5] << 8)) >> accShift);
+ if (myAccX < accMinX)
+ accMinX = myAccX;
+ if (myAccY < accMinY)
+ accMinY = myAccY;
+ if (myAccZ < accMinZ)
+ accMinZ = myAccZ;
+ if (myAccX > accMaxX)
+ accMaxX = myAccX;
+ if (myAccY > accMaxY)
+ accMaxY = myAccY;
+ if (myAccZ > accMaxZ)
+ accMaxZ = myAccZ;
+ cmd[0] = LSM303_REG_ACC_INT1_SRC_A;
+ i2c.write(LSM303_ADR_ACC, cmd, 1);
+ i2c.read(LSM303_ADR_ACC, &ret, 1);
+ if (ret & 0x40)
+ {
+ accSFire++;
+ if (accEvent == 1)
+ {
+ accEvent = 0;
+ accSLIRQ++;
+ cmd[0] = LSM303_REG_ACC_INT1_THS_A;
+ cmd[1] = 0x7D;
+ i2c.write(LSM303_ADR_ACC, cmd, 2);
+ cmd[0] = LSM303_REG_ACC_INT1_DURATION_A;
+ cmd[1] = 0x00;
+ i2c.write(LSM303_ADR_ACC, cmd, 2);
+ cmd[0] = LSM303_REG_ACC_INT1_CFG_A;
+ cmd[1] = 0x2A;
+ i2c.write(LSM303_ADR_ACC, cmd, 2);
+ }
+ else
+ {
+ accEvent = 1;
+ accSHIRQ++;
+ cmd[0] = LSM303_REG_ACC_INT1_THS_A;
+ cmd[1] = 0x50;
+ i2c.write(LSM303_ADR_ACC, cmd, 2);
+ cmd[0] = LSM303_REG_ACC_INT1_DURATION_A;
+ //cmd[1] = 0x7D;
+ cmd[1] = 0x03;
+ i2c.write(LSM303_ADR_ACC, cmd, 2);
+ cmd[0] = LSM303_REG_ACC_INT1_CFG_A;
+ cmd[1] = 0x95;
+ i2c.write(LSM303_ADR_ACC, cmd, 2);
+ }
+ }
+ printf("A|%02X|%02X %02X %02X %02X %02X %02X|%*d,%*d,%*d|%*d,%*d,%*d|%*d,%*d,%*d|%02X|%02X/%02X %02X/%02X\r\n", rda, buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], 6, myAccX, 6, myAccY, 6, myAccZ, 6, accMinX, 6, accMinY, 6, accMinZ, 6, accMaxX, 6, accMaxY, 6, accMaxZ, ret, accSHIRQ, accSLIRQ, accSFire, accHFire);
+ }
+}
+
+void tmpRead()
+{
+ #if defined(TARGET_LRAT)
+ cmd[0] = LSM303_REG_MAG_TEMP_L_M;
+ i2c.write(LSM303_ADR_MAG, cmd, 1);
+ i2c.read(LSM303_ADR_MAG, &buf[0], 1);
+ cmd[0] = LSM303_REG_MAG_TEMP_H_M;
+ i2c.write(LSM303_ADR_MAG, cmd, 1);
+ i2c.read(LSM303_ADR_MAG, &buf[1], 1);
+ myTemp = (int16_t)(buf[0] | (buf[1] << 8));
+ printf("T|%02X %02X| (%d)\r\n", buf[0], buf[1], myTemp);
+ #else
+ cmd[0] = LSM303_REG_ACC_STATUS_REG_AUX_A;
+ i2c.write(LSM303_ADR_ACC, cmd, 1);
+ i2c.read(LSM303_ADR_ACC, &rda, 1);
+ if (rda & 0x04)
+ {
+ cmd[0] = LSM303_REG_ACC_OUT_TEMP_L_A | 0x80;
+ i2c.write(LSM303_ADR_ACC, cmd, 1);
+ i2c.read(LSM303_ADR_ACC, &buf[0], 2);
+ myTemp = (int16_t)(buf[0] | (buf[1] << 8)) >> 6;
+ printf("T|%02X %02X %02X| (%d)\r\n", rda, buf[0], buf[1], myTemp);
+ }
+ #endif
+}
+
+void gpsRead()
+{
+ bool gpsDone = false;
+ bool fixGood = false;
+ myLedW = 1;
+ pos = 0;
ret = 0xFF;
cmd[0] = 0xFF;
i2c.write(NEOM8M_ADR_GPS, cmd, 1);
@@ -801,7 +1061,7 @@
if (ret == '\n')
{
buf[pos] = 0x00;
- /* NMEA Validation */
+ // NMEA Validation
uint16_t crc = 0;
char clr;
if (buf[0] == '$' && buf[pos-3] == '*')
@@ -872,6 +1132,8 @@
int fldDat;
sscanf(buf, "$GNRMC,%f,%c,%lf,%c,%lf,%c,%f,,%d", &fldTim, &fldSts, &fldLat, &fldN_S, &fldLon, &fldE_W, &fldSpd, &fldDat);
printf("Sec: %.2f, Sts: %c, Lat: %.5f %c, Lon: %.5f %c, Spd: %.3f, Dat: %06d\r\n", fldTim, fldSts, fldLat, fldN_S, fldLon, fldE_W, fldSpd, fldDat);
+ if (fldSts == 'A')
+ fixGood = true;
}
pos = 0;
i2c.read(NEOM8M_ADR_GPS, &ret, 1);
@@ -894,242 +1156,17 @@
}
if (pos > 0)
printf("GPS: |%s|\r\n", buf);
-
- /*
- cmd[0] = LSM303_REG_ACC_STATUS_REG_AUX_A;
- i2c.write(LSM303_ADR_ACC, cmd, 1);
- i2c.read(LSM303_ADR_ACC, &rda, 1);
- cmd[0] = LSM303_REG_ACC_OUT_TEMP_L_A;
- i2c.write(LSM303_ADR_ACC, cmd, 1);
- i2c.read(LSM303_ADR_ACC, &buf[0], 1);
- cmd[0] = LSM303_REG_ACC_OUT_TEMP_H_A;
- i2c.write(LSM303_ADR_ACC, cmd, 1);
- i2c.read(LSM303_ADR_ACC, &buf[1], 1);
- myTemp = (buf[0] | (buf[1] << 8));
- printf("TMP: |%02X %02X %02X| (%d)\r\n", rda, buf[0], buf[1], myTemp);
- */
-
- cmd[0] = LSM303_REG_ACC_STATUS_REG_AUX_A;
- i2c.write(LSM303_ADR_ACC, cmd, 1);
- i2c.read(LSM303_ADR_ACC, &rda, 1);
- if (rda & 0x04)
- {
- cmd[0] = LSM303_REG_ACC_OUT_TEMP_L_A | 0x80;
- i2c.write(LSM303_ADR_ACC, cmd, 1);
- i2c.read(LSM303_ADR_ACC, &buf[0], 2);
- myTemp = (int16_t)(buf[0] | (buf[1] << 8)) >> 6;
- printf("TMP: |%02X %02X %02X| (%d)\r\n", rda, buf[0], buf[1], myTemp);
- }
-
- cmd[0] = LSM303_REG_MAG_STATUS_REG_M;
- i2c.write(LSM303_ADR_MAG, cmd, 1);
- i2c.read(LSM303_ADR_MAG, &rda, 1);
+ myLedW = 0;
+ if (fixGood)
+ myLedG = 1;
+ else
+ myLedR = 1;
- cmd[0] = LSM303_REG_MAG_OUTX_L_REG_M;
- i2c.write(LSM303_ADR_MAG, cmd, 1);
- i2c.read(LSM303_ADR_MAG, &buf[0], 1);
- cmd[0] = LSM303_REG_MAG_OUTX_H_REG_M;
- i2c.write(LSM303_ADR_MAG, cmd, 1);
- i2c.read(LSM303_ADR_MAG, &buf[1], 1);
- cmd[0] = LSM303_REG_MAG_OUTY_L_REG_M;
- i2c.write(LSM303_ADR_MAG, cmd, 1);
- i2c.read(LSM303_ADR_MAG, &buf[2], 1);
- cmd[0] = LSM303_REG_MAG_OUTY_H_REG_M;
- i2c.write(LSM303_ADR_MAG, cmd, 1);
- i2c.read(LSM303_ADR_MAG, &buf[3], 1);
- cmd[0] = LSM303_REG_MAG_OUTZ_L_REG_M;
- i2c.write(LSM303_ADR_MAG, cmd, 1);
- i2c.read(LSM303_ADR_MAG, &buf[4], 1);
- cmd[0] = LSM303_REG_MAG_OUTZ_H_REG_M;
- i2c.write(LSM303_ADR_MAG, cmd, 1);
- i2c.read(LSM303_ADR_MAG, &buf[5], 1);
- myMagX = (buf[0] | (buf[1] << 8));
- myMagY = (buf[2] | (buf[3] << 8));
- myMagZ = (buf[4] | (buf[5] << 8));
- printf("MAG: |%02X %02X %02X %02X %02X %02X %02X| (%d,%d,%d)\r\n", rda, buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], myMagX, myMagY, myMagZ);
-
- /*
- cmd[0] = LSM303_REG_MAG_OFFSET_X_REG_L_M;
- i2c.write(LSM303_ADR_MAG, cmd, 1);
- i2c.read(LSM303_ADR_MAG, &buf[0], 1);
- cmd[0] = LSM303_REG_MAG_OFFSET_X_REG_H_M;
- i2c.write(LSM303_ADR_MAG, cmd, 1);
- i2c.read(LSM303_ADR_MAG, &buf[1], 1);
- cmd[0] = LSM303_REG_MAG_OFFSET_Y_REG_L_M;
- i2c.write(LSM303_ADR_MAG, cmd, 1);
- i2c.read(LSM303_ADR_MAG, &buf[2], 1);
- cmd[0] = LSM303_REG_MAG_OFFSET_Y_REG_H_M;
- i2c.write(LSM303_ADR_MAG, cmd, 1);
- i2c.read(LSM303_ADR_MAG, &buf[3], 1);
- cmd[0] = LSM303_REG_MAG_OFFSET_Z_REG_L_M;
- i2c.write(LSM303_ADR_MAG, cmd, 1);
- i2c.read(LSM303_ADR_MAG, &buf[4], 1);
- cmd[0] = LSM303_REG_MAG_OFFSET_Z_REG_H_M;
- i2c.write(LSM303_ADR_MAG, cmd, 1);
- i2c.read(LSM303_ADR_MAG, &buf[5], 1);
- myOffX = (buf[0] | (buf[1] << 8));
- myOffY = (buf[2] | (buf[3] << 8));
- myOffZ = (buf[4] | (buf[5] << 8));
- printf("OFF: |%02X %02X %02X %02X %02X %02X| (%d,%d,%d)\r\n", buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], myOffX, myOffY, myOffZ);
- */
-
- cmd[0] = LSM303_REG_ACC_STATUS_REG_A;
- i2c.write(LSM303_ADR_ACC, cmd, 1);
- i2c.read(LSM303_ADR_ACC, &rda, 1);
-
- cmd[0] = LSM303_REG_ACC_OUT_X_L_A;
- i2c.write(LSM303_ADR_ACC, cmd, 1);
- i2c.read(LSM303_ADR_ACC, &buf[0], 1);
- cmd[0] = LSM303_REG_ACC_OUT_X_H_A;
- i2c.write(LSM303_ADR_ACC, cmd, 1);
- i2c.read(LSM303_ADR_ACC, &buf[1], 1);
- cmd[0] = LSM303_REG_ACC_OUT_Y_L_A;
- i2c.write(LSM303_ADR_ACC, cmd, 1);
- i2c.read(LSM303_ADR_ACC, &buf[2], 1);
- cmd[0] = LSM303_REG_ACC_OUT_Y_H_A;
- i2c.write(LSM303_ADR_ACC, cmd, 1);
- i2c.read(LSM303_ADR_ACC, &buf[3], 1);
- cmd[0] = LSM303_REG_ACC_OUT_Z_L_A;
- i2c.write(LSM303_ADR_ACC, cmd, 1);
- i2c.read(LSM303_ADR_ACC, &buf[4], 1);
- cmd[0] = LSM303_REG_ACC_OUT_Z_H_A;
- i2c.write(LSM303_ADR_ACC, cmd, 1);
- i2c.read(LSM303_ADR_ACC, &buf[5], 1);
- myAccX = ((int16_t)(buf[0] | (buf[1] << 8)) >> accShift);
- myAccY = ((int16_t)(buf[2] | (buf[3] << 8)) >> accShift);
- myAccZ = ((int16_t)(buf[4] | (buf[5] << 8)) >> accShift);
- printf("ACC: |%02X %02X %02X %02X %02X %02X %02X| (%d,%d,%d)\r\n", rda, buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], myAccX, myAccY, myAccZ);
-
- int ilat = (int)(mylat * 100000);
- int ilon = (int)(mylon * 100000);
- printf("TIM: %d, SAT: %d, LAT: %d, LON: %d\r\n", mytime, mybatt, ilat, ilon);
- packet_len = 11;
- tx_buffer[0] = (mytime >> 24) & 0xFF;
- tx_buffer[1] = (mytime >> 16) & 0xFF;
- tx_buffer[2] = (mytime >> 8) & 0xFF;
- tx_buffer[3] = (mytime >> 0) & 0xFF;
- tx_buffer[4] = ((mybatt << 4) & 0xF0) | ((ilat >> 22) & 0x0F);
- tx_buffer[5] = (ilat >> 14) & 0xFF;
- tx_buffer[6] = (ilat >> 6) & 0xFF;
- tx_buffer[7] = ((ilat << 2) & 0xFC) | ((ilon >> 24) & 0x03);
- tx_buffer[8] = (ilon >> 16) & 0xFF;
- tx_buffer[9] = (ilon >> 8) & 0xFF;
- tx_buffer[10] = (ilon >> 0) & 0xFF;
- printf("\r\nBUF: |");
- int i;
- for (i = 0; i < packet_len; i++) { printf("%02x", tx_buffer[i]); }
- printf("|\r\n");
- retcode = lorawan.send(MBED_CONF_LORA_APP_PORT, tx_buffer, packet_len,
- MSG_CONFIRMED_FLAG);
-
- if (retcode < 0) {
- retcode == LORAWAN_STATUS_WOULD_BLOCK ? printf("send - WOULD BLOCK\r\n")
- : printf("\r\n send() - Error code %d \r\n", retcode);
-
- if (retcode == LORAWAN_STATUS_WOULD_BLOCK) {
- //retry in 3 seconds
- if (MBED_CONF_LORA_DUTY_CYCLE_ON) {
- ev_queue.call_in(3000, send_message);
- }
- }
- return;
- }
-
- printf("\r\n %d bytes scheduled for transmission \r\n", retcode);
- memset(tx_buffer, 0, sizeof(tx_buffer));
-}
-
-/**
- * Receive a message from the Network Server
- */
-static void receive_message()
-{
- int16_t retcode;
- retcode = lorawan.receive(MBED_CONF_LORA_APP_PORT, rx_buffer,
- sizeof(rx_buffer),
- MSG_CONFIRMED_FLAG|MSG_UNCONFIRMED_FLAG);
-
- if (retcode < 0) {
- printf("\r\n receive() - Error code %d \r\n", retcode);
- return;
- }
-
- printf(" Data:");
-
- for (uint8_t i = 0; i < retcode; i++) {
- printf("%x", rx_buffer[i]);
- }
-
- printf("\r\n Data Length: %d\r\n", retcode);
-
- int startLoop = 0;
- if (strncmp((char *)rx_buffer, cmdSendLoop, 8) == 0)
- {
- printf("SendLoop Command Received!\r\n");
- startLoop = 1;
- }
-
- memset(rx_buffer, 0, sizeof(rx_buffer));
-
- if (startLoop)
- send_message();
-}
-
-/**
- * Event handler
- */
-static void lora_event_handler(lorawan_event_t event)
-{
- tr_debug("In lora_event_handler(%d)...", event);
- switch (event) {
- case CONNECTED:
- printf("\r\n Connection - Successful \r\n");
- if (MBED_CONF_LORA_DUTY_CYCLE_ON) {
- send_message();
- } else {
- ev_queue.call_every(TX_TIMER, send_message);
- }
-
- break;
- case DISCONNECTED:
- ev_queue.break_dispatch();
- printf("\r\n Disconnected Successfully \r\n");
- break;
- case TX_DONE:
- printf("\r\n Message Sent to Network Server \r\n");
- if (MBED_CONF_LORA_DUTY_CYCLE_ON) {
- send_message();
- }
- break;
- case TX_TIMEOUT:
- case TX_ERROR:
- case TX_CRYPTO_ERROR:
- case TX_SCHEDULING_ERROR:
- printf("\r\n Transmission Error - EventCode = %d \r\n", event);
- // try again
- if (MBED_CONF_LORA_DUTY_CYCLE_ON) {
- send_message();
- }
- break;
- case RX_DONE:
- printf("\r\n Received message from Network Server \r\n");
- receive_message();
- break;
- case RX_TIMEOUT:
- case RX_ERROR:
- printf("\r\n Error in reception - Code = %d \r\n", event);
- break;
- case JOIN_FAILURE:
- printf("\r\n OTAA Failed - Check Keys \r\n");
- break;
- case UPLINK_REQUIRED:
- printf("\r\n Uplink required by NS \r\n");
- if (MBED_CONF_LORA_DUTY_CYCLE_ON) {
- send_message();
- }
- break;
- default:
- MBED_ASSERT("Unknown Event");
+ for (int i = 0; i < 10; i++) {
+ myLedB = 1;
+ wait(0.1);
+ myLedB = 0;
+ wait(0.1);
}
}
