[M] Fix Sensors
This commit is contained in:
parent
f05b6492b0
commit
58ba94a455
22
metesp.ino
22
metesp.ino
@ -27,6 +27,10 @@
|
||||
#define BUTTON_PIN_BITMASK 0x8000
|
||||
|
||||
|
||||
void loop_DRAW(void * pvParameters );
|
||||
void loop_TOUCH(void * pvParameters );
|
||||
void loop_MEASURE(void * pvParameters );
|
||||
|
||||
/* Global Variables -----------------------------------------------------------*/
|
||||
static WiFiMulti wifiMulti;
|
||||
static TwoWire I2C = TwoWire(0);
|
||||
@ -75,9 +79,9 @@ void IRAM_ATTR onSecondTimer() {
|
||||
}
|
||||
view_update = true;
|
||||
time_update = true;
|
||||
tf->minuteTick();
|
||||
|
||||
}
|
||||
tf->tick();
|
||||
}
|
||||
void IRAM_ATTR onTouch(int8_t contacts, GTPoint *points) {
|
||||
if(touch->dev.holding) return;
|
||||
@ -109,18 +113,18 @@ void setup_TIMER(){
|
||||
#define REGISTER_TIMEDFUN(name,code) static void name (){code;}
|
||||
#define REGISTER_TIMEDFUN_CALL(name,min) tf->registerFun(name,min)
|
||||
|
||||
REGISTER_TIMEDFUN(SENSOR_MEASURE_TF, sensor->measure());
|
||||
REGISTER_TIMEDFUN(SENSOR_MEASURE_TF, do{sensor->measure();view_update = true;}while(0));
|
||||
REGISTER_TIMEDFUN(OWM_MEASURE_TF, do{uint8_t i = 0;while(owm && owm[i]){owm[i]->update(); ++i;}}while(0));
|
||||
REGISTER_TIMEDFUN(RECORD_LOCAL_TF, iflx->record_local());
|
||||
REGISTER_TIMEDFUN(RECORD_WEATHER_TF, iflx->record_weather());
|
||||
REGISTER_TIMEDFUN(NTP_TF, ntp->updateNTPtime());
|
||||
|
||||
void setup_TIMEDFUN() {
|
||||
REGISTER_TIMEDFUN_CALL(NTP_TF, 60);
|
||||
REGISTER_TIMEDFUN_CALL(NTP_TF, 60*60);
|
||||
REGISTER_TIMEDFUN_CALL(SENSOR_MEASURE_TF,5);
|
||||
REGISTER_TIMEDFUN_CALL(OWM_MEASURE_TF,5);
|
||||
REGISTER_TIMEDFUN_CALL(RECORD_LOCAL_TF,5);
|
||||
REGISTER_TIMEDFUN_CALL(RECORD_WEATHER_TF,5);
|
||||
REGISTER_TIMEDFUN_CALL(OWM_MEASURE_TF,5*60);
|
||||
// REGISTER_TIMEDFUN_CALL(RECORD_LOCAL_TF,1*60);
|
||||
// REGISTER_TIMEDFUN_CALL(RECORD_WEATHER_TF,5*60);
|
||||
}
|
||||
|
||||
void setup_POWER() {
|
||||
@ -140,11 +144,12 @@ void setup(){
|
||||
setup_TOUCH();
|
||||
setup_TIMER();
|
||||
setup_TIMEDFUN();
|
||||
sensor->init();
|
||||
|
||||
iflx->check();
|
||||
Display::setViews(views,views_size);
|
||||
tf->updateForce();
|
||||
tf->setTick(ntp->dt.minute);
|
||||
tf->setTick(ntp->dt.minute*60 + ntp->dt.second);
|
||||
|
||||
xTaskCreatePinnedToCore(
|
||||
loop_MEASURE, "Task LMeasure",
|
||||
@ -189,8 +194,7 @@ void loop_TOUCH(void * pvParameters ){
|
||||
void loop_MEASURE(void * pvParameters ){
|
||||
for(;;){
|
||||
tf->update();
|
||||
|
||||
vTaskDelay(200);
|
||||
vTaskDelay(500);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -62,8 +62,14 @@ void Display::setViews(DisplayWrapper** view_tab, int8_t size){
|
||||
views = view_tab;
|
||||
};
|
||||
|
||||
void Display::nextView(){ view_curr++; view_curr = view_curr%view_count;}
|
||||
void Display::prevView(){ view_curr--; view_curr = (view_curr+view_count) % view_count;}
|
||||
void Display::nextView() {
|
||||
view_curr++;
|
||||
view_curr = view_curr%view_count;
|
||||
}
|
||||
void Display::prevView() {
|
||||
view_curr--;
|
||||
view_curr = (view_curr+view_count) % view_count;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@ -168,7 +168,7 @@ unsigned long NTPtime::adjustTimeZone(unsigned long _timeStamp, float _timeZone,
|
||||
}
|
||||
|
||||
|
||||
strDateTime NTPtime::getNTPtime(float _timeZone, boolean _DayLightSaving) {
|
||||
strDateTime NTPtime::getNTPtime(float _timeZone, byte _DayLightSaving) {
|
||||
|
||||
Serial.println("NTP: Updating Time");
|
||||
int cb;
|
||||
@ -234,6 +234,6 @@ strDateTime NTPtime::getNTPtime(float _timeZone, boolean _DayLightSaving) {
|
||||
|
||||
|
||||
void NTPtime::updateNTPtime() {
|
||||
strDateTime ndt = getNTPtime(1.0f, true);
|
||||
strDateTime ndt = getNTPtime(1.0f, 1);
|
||||
if(ndt.valid) dt = ndt;
|
||||
};
|
@ -20,7 +20,7 @@ class NTPtime {
|
||||
NTPtime(String NTPtime);
|
||||
strDateTime dt = {0};
|
||||
|
||||
strDateTime getNTPtime(float _timeZone, boolean _DayLightSaving);
|
||||
strDateTime getNTPtime(float _timeZone, byte _DayLightSaving);
|
||||
|
||||
void updateNTPtime();
|
||||
|
||||
|
@ -88,15 +88,6 @@ bool BME280::ReadTrim(){
|
||||
success &= ReadRegister(HUM_DIG_ADDR2, &m_dig[ord], HUM_DIG_ADDR2_LENGTH);
|
||||
ord += HUM_DIG_ADDR2_LENGTH;
|
||||
|
||||
#ifdef DEBUG_ON
|
||||
Serial.print("Dig: ");
|
||||
for(int i = 0; i < 32; ++i){
|
||||
Serial.print(m_dig[i], HEX);
|
||||
Serial.print(" ");
|
||||
}
|
||||
Serial.println();
|
||||
#endif
|
||||
|
||||
return success && ord == DIG_LENGTH;
|
||||
}
|
||||
|
||||
@ -182,7 +173,9 @@ float BME280::CalculatePressure(int32_t raw,int32_t t_fine,PresUnit unit){
|
||||
var2 = var2 + (((int64_t)dig_P4) << 35);
|
||||
var1 = ((var1 * var1 * (int64_t)dig_P3) >> 8) + ((var1 * (int64_t)dig_P2) << 12);
|
||||
var1 = (((((int64_t)1) << 47) + var1)) * ((int64_t)dig_P1) >> 33;
|
||||
if (var1 == 0) { return NAN; } // Don't divide by zero.
|
||||
if (var1 == 0) {
|
||||
return NAN; // Don't divide by zero.
|
||||
}
|
||||
pressure = 1048576 - raw;
|
||||
pressure = (((pressure << 31) - var2) * 3125)/var1;
|
||||
var1 = (((int64_t)dig_P9) * (pressure >> 13) * (pressure >> 13)) >> 25;
|
||||
@ -213,7 +206,9 @@ float BME280::temp(){
|
||||
if(!m_initialized) return 0;
|
||||
int32_t data[8];
|
||||
int32_t t_fine;
|
||||
if(!ReadData(data)){ return NAN; }
|
||||
if(!ReadData(data)) {
|
||||
return NAN;
|
||||
}
|
||||
uint32_t rawTemp = (data[3] << 12) | (data[4] << 4) | (data[5] >> 4);
|
||||
return CalculateTemperature(rawTemp, t_fine);
|
||||
}
|
||||
@ -223,7 +218,9 @@ float BME280::pres(PresUnit unit){
|
||||
if(!m_initialized) return 0;
|
||||
int32_t data[8];
|
||||
int32_t t_fine;
|
||||
if(!ReadData(data)){ return NAN; }
|
||||
if(!ReadData(data)) {
|
||||
return NAN;
|
||||
}
|
||||
uint32_t rawTemp = (data[3] << 12) | (data[4] << 4) | (data[5] >> 4);
|
||||
uint32_t rawPressure = (data[0] << 12) | (data[1] << 4) | (data[2] >> 4);
|
||||
CalculateTemperature(rawTemp, t_fine);
|
||||
@ -235,7 +232,9 @@ float BME280::hum(){
|
||||
if(!m_initialized) return 0;
|
||||
int32_t data[8];
|
||||
int32_t t_fine;
|
||||
if(!ReadData(data)){ return NAN; }
|
||||
if(!ReadData(data)) {
|
||||
return NAN;
|
||||
}
|
||||
uint32_t rawTemp = (data[3] << 12) | (data[4] << 4) | (data[5] >> 4);
|
||||
uint32_t rawHumidity = (data[6] << 8) | data[7];
|
||||
CalculateTemperature(rawTemp, t_fine);
|
||||
|
@ -45,13 +45,13 @@ bool LTR390::ReadChipID(){
|
||||
|
||||
/****************************************************************/
|
||||
void LTR390::WriteSettings() {
|
||||
uint8_t ctrlMeas = LTR390_RESOLUTION_16BIT | LTR390_RATE_1000;
|
||||
uint8_t ctrlGain = LTR390_GAIN_3;
|
||||
uint8_t ctrlMode = LTR390_ON | LTR390_MODE_UVS;
|
||||
WriteRegister(MAIN_CTRL, LTR390_ON | LTR390_MODE_UVS);
|
||||
WriteRegister(MEAS_RATE, LTR390_RESOLUTION_16BIT | LTR390_RATE_1000);
|
||||
WriteRegister(GAIN, LTR390_GAIN_18);
|
||||
|
||||
WriteRegister(MEAS_RATE, ctrlMeas);
|
||||
WriteRegister(GAIN, ctrlGain);
|
||||
WriteRegister(MAIN_CTRL, ctrlMode);
|
||||
// WriteRegister(THRESH_LOW, 100);
|
||||
// WriteRegister(THRESH_UP, 1000);
|
||||
// WriteRegister(INT_CFG, 0x30 | 0x04);
|
||||
}
|
||||
|
||||
|
||||
@ -89,8 +89,11 @@ bool LTR390::ReadData(int32_t data[SENSOR_DATA_LENGTH], uint32_t addr){
|
||||
/****************************************************************/
|
||||
uint32_t LTR390::uv() {
|
||||
if(!m_initialized) return 0;
|
||||
|
||||
int32_t data[SENSOR_DATA_LENGTH];
|
||||
if(!ReadData(data, UVSDATA)){ return 0; }
|
||||
if(!ReadData(data, UVSDATA)) {
|
||||
return 0;
|
||||
}
|
||||
uint32_t rawUV = (data[2] << 16) | (data[1] << 8) | (data[0]);
|
||||
return rawUV;
|
||||
}
|
||||
@ -98,7 +101,7 @@ uint32_t LTR390::uv(){
|
||||
void LTR390::read(uint32_t& uvs, uint32_t& uvi) {
|
||||
if(!m_initialized) return;
|
||||
uvs = uv();
|
||||
uvi = (uvs/ (3*0.25))*3;
|
||||
uvi = (uvs/ 2300)*2;
|
||||
}
|
||||
|
||||
|
||||
|
@ -24,7 +24,8 @@ bool PMSA003::ReadChipID(){
|
||||
uint8_t id = 0;
|
||||
|
||||
ReadRegister(REG_VERSION, &id, 1);
|
||||
Serial.print("PMSSA DEV: ");Serial.println(id);
|
||||
Serial.print("PMSSA DEV: ");
|
||||
Serial.println(id);
|
||||
// switch(id){
|
||||
// case ChipModel_PMSA003_REV0:
|
||||
// m_chip_model = ChipModel_PMSA003_REV0;
|
||||
|
@ -1,4 +1,5 @@
|
||||
#include "sgp40.h"
|
||||
#include <Arduino.h>
|
||||
|
||||
#define SENSOR_DATA_LENGTH 3
|
||||
|
||||
@ -11,7 +12,6 @@ bool SGP40::Initialize(){
|
||||
VocAlgorithm_init(&vocAlgorithmParameters);
|
||||
|
||||
if(success) success = WriteSettings();
|
||||
|
||||
m_initialized = success;
|
||||
return m_initialized;
|
||||
}
|
||||
@ -26,7 +26,7 @@ bool SGP40::ReadChipID(){
|
||||
switch(id) {
|
||||
default:
|
||||
m_chip_model = ChipModel_UNKNOWN;
|
||||
return false;
|
||||
//return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
@ -112,6 +112,7 @@ bool SGP40::ReadData(uint8_t data[SENSOR_DATA_LENGTH], float RH, float T){
|
||||
int32_t SGP40::voc(float RH, float T) {
|
||||
if(!m_initialized) return 0;
|
||||
uint8_t data[SENSOR_DATA_LENGTH];
|
||||
|
||||
ReadData(data, RH, T);
|
||||
uint16_t results = (data[0]<<8) | data[1];
|
||||
int32_t voci = 0;
|
||||
@ -126,7 +127,6 @@ void SGP40::read(int32_t& voc, float RH, float T){
|
||||
ReadData(data, RH, T);
|
||||
uint16_t results = (data[0]<<8) | data[1];
|
||||
VocAlgorithm_process(&vocAlgorithmParameters, results, &voc);
|
||||
return;
|
||||
}
|
||||
|
||||
/****************************************************************/
|
||||
|
@ -1,7 +1,6 @@
|
||||
#ifndef TG_SGP40_H
|
||||
#define TG_SGP40_H
|
||||
|
||||
#include <Arduino.h>
|
||||
#include <Wire.h>
|
||||
#include "../voc.h"
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
#include "tsl25911.h"
|
||||
|
||||
#include <Arduino.h>
|
||||
|
||||
#define SENSOR_DATA_LENGTH 4
|
||||
|
||||
@ -40,6 +41,7 @@ bool TSL25911::ReadChipID(){
|
||||
switch(id) {
|
||||
case ChipModel_TSL25911_REV0:
|
||||
m_chip_model = ChipModel_TSL25911_REV0;
|
||||
break;
|
||||
default:
|
||||
m_chip_model = ChipModel_UNKNOWN;
|
||||
return false;
|
||||
@ -51,9 +53,7 @@ bool TSL25911::ReadChipID(){
|
||||
/****************************************************************/
|
||||
void TSL25911::WriteSettings() {
|
||||
WriteRegister(REG_ENABLE, ENABLE_POWERON | ENABLE_AEN);
|
||||
|
||||
WriteRegister(REG_CTRL, integration | gain);
|
||||
|
||||
WriteRegister(REG_ENABLE,ENABLE_POWEROFF);
|
||||
}
|
||||
|
||||
@ -73,16 +73,14 @@ bool TSL25911::reset(){
|
||||
}
|
||||
|
||||
/****************************************************************/
|
||||
bool TSL25911::ReadData(uint32_t data[SENSOR_DATA_LENGTH]){
|
||||
bool success;
|
||||
success &= WriteRegister(REG_ENABLE, ENABLE_POWERON | ENABLE_AEN);
|
||||
bool TSL25911::ReadData(uint32_t* dataf) {
|
||||
uint8_t* data = static_cast<uint8_t*>(static_cast<void*>(dataf));
|
||||
bool success = WriteRegister(REG_ENABLE, ENABLE_POWERON | ENABLE_AEN);
|
||||
|
||||
delay((uint32_t)atime());
|
||||
|
||||
for (uint8_t d = 0; d <= integration; d++) // Wait x ms for ADC to complete
|
||||
delay(120);
|
||||
|
||||
success &= ReadRegister(CHAN0_LOW,static_cast<uint8_t*>(static_cast<void*>(&data[0])),2);
|
||||
success &= ReadRegister(CHAN1_LOW,static_cast<uint8_t*>(static_cast<void*>(&data[2])),2);
|
||||
success &= ReadRegister(CHAN0_LOW,&data[0],2);
|
||||
success &= ReadRegister(CHAN1_LOW,&data[2],2);
|
||||
|
||||
success &= WriteRegister(REG_ENABLE,ENABLE_POWEROFF);
|
||||
|
||||
@ -140,13 +138,12 @@ float TSL25911::lumLux(){
|
||||
void TSL25911::read(uint16_t& v, uint16_t& ir, uint16_t& f, float& lux) {
|
||||
if(!m_initialized) return;
|
||||
uint32_t data;
|
||||
if(ReadData(&data)){
|
||||
if(!ReadData(&data)) return;
|
||||
v = ((data & 0xFFFF) - (data >> 16));
|
||||
ir = (data >> 16);
|
||||
f = (data & 0xFFFF);
|
||||
lux = ComputeLux(data&0xFFFF,data>>16,again(),atime());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/****************************************************************/
|
||||
|
@ -12,12 +12,22 @@ Sensor::Sensor(TwoWire* i2c){
|
||||
pms = new PMSA003(i2c);
|
||||
}
|
||||
|
||||
void Sensor::TSL_init(void){tsl->begin();}
|
||||
void Sensor::BME_init(void){bme->begin();}
|
||||
void Sensor::TSL_init(void) {
|
||||
tsl->begin();
|
||||
}
|
||||
void Sensor::BME_init(void) {
|
||||
bme->begin();
|
||||
}
|
||||
void Sensor::ICM_init(void) {} //Nothing to do afaik
|
||||
void Sensor::LTR_init(void){ltr->begin();}
|
||||
void Sensor::SGP_init(void){sgp->begin();}
|
||||
void Sensor::PMS_init(void){pms->begin();}
|
||||
void Sensor::LTR_init(void) {
|
||||
ltr->begin();
|
||||
}
|
||||
void Sensor::SGP_init(void) {
|
||||
sgp->begin();
|
||||
}
|
||||
void Sensor::PMS_init(void) {
|
||||
pms->begin();
|
||||
}
|
||||
|
||||
|
||||
void Sensor::BME_measure() {
|
||||
|
@ -50,13 +50,22 @@ class Sensor
|
||||
void SGP_measure(void);
|
||||
void PMS_measure(void);
|
||||
|
||||
void init() {
|
||||
BME_init();
|
||||
LTR_init();
|
||||
TSL_init();
|
||||
SGP_init();
|
||||
PMS_init();
|
||||
ICM_init();
|
||||
}
|
||||
|
||||
void measure() {
|
||||
TSL_measure();
|
||||
BME_measure();
|
||||
ICM_measure();
|
||||
LTR_measure();
|
||||
TSL_measure();
|
||||
SGP_measure();
|
||||
PMS_measure();
|
||||
ICM_measure();
|
||||
}
|
||||
|
||||
private:
|
||||
|
@ -251,9 +251,11 @@ static fix16_t fix16_exp(fix16_t x) {
|
||||
// exp(x) for x = +/- {1, 1/8, 1/64, 1/512}
|
||||
#define NUM_EXP_VALUES 4
|
||||
static const fix16_t exp_pos_values[NUM_EXP_VALUES] = {
|
||||
F16(2.7182818), F16(1.1331485), F16(1.0157477), F16(1.0019550)};
|
||||
F16(2.7182818), F16(1.1331485), F16(1.0157477), F16(1.0019550)
|
||||
};
|
||||
static const fix16_t exp_neg_values[NUM_EXP_VALUES] = {
|
||||
F16(0.3678794), F16(0.8824969), F16(0.9844964), F16(0.9980488)};
|
||||
F16(0.3678794), F16(0.8824969), F16(0.9844964), F16(0.9980488)
|
||||
};
|
||||
const fix16_t* exp_values;
|
||||
|
||||
fix16_t res, arg;
|
||||
|
@ -21,11 +21,11 @@ class TimedFun {
|
||||
funmap.push_back(std::pair<timedfun_ptr,uint64_t>(p,s));
|
||||
};
|
||||
|
||||
void minuteTick(){
|
||||
void tick() {
|
||||
++counter;
|
||||
}
|
||||
|
||||
void minuteTick(int64_t m){
|
||||
void tick(int64_t m) {
|
||||
counter += m;
|
||||
}
|
||||
|
||||
|
@ -8,7 +8,9 @@ void IRAM_ATTR _gt_irq_handler() {
|
||||
interrupts();
|
||||
}
|
||||
|
||||
GT1151::GT1151(TwoWire* i2c){ wire = i2c;}
|
||||
GT1151::GT1151(TwoWire* i2c) {
|
||||
wire = i2c;
|
||||
}
|
||||
|
||||
void GT1151::setHandler(void (*handler)(int8_t, GTPoint*)) {
|
||||
touchHandler = handler;
|
||||
|
Loading…
x
Reference in New Issue
Block a user