fix code for new pcb
This commit is contained in:
parent
92118cfb72
commit
513111b656
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
85
src/main.cpp
85
src/main.cpp
|
@ -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){
|
||||
|
|
Loading…
Reference in New Issue