Salve a tutti!
Sono un nuovo utente del forum e del mondo Arduino! XD
Sono due giorni che ho cominciato ad occuparmi della scrittura C++ e tutto cio' che ne ruota intorno.
Mi serviva un arduino per due progetti, di cui uno sono gia' riuscito egregiamente a cavarmela con qualche centinaio di prove XD
Pero' su questo mi sono impicciato:
Vi spiego.
Sto cercando di creare un programma che mi permetta, all'apertura e alla chiusura della macchina, di accendere per 30 secondi i fari.
In generale avevo in mente questo:
La macchina ha i canonici due fili per le centralizzate a comando di massa, uno è a massa a macchina aperta, uno a macchina chiusa.
Cercando per ore per il web, mescolando e cercando di capire il funzionamento di vari codici, sono arrivato a pensare a un programma che, riassumendo:
Al ricevimento della massa sul pin digitale 12 (chiusura), resetta a 0 la variabile di apertura, e fa passare la variabile di chiusura a 1, attivando il caso 1 della chiusura (accendere il pin 2 ossia rele' 1 (ancora devo arrivare alla temporizzazione per 30 secondi)).
Al ricevimento della massa di apertura, resetta a 0 la variabile di chiusura e fa passare la variabile di apertura a 1, attivando il caso 1 dell'apertura (sempre accensione per 30 secondi che ancora devo scrivere pero' del pin 4 alias rele' 2), in entrambi i casi, la variabile 0 attiva il caso 0, ossia lascia spento il rele'.
Il problema è che in questo modo, dando il contatto al pin 12, si attiva il rele1, ma dando contatto al pin 11, si spenge il rele1 come da programma, ma non si accende il rele2.
Ora, vi incollo il codice che ho scritto, SICURAMENTE sara' una ca*ata, sara' complicato, fatto male e pieno di errori, non potra' SICURAMENTE mai funzionare, ne sono cosciente e piano con le parole quindi, sto imparando!
Ditemi dove sto sbagliando! =(
const int chiusura = 12; // Numero pin dedicato alla ricezione della chiusura
const int apertura = 11; // Numero pin dedicato alla ricezione dell'apertura
const int rele1 = 2; // Numero pin dedicato all'attuazione del rele comando fari
const int rele2 = 4; // Numero pin dedicato all'attuazione del rele comando fari
int countChiusura = 0; // Variabile per la memorizzazione della chiusura
int countApertura = 0; // Variabile per la memorizzazione dell'apertura
void setup() {
pinMode(rele1, OUTPUT); // Setta il pin "rele1" come output
pinMode(chiusura, INPUT); // Setta il pin "chiusura" come input
pinMode(apertura, INPUT); // Setta il pin "apertura" come input
}
void loop(){
if(digitalRead(chiusura)) // Se è presente il segnale di chiusura
{
delay(400); // Aspetta 0,4 secondi poi:
if(countChiusura<=0) countChiusura=countChiusura+1; // Se cCh è uguale o minore a 0, portalo a 1
if(countApertura=1) countApertura=countApertura-1; // Se cAp è uguale a 1, portalo a 0
}
switch (countChiusura) // Switcha tra i due casi:
{
case 1: // Caso 1:
digitalWrite(rele1, LOW); // Accendi rele1
break; // Fine caso 1
case 0: // Caso 0:
digitalWrite(rele1, HIGH); // Spengi rele1
break; // Fine caso 0
}
if(digitalRead(apertura)) // Se è presente il segnale di apertura
{
delay(400); // Aspetta 0,4 secondi poi:
if(countApertura<=0) countApertura=countApertura+1; // Se cAp è uguale o minore di 0, portalo a 1
if(countChiusura=1) countChiusura=countChiusura-1; // Se cCh è uguale a 1, portalo a 0
}
switch (countApertura) // Switcha tra i due casi:
{
case 1: // Caso 1:
digitalWrite(rele2, LOW); // Accendi rele2
break; // Fine caso 1
case 0: // Caso 0:
digitalWrite(rele2, HIGH); // Spengi rele2
break; // Fine caso 0
}
}