Make sensor initialization and measurement more dynamic by checking

which one are declared in config.h
This commit is contained in:
2025-05-17 12:47:59 +02:00
parent ba10840f50
commit 8ad766c377
3 changed files with 52 additions and 37 deletions
+4 -9
View File
@@ -1,28 +1,23 @@
#ifndef CONFIG_H #ifndef CONFIG_H
#define CONFIG_H #define CONFIG_H
//#define VASE_NUM 0
#define MOISTURE_SENSOR_A0 PC0 #define MOISTURE_SENSOR_A0 PC0
#define MOISTURE_SENSOR_A1 PC1 #define MOISTURE_SENSOR_A1 PC1
#define MOISTURE_SENSOR_A2 PC2 #define MOISTURE_SENSOR_A2 PC2
#define MOISTURE_SENSOR_A3 PC3 #define MOISTURE_SENSOR_A3 PC3
#define MOISTURE_SENSOR_A4 PC4 #define MOISTURE_SENSOR_A4 PC4
#define MOISTURE_SENSOR_A5 PC5 #define MOISTURE_SENSOR_A5 PC5
// NOTE: PC6 PC7 are not accessible by default on Arduino Uno R3
// You need to use the ATMega328p on a custom PCB and use pins 1 and 2
//#define MOISTURE_SENSOR_A6 PC6 //#define MOISTURE_SENSOR_A6 PC6
//#define MOISTURE_SENSOR_A7 PC7 //#define MOISTURE_SENSOR_A7 PC7
// You may just connect the pumps that actually are needed in the vase
// or define only the connected pumps on your system
#define PUMP_D3 PD3 #define PUMP_D3 PD3
#define PUMP_D4 PD4 #define PUMP_D4 PD4
#define PUMP_D5 PD5 #define PUMP_D5 PD5
#define PUMP_D6 PD6 //#define PUMP_D6 PD6
#define PUMP_D7 PD7 //#define PUMP_D7 PD7
// TODO: write these to eeprom
#define SENSOR_READINGS 5 #define SENSOR_READINGS 5
#define SENSORS_NUM 6 //#define VASE_NUM 0
#endif #endif
+39 -2
View File
@@ -3,12 +3,49 @@
#include <stdint.h> #include <stdint.h>
#include <stdbool.h> #include <stdbool.h>
#include "config.h"
static const int8_t sensorPins[] = {
#ifdef MOISTURE_SENSOR_A0
MOISTURE_SENSOR_A0,
#endif
#ifdef MOISTURE_SENSOR_A1
MOISTURE_SENSOR_A1,
#endif
#ifdef MOISTURE_SENSOR_A2
MOISTURE_SENSOR_A2,
#endif
#ifdef MOISTURE_SENSOR_A3
MOISTURE_SENSOR_A3,
#endif
#ifdef MOISTURE_SENSOR_A4
MOISTURE_SENSOR_A4,
#endif
#ifdef MOISTURE_SENSOR_A5
MOISTURE_SENSOR_A5,
#endif
#ifdef MOISTURE_SENSOR_A6
MOISTURE_SENSOR_A6,
#endif
#ifdef MOISTURE_SENSOR_A7
MOISTURE_SENSOR_A7,
#endif
};
#define SENSORS_NUM (sizeof(sensorPins) / sizeof(sensorPins[0]))
extern volatile bool readSensors;
void sensorsInit(void); void sensorsInit(void);
void triggerMoistureRead(void); void triggerMoistureRead(void);
int16_t moistureAverage(int8_t sensorPin); int16_t moistureAverage(int8_t sensorPin);
int16_t moistureRead(void); int16_t moistureRead(void);
extern volatile bool readSensors;
#endif #endif
+9 -26
View File
@@ -9,24 +9,12 @@
volatile bool readSensors = false; volatile bool readSensors = false;
void sensorsInit(void) { void sensorsInit(void) {
// Set as input uint8_t sensorMask = 0;
DDRC &= ~((1 << MOISTURE_SENSOR_A0) | for (uint8_t i = 0; i < SENSORS_NUM; i++) {
(1 << MOISTURE_SENSOR_A1) | sensorMask |= (1 << sensorPins[i]);
(1 << MOISTURE_SENSOR_A2) | }
(1 << MOISTURE_SENSOR_A3) | DDRC &= ~sensorMask;
(1 << MOISTURE_SENSOR_A4) | PORTC &= ~sensorMask;
(1 << MOISTURE_SENSOR_A5)) ;
//(1 << MOISTURE_SENSOR_A6) |
//(1 << MOISTURE_SENSOR_A7));
// Disable pullup
PORTC &= ~((1 << MOISTURE_SENSOR_A0) |
(1 << MOISTURE_SENSOR_A1) |
(1 << MOISTURE_SENSOR_A2) |
(1 << MOISTURE_SENSOR_A3) |
(1 << MOISTURE_SENSOR_A4) |
(1 << MOISTURE_SENSOR_A5)) ;
//(1 << MOISTURE_SENSOR_A6) |
//(1 << MOISTURE_SENSOR_A7));
} }
void triggerMoistureRead(void) { void triggerMoistureRead(void) {
@@ -45,16 +33,11 @@ int16_t moistureAverage(int8_t sensorPin) {
} }
int16_t moistureRead(void) { int16_t moistureRead(void) {
uint8_t sensorPins[SENSORS_NUM] = { MOISTURE_SENSOR_A0, MOISTURE_SENSOR_A1, uint16_t overallSum = 0;
MOISTURE_SENSOR_A2, MOISTURE_SENSOR_A3,
MOISTURE_SENSOR_A4, MOISTURE_SENSOR_A5 };
//MOISTURE_SENSOR_A6, MOISTURE_SENSOR_A7 };
int16_t overallSum = 0; for (int8_t i = 0; i < SENSORS_NUM; i++) {
for (int i = 0; i < SENSORS_NUM; i++) {
int16_t sensorAverage = moistureAverage(sensorPins[i]); int16_t sensorAverage = moistureAverage(sensorPins[i]);
//TODO: if a sensor gives 0 or 1023, discard that sensor entirely (means it is disconnected or not working) //TODO: if a sensor gives 0, discard that sensor entirely (means it is disconnected or not working)
overallSum += sensorAverage; overallSum += sensorAverage;
} }