ciao a tutti, partiamo col dire che non so se ho creato il forum nella sezione corretta, vi spiego il mio problema, non riesco a capire come far funzionare con la funzione millis 2 relè per pilotare due ventole che devono stare rispettivamente accese 90 sec e 7 sec, accese in modo alternato, quindi quando una è accesa l'altra deve risultare spenta, tutto questo dovrei fare un ciclo di 3/4 ripetizioni per poi tenerle spente entrambi per 30 minuti, e poi far ripartire tutto il ciclo da capo. vorrei anche implementare delle funzioni if e else che a determinate temperature o umidità (tramite parametro vpd) facciano partire i due relè in modo indipendente sempre con lo stesso ciclo di prima, quindi 90 sec e 7 sec. stavo cercando di scrivere un po' il codice ma non so proprio come fare. allego lo sketch.
#define PIN_1 14 //Pin ESP32 collegato al Pin IN1 del Relè
#define PIN_2 27 //Pin ESP32 collegato al Pin IN2 del Relè
#define PIN_3 26 //Pin ESP32 collegato al Pin IN3 del Relè
#define PIN_4 25 //Pin ESP32 collegato al Pin IN4 del Relè
#define PIN_5 33 //Pin ESP32 collegato al Pin IN5 del Relè
#define PIN_6 32 //Pin ESP32 collegato al Pin IN6 del Relè
#define DHTPIN 13 //Pin ESP32 collegato al Pin Data del DHT22
#define DHTTYPE DHT22 // DHT 22 (AM2302)
const unsigned long onTimeR1 = 90000; // 90sec -- aspiratore on
const unsigned long offTimeR1 = 7000; // 7sec -- aspiratore off
const unsigned long onTimeR2 = 7000; // 7sec -- estrattore on
const unsigned long offTimeR2 = 90000; // 90sec -- estrattore off
//const unsigned long onTimeR3 = 1500000; // 25m -- HUMIDIFICATOR
//const unsigned long offTimeR3 = 600000; // 10m
int tAsp = 90000; //tempo aspiratore
int tAsp = LOW;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#define CAYENNE_PRINT Serial
#include <CayenneMQTTESP32.h>
#include <Arduino.h>
#include "Ticker.h"
#include <DHT.h>
#ifndef ESP32
#pragma message(THIS EXAMPLE IS FOR ESP32 ONLY!)
#error Select ESP32 board.
#endif
DHT dht(DHTPIN, DHTTYPE);
void setup() {
pinMode(PIN_1, OUTPUT);
pinMode(PIN_2, OUTPUT);
pinMode(PIN_3, OUTPUT);
pinMode(PIN_4, OUTPUT);
pinMode(PIN_5, OUTPUT);
pinMode(PIN_6, OUTPUT);
Serial.begin(9600);
Serial.println(F("DHTxx test!"));
dht.begin();
Cayenne.begin(username, password, clientID, ssid, wifiPassword);
Cayenne.virtualWrite(0, digitalRead(PIN_1), "digital_actuator", "d");
Cayenne.virtualWrite(1, digitalRead(PIN_2), "digital_actuator", "d");
Cayenne.virtualWrite(2, digitalRead(PIN_3), "digital_actuator", "d");
Cayenne.virtualWrite(3, digitalRead(PIN_4), "digital_actuator", "d");
Cayenne.virtualWrite(4, digitalRead(PIN_5), "digital_actuator", "d");
Cayenne.virtualWrite(5, digitalRead(PIN_6), "digital_actuator", "d");
}
float humidity;
// Read temperature as Celsius (the default)
float temperature;
// Read temperature as Fahrenheit (isFahrenheit = true)
float f;
// Check if any reads failed and exit early (to try again).
// Compute heat index in Fahrenheit (the default)
float hif;
// Compute heat index in Celsius (isFahreheit = false)
float hic;
float VPsat;
float VPactual;
float VPD;
void loop() {
delay (4000);
if (isnan(humidity) || isnan(temperature) || isnan(f)) {
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
humidity = dht.readHumidity();
// Read temperature as Celsius (the default)
temperature = dht.readTemperature();
// Read temperature as Fahrenheit (isFahrenheit = true)
f = dht.readTemperature(false);
// Compute heat index in Fahrenheit (the default)
hif = dht.computeHeatIndex(f, humidity, false);
// Compute heat index in Celsius (isFahreheit = false)
hic = dht.computeHeatIndex(temperature, humidity, true);
Cayenne.loop();
VPsat = 610.7 * 107.5 * temperature / (237.3 + temperature); // Saturation vapor pressure in Pascals
VPactual = (humidity * VPsat) / 100000.0; // Actual vapor pressure in Pascals
VPD = ((100.0 - humidity) /200000.0) * VPsat; // Vapor Pressure Deficit in Pascals
Serial.print(F("Humidity: "));
Serial.print(humidity);
Serial.print(F("% Temperature: "));
Serial.print(temperature);
Serial.print(F("°C "));
Serial.print(f);
Serial.print(F("°F Heat index: "));
Serial.print(hic);
Serial.print(F("°C "));
Serial.print(hif);
Serial.println(F("°F"));
Serial.print(F("VPD: "));
Serial.print(VPD);
dt1 = millis() - t1;
if (dt1 > tAsp)
if (VPD <= 0.60) digitalWrite (PIN_1, HIGH);
else
digitalWrite (PIN_1, LOW);
if (temperature <= 30) digitalWrite (PIN_1, LOW);
else
digitalWrite (PIN_1, HIGH);
}#
Questo è tutto lo sketch, contiene anche delle righe di codice per cayenne mqtt, avevo provato a scrivere un minimo di codice ma non riesco proprio a capire la funzione millis come usarla, ho capito che è un orologio interno, ma oltre a quello niente, avevo messo delle variabili IF per il valore vpd quando supera una certa soglia, che poi vorrebbe attivasse i relè nel modo sopra elencato, 7 secondi uno e 90 l'altro, in modo alternato per 3/4 volte. Grazie