ho realizzato (si far per dire )
un timer per bromografo volevo sapere se sbaglio qualcosa (o mi sono dimenticato qualcosa di importante)
nella logica di funzionamento,
il timer è composto oltre al'atmega con quarzo (arduino uno) con 2 display a 7 segmenti (da 3 cifre l'uno)
ad anodi comune, pilotati direttamente dall'arduino senza resistenze,
2 pulsantini e un potenziometro multigiro per impostare il tempo, 2 relè
allora,
- alla pressione di un pulsante (normalmente aperto) si da tensione arduino che parte e porta a livello alto un pin (0) che aziona un minirele che da tensione ad arduino in modo che anche rilasciando il pulsante
arduino rimane acceso (l'altro pulsante normalmente chiuso interrompe l'alimentazione se viene premuto e il tutto si spegne)
una volta acceso c'e un tempo di attesa che serve per selezionare i secondi (0-999) tramite il potenziometro tutti e due i display segnano la stessa cifra (i secondi possono diventare minuti mettendo a massa o a + il pin (A4) se interessa si puo mettere un deviatore a levetta)
appena il tempo di attesa e trascorso (nel codice è impostato a 9 secondi ma modificabile)
un display (composto dalle cifre C1-C2-C3) porta a livello alto il pin 17 che accende le lampade tramite relè
e inizia il conto alla rovescia
appena il display arriva a zero (mentre l'altro display rimane sul valore che impostato) il pin 17 passa a livello basso spegnendo il rele lampade,
e dopo qualche secondo tutti i display vengono spenti compreso il pin A0 che pilota il rele dell'alimentazione spegnendo proprio tutto,
(quest'ultima funzione è attivabile/disattivabile portando a massa o al + il pin A3 )
la cifra max visualizzabile viene stabilita tramite la funzione map (impostata nel codice a 199)
anche il tempo di attesa e il tempo e l'attesa dell'autospegnimento è modificabile (impostata nel codice a 9 e 20 secondi )
HO DIMENTICATO QUALCOSA DI NECESSARIO ??
float spegnimento;
float ritardominuti;
float ritardo;
float ritardo2;
float ritardoautospegnimento;
int C1;
int C2;
int C3;
int ktempo;
int tempo;
int sfarfallio;
int CFR1;
int CFR2;
int CFR3;
float secondi;
int K;
int a;
int b;
int c;
int d;
int E;
int F;
int G;
int H;
void setup () {
//Serial.begin(9600);
pinMode (0, OUTPUT);
pinMode (1, OUTPUT);
pinMode (2, OUTPUT);
pinMode (3, OUTPUT);
pinMode (4, OUTPUT);
pinMode (5, OUTPUT);
pinMode (6, OUTPUT);
pinMode (7, OUTPUT);
pinMode (8, OUTPUT);
pinMode (9, OUTPUT);
pinMode (10, OUTPUT);
pinMode (11, OUTPUT);
pinMode (12, OUTPUT);
pinMode (13, OUTPUT);
pinMode (17, OUTPUT);
pinMode (18, OUTPUT);
pinMode (19, OUTPUT);
digitalWrite (0, HIGH); //pin rele autoaccensione/autospegnimento
digitalWrite (1, HIGH); //punto decomale
digitalWrite (3, HIGH); //seconda cifra
digitalWrite (4, HIGH); //prima cifra
digitalWrite (2, HIGH); //segmento f sinistra,alto
digitalWrite (5, HIGH); //segmento e sinistra,basso
digitalWrite (6, HIGH); //segmento d basso
digitalWrite (7, HIGH); //segmento c destra,basso
digitalWrite (8, HIGH); //segmento b destra,alto
digitalWrite (9, HIGH); //segmento a alto
digitalWrite (10, HIGH); //segmento g centrale
digitalWrite (11, HIGH); //terza cifra
digitalWrite (12, HIGH); //quarta cifra
digitalWrite (18, HIGH); // quinta cifra
digitalWrite (19, HIGH); // quinta cifra
digitalWrite (17, LOW); //USCITA RELE'
digitalWrite (13, HIGH); //USCITA RELE'
}
void loop ()
{
////////////////////////////////////////////////
////////////////////////////////////////////////
ritardo = 9 ; ////// tempo attesa in secondi primma del count down 12
////////////////////////////////////////////////
////////////////////////////////////////////////
c = -1; ////// valori c = -1;
d = 199; ////// iniziali d = 199 ;
////////////////////////////////////////////////
////////////////////////////////////////////////
////// ritardo in secondi prima di spegnbere i spegnere del tutto il timer
ritardoautospegnimento = 20; ////// dopo che il count down e finito
////////////////////////////////////////////////
////////////////////////////////////////////////
////////////////////////////////////////////////
////////////////////////////////////////////////
////// da modificare leggermenre se i display presentano sfarfallio
sfarfallio = 3900; ////// provare ad abbassare/alzare di 100 per volta
////////////////////////////////////////////////
////////////////////////////////////////////////
if (d > 999) d=999 ;
a = 0 ; //fanno farte del map
b = 1023 ; //fanno farte del map
E = a ;
F = b;
G = c;
H = d;
ritardo2=ritardo*1000;//
C1 = map(analogRead(A0), a, b, c, d);
C2 = map(analogRead(A0), a, b, c, d);
C3 = map(analogRead(A0), a, b, c, d);
secondi = millis()/1000;
if (analogRead (A1) > 15) secondi = millis()/1000; ; //
if (analogRead (A1) <= 15)secondi = millis()/60000 + ritardo;
// //
if (millis() > ritardo2)(K = secondi - ritardo); timer è in attesa all'inizio
if (digitalRead (13) ==HIGH) C1 = C1 - K;
if (digitalRead (13) ==HIGH) C2 = C2- K;
if (digitalRead (13) ==HIGH) C3 = C3 - K;
if (millis() > ritardo2 && digitalRead (13) ==HIGH) digitalWrite (17, HIGH); /
if (C1 <= 0) digitalWrite (17, LOW); // spegne il rele quando C1=0
if (C1 <= 0) digitalWrite (13, LOW); // spegne il led 13 quando C1=0
spegnimento=map(analogRead(A0), a, b, c, d)*1000; // trasforma la lettura del display in millisecondi moltiplicandola per 1000
ritardoautospegnimento = ritardoautospegnimento*1000 + ritardo*1000 ;/
if (analogRead (A3) < 15 && millis() > (spegnimento +ritardoautospegnimento)) //A3 e il consenso per l'autospegnimento
{digitalWrite (0, LOW); //pin rele autospegnimento
digitalWrite (1, HIGH); //punto decimale
digitalWrite (3, HIGH); //seconda cifra
digitalWrite (4, HIGH); //prima cifra
digitalWrite (2, HIGH); //segmento f sinistra,alto
digitalWrite (5, HIGH); //segmento e sinistra,basso
digitalWrite (6, HIGH); //segmento d basso
digitalWrite (7, HIGH); //segmento c destra,basso
digitalWrite (8, HIGH); //segmento b destra,alto
digitalWrite (9, HIGH); //segmento a alto
digitalWrite (10, HIGH); //segmento g centrale
digitalWrite (11, HIGH); //terza cifra
digitalWrite (12, HIGH); //quarta cifra
digitalWrite (18, HIGH); // quinta cifra
digitalWrite (19, HIGH); // sesta cifra
digitalWrite (17, LOW); // red rele