ciao a tutti da qualche giorno ho realizzato questo circuito. dovrebbe essere collegato ipoteticamente ad una macchina, quando giro la chiave si accende arduino e un optoisolatore rileva manda 5 v al pin zero dell'attiny85, i pin 1 e 2 sono collegati all'input rispettivi 1 e 2 del modulo a 2 relè. lo scopo di tutto è: alimento il circuito collegato ai 12v sotto chive che quando si gira la chiave, alimenterà arduino, l'optoisolatore mandeà il segnale alto al pin zero di arduino, e la bobina sarà alimentata a 12 volt.
trascorsi i 30 secondi i due relè devono commutare (arduino prenderà i 12v dalla batteria direttamente, la bobina passerà a 8v tramite un regolatore) l'optoisolatore è sempre sotto chiave. il circuito dove rimanere così fichè la macchina verrà spenta (l'optoisolatore va a livello low,) la bobina deve cambiare di stato dopo 40 secondi dallo spegnimento, e arduino deve cabiare di stato dopo 45 secondi per spegnere il circuito.
è molto ingarbugliata la spiegazione, lo so... in altre parole per semplificare il tutto:
ho uno stato di input a livello HIGH all'accensione di arduino sul pin zero
dopo 30 secondi il pin1 deve passare da 1 a 0 e il pin 2 da 0 a 1
rimane tutto così per il tempo che il pin 0 è HIGH
quando il pin 0 passa allo stato LOW
tutto resta fermo per 40 secondi
il pin 1 passa da 0 a 1
dopo altri 5 secondi il pin 2 passa da 1 a 0
si spegne tutto meccanicamente
scrivo quì sotto una bozza di listato che non sembra vedere correttamente all'accensione il pin 0 HIGH
spero possiate aiutarmi, sto diventando pazzo
# define c 0 //presenza accensione chiave
# define b 1 //bobina da pilotare
# define a 2 //arduino
int val=0;
unsigned long iMillis1 = 0;
unsigned long iMillis2 = 0;
byte acceso1 = LOW;
byte acceso2 = LOW;
int TempoON1 = 6000; //40s
int TempoON2 = 5000; //30s
int TempoON3 = 7000; //45s
/*i tempi sono brevi per via dei vari test*/
void setup()
{pinMode(b, OUTPUT);
pinMode(a, OUTPUT);
pinMode(c, INPUT);
}
void loop() {
val = digitalRead(c);
while ( val == HIGH && acceso1 == LOW)
{ digitalWrite(b, LOW); //bobina accesa (relè input attivo basso)
acceso1 = HIGH;
iMillis1 = millis(); }
if ( acceso1 == HIGH && (millis()-iMillis1)> TempoON2)
{ digitalWrite(b, HIGH); //bobina spenta dopo TON2 (relè input attivo basso)
acceso1 = LOW; }
while ( val == HIGH && acceso2 == LOW)
{acceso2 = HIGH;
iMillis2 = millis(); }
if ( acceso2 == HIGH && (millis()-iMillis2)> TempoON2)
{ digitalWrite(a, LOW); //arduino passa dal +12 sotto chiave al +12 diretta
acceso2 = LOW; }
/*ALLO SPEGNIMENTO Macchina*/
while ( val == LOW && acceso1 == LOW)
{ digitalWrite(b, HIGH); //la bobina è a riposo
acceso1 = HIGH;
iMillis1 = millis(); }
if ( acceso1 == HIGH && (millis()-iMillis1)> TempoON1)
{ digitalWrite(b, LOW); //la bobina si accende
acceso1 = LOW; }
while ( val == LOW && acceso2 == LOW)
{acceso2 = HIGH;
iMillis2 = millis(); }
if ( acceso2 == HIGH && (millis()-iMillis2)> TempoON3)
{ digitalWrite(a, HIGH); //arduino si spegne e si spegne il circuito
acceso2 = LOW;}
}