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: SX127x lib_gps lib_mma8451q lib_mpl3115a2 lib_sx9500 mbed
Fork of na_mote1 by
See wiki Page for a detailed
This is a link to the wiki page
Revision 14:35e7156e73ff, committed 2015-09-01
- Comitter:
- dudmuck
- Date:
- Tue Sep 01 00:29:36 2015 +0000
- Parent:
- 13:a22debeee855
- Child:
- 15:cdc215392e60
- Commit message:
- added orientation detection
Changed in this revision
--- a/lib_mma8451q.lib Tue Jul 14 00:47:41 2015 +0000 +++ b/lib_mma8451q.lib Tue Sep 01 00:29:36 2015 +0000 @@ -1,1 +1,1 @@ -https://developer.mbed.org/users/dudmuck/code/lib_mma8451q/#778b685c3ad0 +https://developer.mbed.org/users/dudmuck/code/lib_mma8451q/#4bc96749141e
--- a/lib_mpl3115a2.lib Tue Jul 14 00:47:41 2015 +0000 +++ b/lib_mpl3115a2.lib Tue Sep 01 00:29:36 2015 +0000 @@ -1,1 +1,1 @@ -https://developer.mbed.org/users/dudmuck/code/lib_mpl3115a2/#3cd1f21925e8 +https://developer.mbed.org/users/dudmuck/code/lib_mpl3115a2/#0eb8b0ad292b
--- a/main.cpp Tue Jul 14 00:47:41 2015 +0000
+++ b/main.cpp Tue Sep 01 00:29:36 2015 +0000
@@ -44,7 +44,7 @@
GPS gps(PB_6, PB_7, PB_11);
DigitalOut pd2(PD_2);
-AnalogIn ain_bat(PA_1); // V3 mote: only when GPS enabled
+AnalogIn* ain_bat;
#define AIN_VREF 3.3 // stm32 internal refernce
#define AIN_VBAT_DIV 2 // resistor divider
@@ -1329,14 +1329,20 @@
if (gps.enabled()) {
if (gps.LatitudeBinary != 0) {
gps.LatitudeBinary = 0;
- printf("gps long:%f, lat:%f vbat:%.2fV\r\n", gps.Longitude, gps.Latitude, ain_bat.read()*AIN_VREF*AIN_VBAT_DIV);
+ printf("gps long:%f, lat:%f Vbat:%.2fV\r\n", gps.Longitude, gps.Latitude, ain_bat->read()*AIN_VREF*AIN_VBAT_DIV);
}
}
}
+RCC_OscInitTypeDef prev_RCC_OscInitStruct;
+
void all_peripherals_off()
{
// TODO: PD2 low, has pulldown
+
+ HAL_RCC_GetOscConfig(&prev_RCC_OscInitStruct);
+ /*printf("hsiState:%d\r\n", osc_init.HSIState);
+ wait(0.05);*/
#ifndef USE_DEBUGGER
/* PA13 to undriven JTMS/SWDIO pin (from AF0 to GPIO), and PA2 */
@@ -1354,13 +1360,28 @@
}
}
+
+
void restore_from_sleep()
{
+ RCC_OscInitTypeDef osc_init;
#ifndef USE_DEBUGGER
/* PA13 back to JTMS/SWDIO pin (from GPIO to AF0), and PA2 */
GPIOA->MODER |= 0x08000020;
GPIOB->MODER |= 0x00002000; // PB6 input to UART_TX
#endif
+
+ if (prev_RCC_OscInitStruct.HSIState == RCC_HSI_ON) {
+ HAL_RCC_GetOscConfig(&osc_init);
+ if (osc_init.HSIState != RCC_HSI_ON) {
+ printf("hsi-restore\r\n");
+ // Enable the HSI (to clock the ADC)
+ osc_init.OscillatorType = RCC_OSCILLATORTYPE_HSI;
+ osc_init.HSIState = RCC_HSI_ON;
+ osc_init.PLL.PLLState = RCC_PLL_NONE;
+ HAL_RCC_OscConfig(&osc_init);
+ }
+ }
}
int get_kbd_str(char* buf, int size)
@@ -1804,6 +1825,7 @@
for (;;) asm("nop");
#endif /* USE_DEBUGGER */
deepsleep();
+
}
restore_from_sleep();
} else if (pcbuf[0] == 'r' && pcbuf[1] == 'x') { // RX
@@ -1877,6 +1899,7 @@
printf("mm, print XYZ\r\n");
printf("mma toggle stby/active\r\n");
printf("mmtd configure for transient detection\r\n");
+ printf("mmod configure for orientation detection\r\n");
} else if (pcbuf[2] == '.') {
printf("active:%d\r\n", mma8451q.get_active());
mma8451q.print_regs();
@@ -1887,6 +1910,18 @@
mma8451q.out.v.y >>= 4; // 12bit data
mma8451q.out.v.z >>= 4; // 12bit data
printf("x:%d y:%d z:%d\r\n", mma8451q.out.v.x, mma8451q.out.v.y, mma8451q.out.v.z);
+ } else if (pcbuf[2] == 'o' && pcbuf[3] == 'd') {
+ printf("orientation ");
+ d = mma8451q.read_single(MMA8451_PL_CFG);
+ if (d & 0x40) { // PL_EN?
+ d &= ~0x40;
+ mma8451q.write(MMA8451_PL_CFG, d);
+ printf("off\r\n");
+ } else {
+ mpl3115a2.write(CTRL_REG4, 0); // turn off: shares same interrupt pin
+ mma8451q.orient_detect();
+ printf("on\r\n");
+ }
} else if (pcbuf[2] == 't' && pcbuf[3] == 'd') {
printf("transient ");
if (mma8451q.transient_cfg.bits.ELE) {
@@ -1896,6 +1931,7 @@
mma8451q.write(MMA8451_CTRL_REG4, mma8451q.ctrl_reg4.octet);
printf("off\r\n");
} else {
+ mpl3115a2.write(CTRL_REG4, 0); // turn off: shares same interrupt pin
mma8451q.transient_detect();
//poll_timeout.attach(on_poll, 0.3);
printf("on\r\n");
@@ -1915,19 +1951,31 @@
printf("mp. get status\r\n");
printf("mpt get temperature\r\n");
printf("mpa get altitude\r\n");
+ printf("mpb get barometer\r\n");
+ printf("mpo[%%d] get/set oversampling (0-7)\r\n");
} else if (pcbuf[2] == '.') {
printf("active:%d\r\n", mpl3115a2.GetModeActive());
printf("int src:%02x\r\n", mpl3115a2.read(INT_SOURCE_REG));
+ printf("CTRL1:%02x\r\n", mpl3115a2.read(CTRL_REG1));
/* only INT1 is connected */
- printf("CTRL3 int ctl:%02x\r\n", mpl3115a2.read(CTRL_REG3)); /* TODO: PP_OD1 for open-drain operation */
- printf("CTRL4 int en:%02x\r\n", mpl3115a2.read(CTRL_REG4));
- printf("CTRL5 int cfg:%02x\r\n", mpl3115a2.read(CTRL_REG5));
+ printf("CTRL3:%02x\r\n", mpl3115a2.read(CTRL_REG3)); /* TODO: PP_OD1 for open-drain operation */
+ printf("CTRL4:%02x\r\n", mpl3115a2.read(CTRL_REG4));
+ printf("CTRL5:%02x\r\n", mpl3115a2.read(CTRL_REG5));
+ printf("OFF_H:%02x\r\n", mpl3115a2.read(OFF_H_REG));
+
printf("i2c_int_pin:%d\r\n", i2c_int_pin.read());
} else if (pcbuf[2] == 't') {
- printf("temp:%f\r\n", mpl3115a2.ReadTemperature());
+ printf("temp:%.4f\r\n", mpl3115a2.ReadTemperature());
} else if (pcbuf[2] == 'a') {
- printf("alt:%f\r\n", mpl3115a2.ReadAltitude());
-
+ printf("alt:%.4f\r\n", mpl3115a2.ReadAltitude());
+ } else if (pcbuf[2] == 'b') {
+ printf("bar:%.2f\r\n", mpl3115a2.ReadBarometer());
+ } else if (pcbuf[2] == 'o') {
+ if (pcbuf[3] >= '0' && pcbuf[3] <= '9') {
+ sscanf(pcbuf+3, "%d", &i);
+ mpl3115a2.setOSR(i);
+ }
+ printf("OSR:%d\r\n", mpl3115a2.getOSR());
}
}
/************************** sx9500... **************************************/
@@ -2427,9 +2475,11 @@
if (first && !pc_1) {
//printf("v2-mote\r\n");
mote_version = MOTE_V2;
+ ain_bat = new AnalogIn(PA_0);
} else {
//printf("v3-mote\r\n");
mote_version = MOTE_V3;
+ ain_bat = new AnalogIn(PA_1);
}
}
@@ -2468,6 +2518,8 @@
sx9500.write(SX9500_REG_PROXCTRL6, 0x04);
mma8451q.set_active(0);
+ mma8451q.verbose = true;
+ mpl3115a2.init();
mpl3115a2.SetModeStandby();
GPIOA->MODER |= 0x01415500; // unused pins as outputs: PA4, PA5, PA6, PA7, PA8, (PA11,PA12 USB)
