From 9fc352115f0d958b1e767dfb3950577e9b874ce9 Mon Sep 17 00:00:00 2001 From: Brendan Haines Date: Sun, 28 Apr 2024 03:03:19 -0600 Subject: [PATCH] working xyz accel --- app/src/main.c | 36 ++++++++++++++++++++++++---------- drivers/sensor/bmx055/bmx055.c | 15 +++++++++++++- 2 files changed, 40 insertions(+), 11 deletions(-) diff --git a/app/src/main.c b/app/src/main.c index 5b5d644..df7e5cd 100644 --- a/app/src/main.c +++ b/app/src/main.c @@ -126,11 +126,13 @@ int main(void) while (1) { int ret; - struct sensor_value voltage, current, pressure, temperature, accel_z, accel_z_ref, humidity; + struct sensor_value voltage, current, pressure, temperature, accel_x, accel_y, accel_z, accel_z_ref, humidity; char str_v[15] = {0}; char str_i[15] = {0}; char str_p[16] = {0}; char str_t[16] = {0}; + char str_ax[16] = {0}; + char str_ay[16] = {0}; char str_az[16] = {0}; char str_az_ref[16] = {0}; char str_h[16] = {0}; @@ -185,6 +187,18 @@ int main(void) LOG_ERR("Could not get temperature (%d)", ret); return 0; } + ret = sensor_channel_get(bmx, SENSOR_CHAN_ACCEL_X, &accel_x); + if (ret < 0) + { + LOG_ERR("Could not get acceleration (%d)", ret); + return 0; + } + ret = sensor_channel_get(bmx, SENSOR_CHAN_ACCEL_Y, &accel_y); + if (ret < 0) + { + LOG_ERR("Could not get acceleration (%d)", ret); + return 0; + } ret = sensor_channel_get(bmx, SENSOR_CHAN_ACCEL_Z, &accel_z); if (ret < 0) { @@ -222,28 +236,30 @@ int main(void) sprintf(str_i, "I :%7.5f", current.val1 + current.val2 * 1e-6); sprintf(str_p, "P :%7.4f", pressure.val1 + pressure.val2 * 1e-6); sprintf(str_t, "T :%7.4f", temperature.val1 + temperature.val2 * 1e-6); - sprintf(str_az, "Z :%7.4f", accel_z.val1 + accel_z.val2 * 1e-6); - sprintf(str_az_ref, "Zr:%7.4f", accel_z_ref.val1 + accel_z_ref.val2 * 1e-6); + sprintf(str_ax, "X :%+7.3f", accel_x.val1 + accel_x.val2 * 1e-6); + sprintf(str_ay, "Y :%+7.3f", accel_y.val1 + accel_y.val2 * 1e-6); + sprintf(str_az, "Z :%+7.3f", accel_z.val1 + accel_z.val2 * 1e-6); + sprintf(str_az_ref, "Zr:%+7.3f", accel_z_ref.val1 + accel_z_ref.val2 * 1e-6); sprintf(str_h, "H :%7.5f", humidity.val1 + humidity.val2 * 1e-6); // printf("%s\t%s\t%s\t%s\n", str_v, str_i, str_p, str_t); cfb_framebuffer_clear(dev, false); - if (cfb_print(dev, str_az, 0, 0)) + if (cfb_print(dev, str_ax, 0, 0)) { printf("Failed to print a string\n"); continue; } - if (cfb_print(dev, str_az_ref, 0, 16)) + if (cfb_print(dev, str_ay, 0, 16)) + { + printf("Failed to print a string\n"); + continue; + } + if (cfb_print(dev, str_az, 0, 16 * 2)) { printf("Failed to print a string\n"); continue; } - // if (cfb_print(dev, str_az, 0, 16 * 2)) - // { - // printf("Failed to print a string\n"); - // continue; - // } // if (cfb_print(dev, str_az_ref, 0, 16 * 3)) // { // printf("Failed to print a string\n"); diff --git a/drivers/sensor/bmx055/bmx055.c b/drivers/sensor/bmx055/bmx055.c index f821346..2ae878f 100644 --- a/drivers/sensor/bmx055/bmx055.c +++ b/drivers/sensor/bmx055/bmx055.c @@ -154,9 +154,21 @@ static int bmx055_channel_get(const struct device *dev, val->val2 = 0; // TODO: don't throw out LSB break; case SENSOR_CHAN_ACCEL_X: + { + float accel = data->accel_x * 0.00098 * 9.80665; // to gees, to m/s^2 + val->val1 = accel; + val->val2 = (accel - val->val1) * 1000000; + break; + } case SENSOR_CHAN_ACCEL_Y: - return -ENOTSUP; + { + float accel = data->accel_y * 0.00098 * 9.80665; // to gees, to m/s^2 + val->val1 = accel; + val->val2 = (accel - val->val1) * 1000000; + break; + } case SENSOR_CHAN_ACCEL_Z: + { // For now assume 2g since that's the default value // 2g 0.98mg/LSB // 4g 1.95mg/LSB @@ -167,6 +179,7 @@ static int bmx055_channel_get(const struct device *dev, val->val1 = accel; val->val2 = (accel - val->val1) * 1000000; break; + } case SENSOR_CHAN_GYRO_X: case SENSOR_CHAN_GYRO_Y: case SENSOR_CHAN_GYRO_Z: