Buon giorno a tutti.... mi servirebbe un consiglio su uno sketch che ho fatto per una fontana automatizzata.... Il mio problema è che ho collegato una serie di relè che mi comanderanno 8 faretti che ho chiamato LED nello sketch, quattro elettrovalvole e due motorini a 24Volt che faranno aprire e chiudere due meccanismi.... il problema è che quando accendono determinate luci ed elettrovalvole devono contemporaneamente funzionare i 2 motorini in apertura ma non lo fanno.... si accendono le luci, poi le elettrovalvole e alla fine i motorini tutto in sequenza.... Penso che il problema sia dovuto ai delay, ma non riesco a capire come risolvere...
Sto usando Arduino Mega 2560 e per il collegamento hardware non c'è nessun problema.
Il codice è questo
#define FPA 2 //Finecorsa1 porta Apertura
#define FSA 3 //Finecorsa2 sole Apertura
#define FFA 4 //Finecorsa3 fiori Apertura
#define FPC 5 //Finecorsa1 porta Chiusura
#define FSC 14 //Finecorsa2 sole Chiusura
#define FFC 6 //Finecorsa3 fiori Chiusura
#define MPA 47 //Relè Motore avanti porta
#define MPI 10 //Relè Motore indietro porta
#define MFA 11 //Relè Motore avanti fiori
#define MFI 12 //Relè Motore indietro fiori
#define LED1 25 //Relè faretto 1
#define LED2 23 //Relè faretto 2
#define LED3 27 //Relè faretto 3
#define LED4 29 //Relè faretto 4
#define LED5 31 //Relè faretto 5
#define LED6 33 //Relè faretto 6
#define LED7 35 //Relè faretto 7
#define LED8 37 //Relè faretto 8
#define EV1 39 //Relè Elettro Valvola 1
#define EV2 41 //Relè Elettro Valvola 2
#define EV3 43 //Relè Elettro Valvola 3
#define EV4 45 //Relè Elettro Valvola 4
#define MUSIC 49 //Relè musica
byte stato_fp = 1;
byte stato_ff = 1;
unsigned int ritardo = 30000; // aggiungere commento
unsigned long pausa = 600000; // aggiungere commento
void setup() {
Serial.begin(9600);
pinMode(FPA, INPUT_PULLUP);
pinMode(FSA, INPUT_PULLUP);
pinMode(FFA, INPUT_PULLUP);
pinMode(FPC, INPUT_PULLUP);
pinMode(FSC, INPUT_PULLUP);
pinMode(FFC, INPUT_PULLUP);
pinMode(MPA, OUTPUT);
pinMode(MPI, OUTPUT);
pinMode(MFA, OUTPUT);
pinMode(MFI, OUTPUT);
digitalWrite(MPA, HIGH);
digitalWrite(MPI, HIGH);
digitalWrite(MFA, HIGH);
digitalWrite(MFI, HIGH);
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
pinMode(LED5, OUTPUT);
pinMode(LED6, OUTPUT);
pinMode(LED7, OUTPUT);
pinMode(LED8, OUTPUT);
pinMode(EV1, OUTPUT);
pinMode(EV2, OUTPUT);
pinMode(EV3, OUTPUT);
pinMode(MUSIC, OUTPUT);
digitalWrite(LED1, HIGH);
digitalWrite(LED2, HIGH);
digitalWrite(LED3, HIGH);
digitalWrite(LED4, HIGH);
digitalWrite(LED5, HIGH);
digitalWrite(LED6, HIGH);
digitalWrite(LED7, HIGH);
digitalWrite(LED8, HIGH);
digitalWrite(EV1, HIGH);
digitalWrite(EV2, HIGH);
digitalWrite(EV3, HIGH);
digitalWrite(EV4, HIGH);
digitalWrite(MUSIC, HIGH);
motore_porta_stop();
motore_fiori_stop();
led_spento();
elettrovalvole_spento();
//Serial.println("resetta tutte le posizioni");
// reset_tutto();
//led_spento();
}
void loop() {
// 1° Step *************************************
Serial.println("Primo Step");
digitalWrite(MUSIC, LOW);
gioco_primo_step();
//delay(ritardo);
led_spento();
elettrovalvole_spento();
// 2° Step *************************************
Serial.println("Secondo Step");
gioco_secondo_step();
// 3° Step *************************************
Serial.println("Terzo Step");
gioco_terzo_step();
motore_porta_apri();
motore_fiori_apri();
stato_fp = 1;
stato_ff = 1;
while (stato_fp != 0 || stato_ff != 0) {
if (digitalRead(FPA) == 0) {
motore_porta_stop();
stato_fp = 0;
}
if (digitalRead(FFA) == 0) {
motore_fiori_stop();
stato_ff = 0;
}
delay(15000);
led_spento();
elettrovalvole_spento();
}
// 4° Step *************************************
Serial.println("Quarto Step Chiusura");
motore_porta_chiudi();
motore_fiori_chiudi();
stato_fp = 1;
stato_ff = 1;
while (stato_fp != 0 || stato_ff != 0) {
if (digitalRead(FPC) == 0) {
motore_porta_stop();
stato_fp = 0;
}
if (digitalRead(FFC) == 0) {
motore_fiori_stop();
stato_ff = 0;
}
}
digitalWrite(MUSIC, HIGH);
delay(pausa);
}
void reset_tutto() {
motore_porta_chiudi();
motore_fiori_chiudi();
stato_fp = 1;
stato_ff = 1;
while (stato_fp != 0 || stato_ff != 0) {
if (digitalRead(FPC) == 0) {
motore_porta_stop();
stato_fp = 0;
}
if (digitalRead(FFC) == 0) {
motore_fiori_stop();
stato_ff = 0;
}
}
}
void motore_porta_stop() {
digitalWrite(MPA, HIGH);
digitalWrite(MPI, HIGH);
}
void motore_fiori_stop() {
digitalWrite(MFA, HIGH);
digitalWrite(MFI, HIGH);
}
void motore_porta_apri() {
digitalWrite(MPA, LOW);
digitalWrite(MPI, HIGH);
}
void motore_fiori_apri() {
digitalWrite(MFA, LOW);
digitalWrite(MFI, HIGH);
}
void motore_porta_chiudi() {
digitalWrite(MPA, HIGH);
digitalWrite(MPI, LOW);
}
void motore_fiori_chiudi() {
digitalWrite(MFA, HIGH);
digitalWrite(MFI, LOW);
}
void led_spento() {
digitalWrite(LED1, HIGH);
digitalWrite(LED2, HIGH);
digitalWrite(LED3, HIGH);
digitalWrite(LED4, HIGH);
digitalWrite(LED5, HIGH);
digitalWrite(LED6, HIGH);
digitalWrite(LED7, HIGH);
digitalWrite(LED8, HIGH);
}
void elettrovalvole_spento() {
digitalWrite(EV1, HIGH);
digitalWrite(EV2, HIGH);
digitalWrite(EV3, HIGH);
digitalWrite(EV4, HIGH);
}
void gioco_primo_step() {
digitalWrite(EV1, LOW);
delay(7000);
digitalWrite(EV1, HIGH);
digitalWrite(EV2, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
digitalWrite(LED5, LOW);
delay(7000);
digitalWrite(EV2, HIGH);
digitalWrite(LED3, HIGH);
digitalWrite(LED4, HIGH);
digitalWrite(LED5, HIGH);
digitalWrite(EV4, LOW);
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
delay(7000);
digitalWrite(EV4, HIGH);
digitalWrite(LED1, HIGH);
digitalWrite(LED2, HIGH);
digitalWrite(EV3, LOW);
digitalWrite(LED6, LOW);
digitalWrite(LED7, LOW);
delay(7000);
digitalWrite(EV3, HIGH);
digitalWrite(LED6, HIGH);
digitalWrite(LED7, HIGH);
}
void gioco_secondo_step() {
digitalWrite(EV1, LOW);
delay(4000);
digitalWrite(EV2, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
digitalWrite(LED5, LOW);
delay(4000);
digitalWrite(EV3, LOW);
digitalWrite(EV4, LOW);
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED6, LOW);
digitalWrite(LED7, LOW);
delay(4000);
digitalWrite(EV2, HIGH);
digitalWrite(EV3, HIGH);
digitalWrite(EV4, HIGH);
led_spento();
delay(2000);
digitalWrite(EV2, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
digitalWrite(LED5, LOW);
delay(4000);
digitalWrite(EV3, LOW);
digitalWrite(EV4, LOW);
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED6, LOW);
digitalWrite(LED7, LOW);
delay(4000);
digitalWrite(EV2, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
digitalWrite(LED5, LOW);
delay(4000);
digitalWrite(EV3, LOW);
digitalWrite(EV4, LOW);
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED6, LOW);
digitalWrite(LED7, LOW);
delay(2000);
led_spento();
elettrovalvole_spento();
}
void gioco_terzo_step() {
digitalWrite(EV2, LOW);
digitalWrite(EV3, LOW);
digitalWrite(EV4, LOW);
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
digitalWrite(LED5, LOW);
digitalWrite(LED6, LOW);
digitalWrite(LED7, LOW);
digitalWrite(LED8, LOW);
}
Il pezzetto di sketch che non fa quello che dovrebbe fare è questo:
// 3° Step *************************************
Serial.println("Terzo Step");
gioco_terzo_step();
motore_porta_apri();
motore_fiori_apri();
stato_fp = 1;
stato_ff = 1;
while (stato_fp != 0 || stato_ff != 0) {
if (digitalRead(FPA) == 0) {
motore_porta_stop();
stato_fp = 0;
}
if (digitalRead(FFA) == 0) {
motore_fiori_stop();
stato_ff = 0;
}
delay(15000);
led_spento();
elettrovalvole_spento();
che dovrebbe far partire il gioco_terzo_step, motore_porta_apri(); e motore_fiori_apri(); insieme..... invece non è così, mi parte il gioco terzo step e quando finisce partono i 2 motori.... c'è qualcuno che potrebbe vedere il motivo per cui succede questo? è da giorni che provo a trovare una soluzione ma non ne vengo a capo... Grazie in anticipo