summaryrefslogtreecommitdiff
path: root/src/app
diff options
context:
space:
mode:
authorDaniel Friesel <derf@finalrewind.org>2021-12-08 18:58:59 +0100
committerDaniel Friesel <derf@finalrewind.org>2021-12-08 18:58:59 +0100
commit6f3983ee29091c324e06c545bb1f2951cbe8e251 (patch)
treeab94e5858d8bd389b903ad7e00fac4a250bfd5db /src/app
parenta2316cb4cf92ba507f07b654f153682ed587605c (diff)
mpu9250_motionlog: switch to posix variant
Diffstat (limited to 'src/app')
-rw-r--r--src/app/mpu9250_motionlog/Kconfig2
-rw-r--r--src/app/mpu9250_motionlog/main.cc73
2 files changed, 35 insertions, 40 deletions
diff --git a/src/app/mpu9250_motionlog/Kconfig b/src/app/mpu9250_motionlog/Kconfig
index b2bd7e0..afa9fa0 100644
--- a/src/app/mpu9250_motionlog/Kconfig
+++ b/src/app/mpu9250_motionlog/Kconfig
@@ -3,4 +3,4 @@
# SPDX-License-Identifier: CC0-1.0
prompt "Motion Logger"
-depends on arch_arduino_nano && driver_mpu9250 && !loop && !wakeup
+depends on driver_mpu9250 && !loop && !wakeup
diff --git a/src/app/mpu9250_motionlog/main.cc b/src/app/mpu9250_motionlog/main.cc
index 6b7e80e..5000732 100644
--- a/src/app/mpu9250_motionlog/main.cc
+++ b/src/app/mpu9250_motionlog/main.cc
@@ -12,34 +12,29 @@
#include "driver/soft_i2c.h"
#endif
#include "driver/mpu9250.h"
+#ifdef CONFIG_driver_hdc1080
+#include "driver/hdc1080.h"
+#endif
-#define INIT0(val) int val = 0, min_ ## val = 0, max_ ## val = 0;
+#define INITI0(val) int val = 0, min_ ## val = 30000, max_ ## val = -30000;
+#define INITF0(val) float val = 0; double min_ ## val = 9999, max_ ## val = -9999;
#define UPDATE_MIN(min_val, val) if ((val) < (min_val)) { (min_val) = (val); }
#define UPDATE_MAX(max_val, val) if ((val) > (max_val)) { (max_val) = (val); }
int main(void)
{
- INIT0(ax);
- INIT0(ay);
- INIT0(az);
- INIT0(mx);
- INIT0(my);
- INIT0(mz);
+ INITF0(ax);
+ INITF0(ay);
+ INITF0(az);
+ INITI0(mx);
+ INITI0(my);
+ INITI0(mz);
unsigned short i = 0;
arch.setup();
gpio.setup();
kout.setup();
- // One ADC conversion per four seconds
- TCCR1A = 0;
- TCCR1B = _BV(CS12) | _BV(CS10);
-
- // Measure internal 1.1V bandgap using VCC as reference on each Timer 1 overflow
- ADMUX = _BV(REFS0) | 0x0e;
- ADCSRB = _BV(ADTS2) | _BV(ADTS1);
- ADCSRA = _BV(ADEN) | _BV(ADATE) | _BV(ADPS2) | _BV(ADPS1);
-
if (i2c.setup() != 0) {
kout << "I2C setup failed" << endl;
return 1;
@@ -47,12 +42,19 @@ int main(void)
kout << "I2C setup OK" << endl;
+#ifdef CONFIG_driver_hdc1080
+ hdc1080.init();
+ if (hdc1080.getManufacturerID() != 0x5449) {
+ kout << "[!] invalid HDC1080 manufacturer ID: " << hex << hdc1080.getManufacturerID() << endl;
+ }
+#endif
+
mpu9250.init();
mpu9250.nineAxis();
mpu9250.setGyroEnable(false, false, false);
while (1) {
- mpu9250.getRawAccel(&ax, &ay, &az);
+ mpu9250.getAccel(&ax, &ay, &az);
UPDATE_MIN(min_ax, ax);
UPDATE_MIN(min_ay, ay);
@@ -71,30 +73,23 @@ int main(void)
}
if (i++ == 2000) {
- kout << "Min Accel: " << min_ax << " / " << min_ay << " / " << min_az << endl;
- kout << "Max Accel: " << max_ax << " / " << max_ay << " / " << max_az << endl;
- kout << "Min Magnet: " << min_mx << " / " << min_my << " / " << min_mz << endl;
- kout << "Max Magnet: " << max_mx << " / " << max_my << " / " << max_mz << endl;
- kout << "Temp: " << mpu9250.getTemperature() << endl;
- min_ax = min_ay = min_az = 30000;
- max_ax = max_ay = max_az = -30000;
- min_mx = min_my = min_mz = 30000;
- max_mx = max_my = max_mz = -30000;
- i = 0;
- if (ADCSRA & _BV(ADIF)) {
- uint8_t adcr_l = ADCL;
- uint8_t adcr_h = ADCH;
- uint16_t adcr = adcr_l + (adcr_h << 8);
- uint16_t vcc = 1100L * 1023 / adcr;
-
- TIFR1 |= _BV(TOV1);
- ADCSRA |= _BV(ADIF);
+ kout << "Accel X: " << max_ax - min_ax << endl;
+ kout << "Accel Y: " << max_ay - min_ay << endl;
+ kout << "Accel Z: " << max_az - min_az << endl;
+ kout << "Magnet X: " << max_mx - min_mx << endl;
+ kout << "Magnet Y: " << max_my - min_my << endl;
+ kout << "Magnet Z: " << max_mz - min_mz << endl;
+ kout << "MPU Temperature: " << mpu9250.getTemperature() << endl;
+ mpu9250.sleep();
- kout << "VCC: " << vcc << endl;
- }
+#ifdef CONFIG_driver_hdc1080
+ hdc1080.measure();
+ arch.delay_ms(10);
+ kout << "HDC Temperature: " << hdc1080.getTemp() << endl;
+ kout << "HDC Humidity: " << hdc1080.getRH() << endl;
+#endif
+ return 0;
}
arch.delay_ms(1);
}
-
- return 0;
}