dust sensor: first working sketch

tatry_variant
Mateusz Lubecki 2022-09-18 06:59:53 +02:00
rodzic bd8b738ff8
commit 5dae491c2b
7 zmienionych plików z 46 dodań i 22 usunięć

Wyświetl plik

@ -5,15 +5,18 @@
# Add inputs and outputs from these tool invocations to the build variables # Add inputs and outputs from these tool invocations to the build variables
C_SRCS += \ C_SRCS += \
../system/src/davis_vantage/davis.c \ ../system/src/davis_vantage/davis.c \
../system/src/davis_vantage/davis_parsers.c ../system/src/davis_vantage/davis_parsers.c \
../system/src/davis_vantage/sds011.c
OBJS += \ OBJS += \
./system/src/davis_vantage/davis.o \ ./system/src/davis_vantage/davis.o \
./system/src/davis_vantage/davis_parsers.o ./system/src/davis_vantage/davis_parsers.o \
./system/src/davis_vantage/sds011.o
C_DEPS += \ C_DEPS += \
./system/src/davis_vantage/davis.d \ ./system/src/davis_vantage/davis.d \
./system/src/davis_vantage/davis_parsers.d ./system/src/davis_vantage/davis_parsers.d \
./system/src/davis_vantage/sds011.d
# Each subdirectory must supply rules for building sources it contributes # Each subdirectory must supply rules for building sources it contributes

Wyświetl plik

@ -5,15 +5,18 @@
# Add inputs and outputs from these tool invocations to the build variables # Add inputs and outputs from these tool invocations to the build variables
C_SRCS += \ C_SRCS += \
../system/src/davis_vantage/davis.c \ ../system/src/davis_vantage/davis.c \
../system/src/davis_vantage/davis_parsers.c ../system/src/davis_vantage/davis_parsers.c \
../system/src/davis_vantage/sds011.c
OBJS += \ OBJS += \
./system/src/davis_vantage/davis.o \ ./system/src/davis_vantage/davis.o \
./system/src/davis_vantage/davis_parsers.o ./system/src/davis_vantage/davis_parsers.o \
./system/src/davis_vantage/sds011.o
C_DEPS += \ C_DEPS += \
./system/src/davis_vantage/davis.d \ ./system/src/davis_vantage/davis.d \
./system/src/davis_vantage/davis_parsers.d ./system/src/davis_vantage/davis_parsers.d \
./system/src/davis_vantage/sds011.d
# Each subdirectory must supply rules for building sources it contributes # Each subdirectory must supply rules for building sources it contributes

Wyświetl plik

@ -73,6 +73,9 @@ const config_data_mode_t __attribute__((section(".config_section_default.mode"))
.wx_umb = 0, .wx_umb = 0,
#endif #endif
#ifdef _DUST_SDS011_SERIAL
.wx_dust_sensor = WX_DUST_SDS011_SERIAL,
#endif
#ifdef _VICTRON #ifdef _VICTRON
.victron = 1, .victron = 1,

Wyświetl plik

@ -93,6 +93,10 @@ const config_data_mode_t __attribute__((section(".config_section_first.mode")))
.wx_anemometer_pulses_constant = _ANEMOMETER_PULSES_IN_10SEC_PER_ONE_MS_OF_WINDSPEED, .wx_anemometer_pulses_constant = _ANEMOMETER_PULSES_IN_10SEC_PER_ONE_MS_OF_WINDSPEED,
#ifdef _DUST_SDS011_SERIAL
.wx_dust_sensor = WX_DUST_SDS011_SERIAL,
#endif
#ifdef _DIGI_ONLY_789 #ifdef _DIGI_ONLY_789
.digi_only_ssids = 1, .digi_only_ssids = 1,
#else #else

Wyświetl plik

@ -73,6 +73,9 @@ const config_data_mode_t __attribute__((section(".config_section_second.mode")))
.wx_umb = 0, .wx_umb = 0,
#endif #endif
#ifdef _DUST_SDS011_SERIAL
.wx_dust_sensor = WX_DUST_SDS011_SERIAL,
#endif
#ifdef _VICTRON #ifdef _VICTRON
.victron = 1, .victron = 1,

Wyświetl plik

@ -68,6 +68,7 @@
#include "drivers/dallas.h" #include "drivers/dallas.h"
#include "drivers/i2c.h" #include "drivers/i2c.h"
#include "drivers/analog_anemometer.h" #include "drivers/analog_anemometer.h"
#include "dust_sensor/sds011.h"
#include "aprs/wx.h" #include "aprs/wx.h"
#include "../system/include/modbus_rtu/rtu_serial_io.h" #include "../system/include/modbus_rtu/rtu_serial_io.h"
@ -1126,9 +1127,11 @@ int main(int argc, char* argv[]){
} }
#endif #endif
} }
else if ((main_config_data_mode & WX_DUST_SDS011_SERIAL) > 0) { else if ((main_config_data_mode->wx_dust_sensor & WX_DUST_SDS011_SERIAL) > 0) {
if (main_kiss_srl_ctx_ptr->srl_rx_state == SRL_RX_DONE) { if (main_kiss_srl_ctx_ptr->srl_rx_state == SRL_RX_DONE) {
sds011_get_pms(main_kiss_srl_ctx_ptr->srl_rx_buf_pointer, 10, &rte_wx_pm10, &rte_wx_pm2_5);
// restart reception // restart reception
srl_receive_data(main_kiss_srl_ctx_ptr, 10, 0xAA, 0, 0, 0, 0); srl_receive_data(main_kiss_srl_ctx_ptr, 10, 0xAA, 0, 0, 0, 0);

Wyświetl plik

@ -18,23 +18,28 @@ int sds011_get_pms(uint8_t * data, uint16_t data_ln, uint16_t * pm_10, uint16_t
// values received from sensor // values received from sensor
uint8_t head = *(data + 0); uint8_t head = *(data + 0);
uint8_t command_id = *(data + 1); uint8_t command_id = *(data + 1);
uint8_t checksum = *(data + 9); uint8_t checksum = *(data + 8);
// calculate checksum if (command_id == 0xC0) {
for (int i = 2; i < 9; i++) { // calculate checksum
local_checksum += *(data + i); for (int i = 2; i < 8; i++) {
local_checksum += *(data + i);
}
if ((local_checksum & 0xFF) != checksum) {
return -2;
}
local_checksum = *(data + 2) | (*(data + 3) << 8);
*pm_2_5 = local_checksum;
local_checksum = *(data + 4) | (*(data + 5) << 8);
*pm_10 = local_checksum;
return 0;
} }
else {
if ((local_checksum & 0xFF) != checksum) { return -3;
return -2;
} }
local_checksum = *(data + 1) | (*(data + 2) << 8);
*pm_2_5 = local_checksum;
local_checksum = *(data + 4) | (*(data + 5) << 8);
*pm_10 = local_checksum;
return 0;
} }