No sia il codice che Hardware sono un mio progetto ma purtroppo non capisco questo cambio di comportamento fra ONline e OFFLine, vi metto di seguito il codice:
#include "thingProperties.h"
#define RELAY_PIN_2 2 // pin D2 relè
#define RELAY_PIN_3 3 // pin D3 relè
#define RELAY_PIN_4 4 // pin D4 relè
#define RELAY_PIN_5 5 // pin D5 relè
#define MOS_PIN_6 6 // pin D6 come pin per la modulazione PWM del MOS
#define SBLOCCO_PIN_7 7 // pin D7 come pin per la gestione del lucchetto
#define FINECORSA_PIN_1 A0 // pin analogico A0
#define FINECORSA_PIN_2 A1 // pin analogico A1
#define PULSANTE_PIN_3 A2 // pin analogico A2
int finecorsa1Value;
int finecorsa2Value;
int PulsanteValue;
int PulsanteValue1;
bool StatoApertura1;
bool StatoChiusura2;
bool StatoPulsante;
bool StatoPulsanteFine;
bool StatoApertura1Cambio;
bool StatoChiusura2Cambio;
bool StatoRele_2;
bool StatoRele_3;
bool StatoRele_4;
bool StatoRele_5;
int PrimoCiclo = 0;
//Tempo e PWM
int t0 = 0;
int tm = 1000;
int ymin = 145;
int ymax = 250;
int y = 0; // Variabile PWM
unsigned long tCorrente = 0;
unsigned long t; // Variabile tempo
int AvvioTempo = 0;
void setup() {
// Initialize serial and wait for port to open:
Serial.begin(9600);
// This delay gives the chance to wait for a Serial Monitor without blocking if none is found
delay(1500);
// Defined in thingProperties.h
initProperties();
// Connect to Arduino IoT Cloud
ArduinoCloud.begin(ArduinoIoTPreferredConnection);
/*
The following function allows you to obtain more information
related to the state of network and IoT Cloud connection and errors
the higher number the more granular information you’ll get.
The default is 0 (only errors).
Maximum is 4
*/
setDebugMessageLevel(2);
ArduinoCloud.printDebugInfo();
pinMode(RELAY_PIN_2, OUTPUT);
pinMode(RELAY_PIN_3, OUTPUT);
pinMode(RELAY_PIN_4, OUTPUT);
pinMode(RELAY_PIN_5, OUTPUT);
pinMode(MOS_PIN_6, OUTPUT);
pinMode(SBLOCCO_PIN_7, OUTPUT);
digitalWrite(RELAY_PIN_2, HIGH);
digitalWrite(RELAY_PIN_3, HIGH);
digitalWrite(RELAY_PIN_4, HIGH);
digitalWrite(RELAY_PIN_5, HIGH);
}
void loop() {
ArduinoCloud.update();
// Your code here
finecorsa2Value = analogRead(FINECORSA_PIN_1); // Leggo se chiusa
finecorsa1Value = analogRead(FINECORSA_PIN_2); // Leggo se aperta
StatoApertura1 = (finecorsa1Value < 900); // Se Vero allora la porta è Aperta
StatoChiusura2 = (finecorsa2Value < 900); // Se Veru allora la porta è Chiusa
StatoRele_2 = digitalRead(RELAY_PIN_2);
StatoRele_3 = digitalRead(RELAY_PIN_3);
StatoRele_4 = digitalRead(RELAY_PIN_4);
StatoRele_5 = digitalRead(RELAY_PIN_5);
//Serial.println("Rele 2");
//Serial.println(StatoRele_2);
//Serial.println("Rele 3");
//Serial.println(StatoRele_3);
//Serial.println("Rele 4");
//Serial.println(StatoRele_4);
//Serial.println("Rele 5");
//Serial.println(StatoRele_5);
//Serial.println("Apertura");
//Serial.println(finecorsa1Value);
//Serial.println("Cniusura");
//Serial.println(finecorsa1Value);
//Serial.println("Ciclo");
//Serial.println(PrimoCiclo);
//Serial.println("Velocità rotazione");
//Serial.println(y)//;
//delay(500);
/////////////////////// Gestisco all'accensione il caso in cui la porta non sia ne chiusa ne aperta
if (StatoApertura1 == HIGH && StatoChiusura2 == HIGH && PrimoCiclo == 0) {
// Apro se è a metà corsa appena accesa quindi al primo ciclo (Ciclo 0)
digitalWrite(RELAY_PIN_2, LOW);
digitalWrite(RELAY_PIN_4, LOW);
y = 145;
analogWrite(MOS_PIN_6, y);
///////////////// Se quando accendo la porta è completamente aperta o chiusa vado a saltare tutta la parte della porta ne chiusa ne aperta
}else if (StatoApertura1 == LOW && PrimoCiclo == 0) {
digitalWrite(RELAY_PIN_2, HIGH);
digitalWrite(RELAY_PIN_4, HIGH);
PrimoCiclo = 1;
//Serial.println("INIZIO CHIUSO");
y = 0;
analogWrite(MOS_PIN_6, y);
}else if (StatoChiusura2 == LOW && PrimoCiclo == 0) {
digitalWrite(RELAY_PIN_3, HIGH);
digitalWrite(RELAY_PIN_5, HIGH);
PrimoCiclo = 1;
y = 0;
analogWrite(MOS_PIN_6, y);
//Serial.println("INIZIO APERTO");
}
//////////// Logiche di apertura e chiusura dopo pre ciclo di accensione
PulsanteValue = analogRead(PULSANTE_PIN_3); //Leggo lo stato del pulsante
StatoPulsante = (PulsanteValue > 300); // Se Veru allora la porta è Chiusa
if (StatoApertura1 == LOW && PrimoCiclo == 1 && (StatoPulsanteFine != StatoPulsante || porta == LOW)) { // Se aperta, non è primo ciclo e cambiato lo stato del pulsante
// Chiude la porta se completamente aperta
if(AvvioTempo == 0) {
tCorrente = millis();
// Serial.println("Tempo partito");
}
t = millis() - tCorrente;
digitalWrite(RELAY_PIN_2, HIGH);
digitalWrite(RELAY_PIN_4, HIGH);
//delay(250);
digitalWrite(RELAY_PIN_3, LOW);
digitalWrite(RELAY_PIN_5, LOW);
StatoPulsanteFine = StatoPulsante;
AvvioTempo = 1;
}else if (StatoChiusura2 == LOW && PrimoCiclo == 1 && (StatoPulsanteFine != StatoPulsante || porta == HIGH)) { // Se chiusa, non è primo ciclo e cambiato lo stato del pulsante
// Apre la porta se completamente chiusa
if(AvvioTempo == 0) {
tCorrente = millis();
}
t = millis() - tCorrente;
digitalWrite(SBLOCCO_PIN_7, HIGH); //Apro il lucchetto prima di tutto
//delay(250);
digitalWrite(RELAY_PIN_3, HIGH);
digitalWrite(RELAY_PIN_5, HIGH);
digitalWrite(SBLOCCO_PIN_7, HIGH);
//delay(250);
digitalWrite(RELAY_PIN_2, LOW);
digitalWrite(RELAY_PIN_4, LOW);
StatoPulsanteFine = StatoPulsante;
AvvioTempo = 1; //Resetto la funzione
}else if (StatoRele_2 == LOW && StatoApertura1 == HIGH && StatoChiusura2 == HIGH && PrimoCiclo == 1 && StatoPulsanteFine != StatoPulsante) { // Se in movimento di Apertura, non è primo ciclo e cambiato lo stato del pulsante
//Inverto la corsa se premo pulsante durante la manovra
digitalWrite(RELAY_PIN_2, HIGH);
digitalWrite(RELAY_PIN_4, HIGH);
//delay(250);
digitalWrite(RELAY_PIN_3, LOW);
digitalWrite(RELAY_PIN_5, LOW);
y = 145;
analogWrite(MOS_PIN_6, y);
AvvioTempo = 0; //Resetto la funzione
}else if (StatoRele_3 == LOW && StatoApertura1 == HIGH && StatoChiusura2 == HIGH && PrimoCiclo == 1 && StatoPulsanteFine != StatoPulsante) { // Se in movimento di Chiusura, non è primo ciclo e cambiato lo stato del pulsante
//Inverto la corsa se premo pulsante durante la manovra
analogWrite(MOS_PIN_6, y);
digitalWrite(RELAY_PIN_3, HIGH);
digitalWrite(RELAY_PIN_5, HIGH);
//delay(250);
digitalWrite(RELAY_PIN_2, LOW);
digitalWrite(RELAY_PIN_4, LOW);
y = 145;
analogWrite(MOS_PIN_6, y);
}
//Blocco di manovra se arriva a fine corsa
if (StatoApertura1 == LOW && StatoApertura1Cambio == HIGH && PrimoCiclo == 1) {
digitalWrite(RELAY_PIN_3, HIGH);
digitalWrite(RELAY_PIN_5, HIGH);
digitalWrite(RELAY_PIN_2, HIGH);
digitalWrite(RELAY_PIN_4, HIGH);
digitalWrite(SBLOCCO_PIN_7, LOW); //Sgancio il lucchetto
y = 0;
analogWrite(MOS_PIN_6, y);
AvvioTempo = 0; //Resetto la funzione
}
if (StatoChiusura2 == LOW && StatoChiusura2Cambio == HIGH && PrimoCiclo == 1) {
digitalWrite(RELAY_PIN_3, HIGH);
digitalWrite(RELAY_PIN_5, HIGH);
digitalWrite(RELAY_PIN_2, HIGH);
digitalWrite(RELAY_PIN_4, HIGH);
digitalWrite(SBLOCCO_PIN_7, LOW); //Sgancio il lucchetto
y = 0;
analogWrite(MOS_PIN_6, y);
AvvioTempo = 0; //Resetto la funzione
}
//////////////////////////////////
if (t > 0) {
if (t < tm) {
t = millis() - tCorrente;
y = ((ymax - ymin)*t/tm)+ ymin;
analogWrite(MOS_PIN_6, y);
//Serial.println("Cresce");
}else if (t > tm && t < 2*tm) {
t = millis() - tCorrente;
y = ((ymin-ymax)*((t-tm)/tm))+ymax;
analogWrite(MOS_PIN_6, y);
//Serial.println("Diminuisce");
}
}
StatoPulsanteFine = StatoPulsante;
StatoApertura1Cambio = StatoApertura1;
StatoChiusura2Cambio = StatoChiusura2;
}
/*
Since Porta is READ_WRITE variable, onPortaChange() is
executed every time a new value is received from IoT Cloud.
*/
void onPortaChange() {
// Add your code here to act upon Porta change
}
Spero di non aver fatto danni nel copiarlo