get pms5003 working
", readings_index); "); "); "); "); ", "); ", "); "); "); "); "); "); "); "); "); "); "); ", link_status); ", link_status); "); ", readings[reading_i].pm1, readings[reading_i].pm2_5, readings[reading_i].pm10); ", reading_i);
This commit is contained in:
parent
9dd4ee4163
commit
0e513dc79a
2 changed files with 34 additions and 24 deletions
18
pms5003.c
18
pms5003.c
|
|
@ -5,6 +5,7 @@
|
|||
#include <hardware/regs/intctrl.h>
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <hardware/watchdog.h>
|
||||
|
||||
/**
|
||||
Lib for Plantower PMS5003 Particulate Matter (PM) Sensor
|
||||
|
|
@ -50,6 +51,7 @@ static pms5003_reading extract_pm_values_from_rx_buf() {
|
|||
|
||||
static void on_uart_rx() {
|
||||
// TODO: make the uart1 dynamic
|
||||
watchdog_update();
|
||||
while (read && reading_i < MAX_READINGS && uart_is_readable(uart1)) {
|
||||
uint8_t ch = uart_getc(uart1);
|
||||
// start of a message
|
||||
|
|
@ -57,6 +59,13 @@ static void on_uart_rx() {
|
|||
printf("pms5003 reading received\n");
|
||||
rx_i = 0;
|
||||
}
|
||||
|
||||
// Bounds check before accessing array
|
||||
if (rx_i >= 32) {
|
||||
rx_i = 0;
|
||||
continue;
|
||||
}
|
||||
|
||||
rx_buf[rx_i] = ch;
|
||||
rx_i++;
|
||||
// end of message
|
||||
|
|
@ -65,11 +74,6 @@ static void on_uart_rx() {
|
|||
printf("pm1: %f, pm2.5: %f, pm10: %f\n", readings[reading_i].pm1, readings[reading_i].pm2_5, readings[reading_i].pm10);
|
||||
reading_i++;
|
||||
}
|
||||
|
||||
// guard
|
||||
if (rx_i > 32) {
|
||||
rx_i = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -82,7 +86,7 @@ void pms5003_init(pms5003_config *new_config, uart_inst_t *uart, uint8_t tx_pin,
|
|||
uart_set_format(uart, 8, 1, UART_PARITY_NONE);
|
||||
irq_set_exclusive_handler(UART1_IRQ, on_uart_rx);
|
||||
irq_set_enabled(UART1_IRQ, true);
|
||||
uart_set_irq_enables(uart, true, false);
|
||||
uart_set_irq_enables(uart, false, false);
|
||||
|
||||
// high level or suspending is normal working status, while low level is
|
||||
// sleeping mode.
|
||||
|
|
@ -126,11 +130,13 @@ void pms5003_warmup(pms5003_config *config) { gpio_put(config->enable_pin, 1); }
|
|||
void pms5003_start_reading(pms5003_config *config) {
|
||||
reading_i = 0;
|
||||
read = true;
|
||||
uart_set_irq_enables(config->uart, true, false);
|
||||
}
|
||||
|
||||
pms5003_reading pms5003_finish_reading(pms5003_config *config) {
|
||||
printf("readings_i: %d\n", reading_i);
|
||||
read = false;
|
||||
uart_set_irq_enables(config->uart, false, false);
|
||||
gpio_put(config->enable_pin, 0);
|
||||
pms5003_reading average_reading = compute_avarage_reading();
|
||||
reading_i = 0;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue