1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
/*
* Copyright 2020 Daniel Friesel
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#include "arch.h"
#include "driver/gpio.h"
#include "driver/stdout.h"
#if defined(CONFIG_meta_driver_hardware_i2c)
#include "driver/i2c.h"
#elif defined(CONFIG_driver_softi2c)
#include "driver/soft_i2c.h"
#endif
#include "driver/mpu9250.h"
#ifdef CONFIG_driver_hdc1080
#include "driver/hdc1080.h"
#endif
#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)
{
INITF0(ax);
INITF0(ay);
INITF0(az);
INITI0(mx);
INITI0(my);
INITI0(mz);
unsigned short i = 0;
arch.setup();
gpio.setup();
kout.setup();
if (i2c.setup() != 0) {
kout << "I2C setup failed" << endl;
return 1;
}
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.getAccel(&ax, &ay, &az);
UPDATE_MIN(min_ax, ax);
UPDATE_MIN(min_ay, ay);
UPDATE_MIN(min_az, az);
UPDATE_MAX(max_ax, ax);
UPDATE_MAX(max_ay, ay);
UPDATE_MAX(max_az, az);
if (mpu9250.getRawMagnet(&mx, &my, &mz)) {
UPDATE_MIN(min_mx, mx);
UPDATE_MIN(min_my, my);
UPDATE_MIN(min_mz, mz);
UPDATE_MAX(max_mx, mx);
UPDATE_MAX(max_my, my);
UPDATE_MAX(max_mz, mz);
}
if (i++ == 2000) {
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();
#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);
}
}
|