summaryrefslogtreecommitdiff
path: root/tools/alt_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/alt_test.cpp')
-rw-r--r--tools/alt_test.cpp51
1 files changed, 24 insertions, 27 deletions
diff --git a/tools/alt_test.cpp b/tools/alt_test.cpp
index a5c8849..9e92cdd 100644
--- a/tools/alt_test.cpp
+++ b/tools/alt_test.cpp
@@ -1,50 +1,47 @@
#include <stdio.h>
#include "hardware/gpio.h"
-#include "boards/pico_w.h"
#include "hardware/i2c.h"
#include "pico/stdio.h"
#include "pico/time.h"
-#define ALT_ADDR 0x60
+#include "ms5607.hpp"
+#include "heartbeat.hpp"
+#include "rp2040_micro.h"
+
+#define DATA_RATE_HZ 200
#define MAX_SCL 400000
-#define DATA_RATE_HZ 15
-float altitude = 0.0f;
-float get_altitude();
+bool data_callback(repeating_timer_t *rt);
+
+repeating_timer_t data_timer;
+
+MS5607 altimeter(i2c_default);
int main() {
stdio_init_all();
i2c_init(i2c_default, MAX_SCL);
- gpio_set_function(PICO_DEFAULT_I2C_SDA_PIN, GPIO_FUNC_I2C);
+ gpio_init(PICO_DEFAULT_I2C_SCL_PIN);
+ gpio_init(PICO_DEFAULT_I2C_SDA_PIN);
gpio_set_function(PICO_DEFAULT_I2C_SCL_PIN, GPIO_FUNC_I2C);
- gpio_pull_up(PICO_DEFAULT_I2C_SDA_PIN);
- gpio_pull_up(PICO_DEFAULT_I2C_SCL_PIN);
+ gpio_set_function(PICO_DEFAULT_I2C_SDA_PIN, GPIO_FUNC_I2C);
- uint8_t config[2] = {0};
+ altimeter.initialize();
+ heartbeat_initialize(PICO_DEFAULT_LED_PIN);
+ // gpio_init(PICO_DEFAULT_LED_PIN);
+ // gpio_set_dir(PICO_DEFAULT_LED_PIN, GPIO_OUT);
+ // gpio_put(PICO_DEFAULT_LED_PIN, 1);
- // Select control register(0x26)
- // Active mode, OSR = 16, altimeter mode(0xB8)
- config[0] = 0x26;
- config[1] = 0xB9;
- i2c_write_blocking(i2c_default, ALT_ADDR, config, 2, true);
- sleep_ms(1500);
+ add_repeating_timer_us(-1000000 / DATA_RATE_HZ, &data_callback, NULL, &data_timer);
while (1) {
- sleep_ms(1000);
- altitude = get_altitude();
- printf("Altitude: %4.2f\n", altitude);
+ sleep_ms(500);
+ printf("\n\nAltitude: %4.2f\nPressure: %4.2f\nTemperature: %4.2f\n", (float) altimeter.get_altitude() / ALTITUDE_SCALE_F, (float) altimeter.get_pressure() / PRESSURE_SCALE_F, (float) altimeter.get_temperature() / TEMPERATURE_SCALE_F);
}
}
-float get_altitude() {
- uint8_t reg = 0x01;
- uint8_t data[5];
- i2c_write_blocking(i2c_default, ALT_ADDR, &reg, 1, true);
- i2c_read_blocking(i2c_default, ALT_ADDR, data, 5, false);
- // Exactly how MPL3115A2 datasheet says to retrieve altitude
- float altitude = (float) ((int16_t) ((data[0] << 8) | data[1])) + (float) (data[2] >> 4) * 0.0625;
- return altitude;
+bool data_callback(repeating_timer_t *rt) {
+ altimeter.ms5607_start_sample();
+ return true;
}
-