Loading Makefile +18 −0 Original line number Diff line number Diff line Loading @@ -108,6 +108,14 @@ ifneq ($(findstring sharp96,${drivers}), ) CONFIG_driver_sharp96 = y endif ifneq ($(findstring tsl2591,${drivers}), ) CONFIG_driver_tsl2591 = y endif ifneq ($(findstring scd4x,${drivers}), ) CONFIG_driver_scd4x = y endif ifneq ($(findstring resistive_load,${drivers}), ) CONFIG_driver_resistive_load = y endif Loading Loading @@ -192,6 +200,16 @@ ifdef CONFIG_driver_mmsubstate COMMON_FLAGS += -DDRIVER_MMSUBSTATE endif ifdef CONFIG_driver_tsl2591 CXX_TARGETS += src/driver/tsl2591.cc COMMON_FLAGS += -DDRIVER_TSL2591 endif ifdef CONFIG_driver_scd4x CXX_TARGETS += src/driver/scd4x.cc COMMON_FLAGS += -DDRIVER_SCD4X endif ifdef CONFIG_driver_nrf24l01 CXX_TARGETS += src/driver/nrf24l01.cc ifeq (${arch_dir}, msp430fr5994lp) Loading include/driver/scd4x.h 0 → 100644 +34 −0 Original line number Diff line number Diff line /* * Copyright 2021 Daniel Friesel * * SPDX-License-Identifier: BSD-2-Clause */ #ifndef SCD4x_H #define SCD4x_H class SCD4x { private: SCD4x(const SCD4x ©); unsigned char const address = 0x62; unsigned char txbuf[2]; unsigned char rxbuf[9]; public: SCD4x() {} unsigned short co2; unsigned short rawTemperature; unsigned short rawHumidity; void start(); void stop(); void startLowPower(); void stopLowPower(); void read(); }; extern SCD4x scd4x; #endif src/app/datalogger/main.cc +18 −0 Original line number Diff line number Diff line Loading @@ -45,6 +45,9 @@ #ifdef DRIVER_TSL2591 #include "driver/tsl2591.h" #endif #ifdef DRIVER_SCD4X #include "driver/scd4x.h" #endif void loop(void) { Loading Loading @@ -136,6 +139,17 @@ void loop(void) kout << dec << "TSL2591 CH0: " << tsl2591.ch0 << " / CH1: " << tsl2591.ch1; kout << hex << " (status: 0x" << tsl2591.getStatus() << ")" << endl; #endif #ifdef DRIVER_SCD4X scd4x.read(); kout << dec << "CO₂: " << scd4x.co2 << " ppm" << endl; kout << "Temperature: "; kout.printf_float(((175.0 * scd4x.rawTemperature) / 65536) - 45); kout << " °c" << endl; kout << "Humidity: "; kout.printf_float((100.0 * scd4x.rawHumidity) / 65536); kout << " %" << endl; #endif } int main(void) Loading Loading @@ -224,6 +238,10 @@ int main(void) tsl2591.init(); #endif #ifdef DRIVER_SCD4X scd4x.start(); #endif arch.idle_loop(); return 0; Loading src/driver/scd4x.cc 0 → 100644 +40 −0 Original line number Diff line number Diff line /* * Copyright 2021 Daniel Friesel * * SPDX-License-Identifier: BSD-2-Clause */ #include "driver/scd4x.h" #include "driver/gpio.h" #if defined(MULTIPASS_ARCH_HAS_I2C) && !defined(DRIVER_SOFTI2C) #include "driver/i2c.h" #else #include "driver/soft_i2c.h" #endif void SCD4x::start() { txbuf[0] = 0x21; txbuf[1] = 0xb1; i2c.xmit(address, 2, txbuf, 0, rxbuf); } void SCD4x::stop() { txbuf[0] = 0x3f; txbuf[1] = 0x86; i2c.xmit(address, 2, txbuf, 0, rxbuf); } void SCD4x::read() { txbuf[0] = 0xec; txbuf[1] = 0x05; if (i2c.xmit(address, 1, txbuf, 9, rxbuf) == 0) { co2 = (rxbuf[0] << 8) + rxbuf[1]; rawTemperature = ((rxbuf[3] << 8) + rxbuf[4]); rawHumidity = (rxbuf[6] << 8) + rxbuf[7]; } } SCD4x scd4x; Loading
Makefile +18 −0 Original line number Diff line number Diff line Loading @@ -108,6 +108,14 @@ ifneq ($(findstring sharp96,${drivers}), ) CONFIG_driver_sharp96 = y endif ifneq ($(findstring tsl2591,${drivers}), ) CONFIG_driver_tsl2591 = y endif ifneq ($(findstring scd4x,${drivers}), ) CONFIG_driver_scd4x = y endif ifneq ($(findstring resistive_load,${drivers}), ) CONFIG_driver_resistive_load = y endif Loading Loading @@ -192,6 +200,16 @@ ifdef CONFIG_driver_mmsubstate COMMON_FLAGS += -DDRIVER_MMSUBSTATE endif ifdef CONFIG_driver_tsl2591 CXX_TARGETS += src/driver/tsl2591.cc COMMON_FLAGS += -DDRIVER_TSL2591 endif ifdef CONFIG_driver_scd4x CXX_TARGETS += src/driver/scd4x.cc COMMON_FLAGS += -DDRIVER_SCD4X endif ifdef CONFIG_driver_nrf24l01 CXX_TARGETS += src/driver/nrf24l01.cc ifeq (${arch_dir}, msp430fr5994lp) Loading
include/driver/scd4x.h 0 → 100644 +34 −0 Original line number Diff line number Diff line /* * Copyright 2021 Daniel Friesel * * SPDX-License-Identifier: BSD-2-Clause */ #ifndef SCD4x_H #define SCD4x_H class SCD4x { private: SCD4x(const SCD4x ©); unsigned char const address = 0x62; unsigned char txbuf[2]; unsigned char rxbuf[9]; public: SCD4x() {} unsigned short co2; unsigned short rawTemperature; unsigned short rawHumidity; void start(); void stop(); void startLowPower(); void stopLowPower(); void read(); }; extern SCD4x scd4x; #endif
src/app/datalogger/main.cc +18 −0 Original line number Diff line number Diff line Loading @@ -45,6 +45,9 @@ #ifdef DRIVER_TSL2591 #include "driver/tsl2591.h" #endif #ifdef DRIVER_SCD4X #include "driver/scd4x.h" #endif void loop(void) { Loading Loading @@ -136,6 +139,17 @@ void loop(void) kout << dec << "TSL2591 CH0: " << tsl2591.ch0 << " / CH1: " << tsl2591.ch1; kout << hex << " (status: 0x" << tsl2591.getStatus() << ")" << endl; #endif #ifdef DRIVER_SCD4X scd4x.read(); kout << dec << "CO₂: " << scd4x.co2 << " ppm" << endl; kout << "Temperature: "; kout.printf_float(((175.0 * scd4x.rawTemperature) / 65536) - 45); kout << " °c" << endl; kout << "Humidity: "; kout.printf_float((100.0 * scd4x.rawHumidity) / 65536); kout << " %" << endl; #endif } int main(void) Loading Loading @@ -224,6 +238,10 @@ int main(void) tsl2591.init(); #endif #ifdef DRIVER_SCD4X scd4x.start(); #endif arch.idle_loop(); return 0; Loading
src/driver/scd4x.cc 0 → 100644 +40 −0 Original line number Diff line number Diff line /* * Copyright 2021 Daniel Friesel * * SPDX-License-Identifier: BSD-2-Clause */ #include "driver/scd4x.h" #include "driver/gpio.h" #if defined(MULTIPASS_ARCH_HAS_I2C) && !defined(DRIVER_SOFTI2C) #include "driver/i2c.h" #else #include "driver/soft_i2c.h" #endif void SCD4x::start() { txbuf[0] = 0x21; txbuf[1] = 0xb1; i2c.xmit(address, 2, txbuf, 0, rxbuf); } void SCD4x::stop() { txbuf[0] = 0x3f; txbuf[1] = 0x86; i2c.xmit(address, 2, txbuf, 0, rxbuf); } void SCD4x::read() { txbuf[0] = 0xec; txbuf[1] = 0x05; if (i2c.xmit(address, 1, txbuf, 9, rxbuf) == 0) { co2 = (rxbuf[0] << 8) + rxbuf[1]; rawTemperature = ((rxbuf[3] << 8) + rxbuf[4]); rawHumidity = (rxbuf[6] << 8) + rxbuf[7]; } } SCD4x scd4x;