fix code for new pcb

This commit is contained in:
interfisch 2024-07-28 21:32:22 +02:00
parent 92118cfb72
commit 513111b656
4 changed files with 107 additions and 24 deletions

View File

@ -131,11 +131,20 @@ void ec_setup() {
ledcWrite(EC_PWM_CH, 127); //50% duty cycle
pinMode(EC_PIN_RELAY_PROBE,OUTPUT); //LOW=Calibration/idle, HIGH=Probe connected
//Test Relay
digitalWrite(EC_PIN_RELAY_PROBE,HIGH);
delay(500);
digitalWrite(EC_PIN_RELAY_PROBE,LOW);
ec_releaseRelay();
}
void ec_loop(unsigned long loopmillis) {
if (!adsenabled) {
return;
}
static unsigned long last_read_ec=0;

View File

@ -44,6 +44,9 @@ float waterlevelMean_array[WATERLEVELMEAN_SIZE];
uint16_t waterlevelMean_array_pos=0;
float waterlevel=WATERLEVEL_UNAVAILABLE;
float watervolume=WATERLEVEL_UNAVAILABLE;
#define DISTANCE_UNAVAILABLE 65535
uint16_t distance=DISTANCE_UNAVAILABLE;
//Calibration
@ -55,7 +58,7 @@ float waterlevel_calib_reservoirArea=20*20*3.1416; //area in cm^2. barrel diamet
uint16_t distance_unsuccessful_count=0;
bool tofenabled=true;
float waterlevel_heightToVolume(float distance);
@ -113,14 +116,13 @@ void waterlevel_setup() {
timing_waterlevel.mintime=30*000;
timing_waterlevel.maxtime=60*60*1000;
for (uint16_t i=0;i<WATERLEVELMEAN_SIZE;i++) {
waterlevelMean_array[i]=WATERLEVEL_UNAVAILABLE; //-1 is also timeout value
}
delay(50);
Wire.begin(PIN_SDA,PIN_SCL);
Serial.print("I2C Clock Speed=");
Serial.println(Wire.getClock());
tofsensor.setTimeout(2000);
if (!tofsensor.init())
@ -128,6 +130,8 @@ void waterlevel_setup() {
Serial.println("Failed to detect and initialize tofsensor!");
publishInfo("error/waterlevel","Failed to detect and initialize tofsensor");
delay(1000);
tofenabled=false;
return;
}
@ -149,25 +153,24 @@ void waterlevel_setup() {
#endif
for (uint16_t i=0;i<WATERLEVELMEAN_SIZE;i++) {
waterlevelMean_array[i]=WATERLEVEL_UNAVAILABLE; //-1 is also timeout value
}
}
void waterlevel_loop(unsigned long loopmillis) {
if (!tofenabled) {
return;
}
static unsigned long last_read_waterlevelB;
if (loopmillis>=last_read_waterlevelB+READINTERVAL_WATERLEVEL) {
last_read_waterlevelB=loopmillis;
uint16_t distance=tofsensor.readRangeSingleMillimeters(); //out of range =255
distance=tofsensor.readRangeSingleMillimeters(); //out of range =255
//Serial.print("Distance reading B="); Serial.print(distance);Serial.println();
if (distance!=WATERLEVEL_UNAVAILABLE && distance!=65535) { //successful
if (distance!=DISTANCE_UNAVAILABLE) { //successful
waterlevelMean_array[waterlevelMean_array_pos]=distance;
waterlevelMean_array_pos++;
waterlevelMean_array_pos%=WATERLEVELMEAN_SIZE;

View File

@ -56,18 +56,18 @@ build_flags=
'-D CLIENT_ID="hydroponic-Test"'
-D PIN_BUTTON=12
-D EC_PIN_RELAY_PROBE=6
-D EC_PIN_FREQ=5
-D EC_PIN_RELAY_PROBE=35
-D EC_PIN_FREQ=38
-D EC_CALIBRATION_POLYNOM={8.718380956513695,-0.026463423062356713,3.425216464107108e-05,-4.069826379094172e-09,2.478900495960682e-13}
-D EC_CALIBRATION_LINEARIZE_BELOW_ADC=2000
-D EC_CALIBRATION_LINEAR_LOWADC=728
-D EC_CALIBRATION_LINEAR_LOWEC=0
-D FLOW_PIN=16
-D FLOW_PIN=17
-D ONE_WIRE_BUS_PIN=18
-D THERMOMETER_ADDR_RESERVOIR={0x28,0xFF,0x30,0xBA,0x85,0x16,0x03,0xB5}
-D THERMOMETER_ADDR_CASE={0x28,0xFF,0x30,0xBA,0x85,0x16,0x03,0xB6}
-D THERMOMETER_ADDR_CASE={0x28,0xFF,0x64,0x0E,0x75,0x83,0x09,0x6F}
-D PIN_SDA=1
-D PIN_SCL=2

View File

@ -1,5 +1,5 @@
#include <Arduino.h>
#include <Wire.h>
bool valueError=false;
@ -8,8 +8,8 @@ unsigned long last_check=0;
#include "wifi_functions.h"
bool debug=false; //print Serial information
bool mqtt=true;
bool debug=true; //print Serial information
bool mqtt=false;
bool eccalibrationoutput=false; //serial output for ec calibration
/* Write to file with:
sudo stty -F /dev/ttyUSB0 115200
@ -20,6 +20,45 @@ bool valuesStabilized=false; //gets set true when values are stable (avaeraging
void i2cscan()
{
byte error, address;
int nDevices;
delay(500);
Serial.println("Scanning...");
nDevices = 0;
for(address = 1; address < 127; address++ )
{
// The i2c_scanner uses the return value of
// the Write.endTransmisstion to see if
// a device did acknowledge to the address.
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0)
{
Serial.print("I2C device found at address 0x");
if (address<16)
Serial.print("0");
Serial.print(address,HEX);
Serial.println(" !");
nDevices++;
}
else if (error==4)
{
Serial.print("Unknown error at address 0x");
if (address<16)
Serial.print("0");
Serial.println(address,HEX);
}
}
}
#include "helpfunctions.h"
#include "ADS1X15.h"
@ -31,16 +70,18 @@ bool valuesStabilized=false; //gets set true when values are stable (avaeraging
// ######## Water Level
#include "waterlevel.h"
#include "waterlevel.h"
// ######## EC
ADS1115 ADS(0x48);
bool adsenabled=true;
#include "ec.h"
// ######## Flow Rate
#include "flow.h"
@ -75,6 +116,19 @@ void setup() {
pixels.begin();
pixels.setBrightness(100); // not so bright
pixels.clear();
//Flash colors for debug
pixels.setPixelColor(0, pixels.Color(255, 0,0));
pixels.show();
delay(250);
pixels.setPixelColor(0, pixels.Color(0, 255,0));
pixels.show();
delay(250);
pixels.setPixelColor(0, pixels.Color(0, 0,255));
pixels.show();
delay(250);
pixels.clear();
#endif
@ -87,6 +141,13 @@ void setup() {
}
Wire.begin(PIN_SDA,PIN_SCL);
Serial.print("I2C Clock Speed=");
Serial.println(Wire.getClock());
i2cscan();
Serial.println("Setup Waterlevel");
waterlevel_setup();
@ -95,8 +156,11 @@ void setup() {
if (!ADS.begin()) {
Serial.println("Error:"); delay(2000); Serial.println("ADS1115 Init Error!");
publishInfo("error/general","ADS1115 Init Error");
adsenabled=false;
}
if (adsenabled){
ADS.setGain(0);
}
ADS.setGain(0);
Serial.println("Setup EC");
@ -292,6 +356,7 @@ void loop() {
if (distance_unsuccessful_count>20) {
if (!valueError && valuesStabilized) { //error just appeared
Serial.println("valueError distance");
@ -300,6 +365,7 @@ void loop() {
valueError=true;
_noErrorsDuringLoop=false;
}
@ -316,6 +382,9 @@ void loop() {
Serial.print("temperature reservoir = ");
Serial.print(tempCmean_reservoir);
Serial.println();
Serial.print("temperature case = ");
Serial.print(tempCmean_case);
Serial.println();
@ -361,7 +430,8 @@ void loop() {
Serial.print("Waterlevel,Volume = ");
Serial.print("distance,Waterlevel,Volume = ");
Serial.print(distance); Serial.print(",");
Serial.print(waterlevel); Serial.print(",");
Serial.print(watervolume); Serial.println();
@ -409,13 +479,14 @@ void loop() {
}
if (waterlevel!=WATERLEVEL_UNAVAILABLE) {
bool _published=publishValueTimed("waterlevel/height",waterlevel,2,timing_waterlevel,loopmillis);
if (_published) { //use height for timing. send calculated volume with it
publishValue("waterlevel/volume",watervolume,2);
}
}
if (ec_flag_measurement_available){