From 6f3983ee29091c324e06c545bb1f2951cbe8e251 Mon Sep 17 00:00:00 2001 From: Daniel Friesel Date: Wed, 8 Dec 2021 18:58:59 +0100 Subject: mpu9250_motionlog: switch to posix variant --- src/app/mpu9250_motionlog/Kconfig | 2 +- src/app/mpu9250_motionlog/main.cc | 73 ++++++++++++++++++--------------------- 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; } -- cgit v1.2.3