Go Down

Topic: Aiuto per un vecchio appassionato (Read 2368 times) previous topic - next topic

zoomx


ArTex

Si,

il pulsante/tasto/reed, per ora ho tutto sulla bread bord con tasto del kit arduino. :)

Marco

Datman

#32
Nov 29, 2018, 12:29 pm Last Edit: Dec 10, 2018, 03:14 pm by Datman
Ecco, mi sembra che ci sia tutto. Questa è la versione finale, con tutti gli aggiornamenti di cui abbiamo discusso nei messaggi seguenti questo tranne il for() per l'avviamento progressivo.
Ho velocizzato il lampeggìo della croce di S. Andrea, poiché mi sembra di capire che tu preferisca così.
Code: [Select]
/* Descrizione:
- Parte il treno e si lampeggia la croce di S. Andrea, finché il treno entra nella galleria.
- In galleria, il treno chiude il contatto reed e il treno si ferma. Si spegne la croce di S. Andrea.
- Dopo 2 minuti, riprende a lampeggiare la croce di S. Andrea e il treno riparte.
*/
const byte    REED = 8;  // pin di input a cui è collegato il contatto reed verso massa.
const byte  LED_A = 13; // led A della croce di S. Andrea
                                    // N.B.: Il pin 13 lampeggia all'accensione per la presenza del bootloader.
const byte  LED_B = 11; // led B della croce di S. Andrea
const byte TRENO = 10; // Treno pilotato dal pin digitale 10


// Variabili globali
byte statoReedPrec = 0; // stato precedente del contatto reed
byte marcia=0; // Stato del treno.
unsigned long t1; // millis() per i 2 minuti di attesa.

void setup()
{
pinMode(LED_A, OUTPUT);
pinMode(LED_B, OUTPUT);
pinMode(TRENO, OUTPUT); digitalWrite (TRENO, HIGH); marcia=1; // Il treno parte.
pinMode(REED, INPUT);
pinMode(REED, INPUT_PULLUP); // Resistenza di pullup interna per mettere il pulsante verso massa.
            // Il contatto reed verso massa è anche comodo perché non devi portare fuori il +V.
            // Metti un condensatore da 1uF (meglio se con 100 ohm in serie) tra il pin di ingresso e
}          // massa come antirimbalzo (un contatto reed fa meno rimbalzi).

void loop()
{
if(!digitalRead(REED) && statoReedPrec==1) // Nel momento in cui il treno arriva sul reed
  {
  statoReedPrec=0;
  digitalWrite (TRENO, LOW); marcia=0; // Ferma il treno.
  t1=millis(); // prende il tempo.
  }
if(digitalRead(REED)) statoReedPrec=1;
if(millis()-t1>120000) // Se sono passati 2 minuti
  {
  digitalWrite (TRENO, HIGH); marcia=1; // Riparte il treno.
  }

if(marcia) // Se il treno è in movimento, la croce di S. Andrea lampeggia.
  {
  if(millis()%1000<500) {digitalWrite(LED_B, LOW); digitalWrite(LED_A, HIGH);} // spegne il LED B e accende il LED A.
  else                  {digitalWrite(LED_A, LOW); digitalWrite(LED_B, HIGH);} // spegne il LED A e accende il LED B.
  }
else {digitalWrite(LED_A, LOW); digitalWrite(LED_B, LOW);}
} // END loop()

In realtà, per fare tutto questo sarebbe sufficiente un timer per le luci delle scale con uscita a scambio, che quando viene chiuso un interruttore (deve essere non retriggerabile, cioè se il pulsante rimane premuto alla fine del tempo impostato deve commutare comunque) toglie alimentazione al treno e alla croce di S. Andrea (che deve avere un proprio lampeggatore) per 2 minuti... Qui, però, lo facciamo con Arduino! :-)
Hi,I'm Gianluca from Roma.I play&work with electronics since I was16(1984).
After 25yrs of maintenance on cameras&video mixers,since 2013myJob is HDTVstudios design.
Since Jan2015 IPlayWith Arduino:bit.ly/2F3LPWP
Thanks 4 a Karma if U like my answer

ArTex

#33
Nov 29, 2018, 02:58 pm Last Edit: Nov 29, 2018, 02:58 pm by ArTex
Rieccomi,

ho anche pensato al timer scale, ne avevo uno in "cantina" ma gestire tutto in 220V non mi piaceva, avevo Arduino e la mia "saccenza"...

P.S. Lo sketch, non funziona mi dice alla verifica che alla riga :

if(digitalRead(BUTTON)==1) lastStatoBUTTON=1; // Se il pulsante viene lasciato, ne prende nota.

mi dice : 'BUTTON' was not declared in this scope

Secondo me ho una versione dell' IDE tarocca, "Sanno" che sono un somaro e mi "hanno" fatto
scaricare la versione per i ciucci! :o

Marco

 

Datman

#34
Nov 29, 2018, 03:00 pm Last Edit: Nov 29, 2018, 03:02 pm by Datman
No, no! :-)
Prendi l'ultima versione del programma. L'ho aggiornato un minuto fa.
In questo momento non posso provare con l'IDE il programma che ho scritto.
Hi,I'm Gianluca from Roma.I play&work with electronics since I was16(1984).
After 25yrs of maintenance on cameras&video mixers,since 2013myJob is HDTVstudios design.
Since Jan2015 IPlayWith Arduino:bit.ly/2F3LPWP
Thanks 4 a Karma if U like my answer

Etemenanki

#35
Nov 29, 2018, 03:13 pm Last Edit: Nov 29, 2018, 03:17 pm by Etemenanki
> Datman: correggimi se sbaglio, ma ... statoReedPrec lo metti a zero per evitare che il reed chiuso continui ad azzerare il tempo, e qui e' corretto, ma ho l'impressione che poi quando il treno riparte ed il reed si apre, non lo riporti allo stato precedente ... per cui probabilmente il ciclo te lo fa una sola volta e poi basta ... oppure mi e' sfuggito ?

EDIT: inoltre c'e' qualcosa di strano nell'if dei led ... se il treno non e' in marcia in teoria dovrebbero essere entrambi spenti, in quel modo anche se smettono di lampeggiare, uno dei due non rimane sempre acceso ? (e poi, perche' "millis()%1000" ?)
"Sopravvivere" e' attualmente l'unico lusso che la maggior parte dei Cittadini italiani,
sia pure a costo di enormi sacrifici, riesce ancora a permettersi.

Datman

#36
Nov 29, 2018, 03:23 pm Last Edit: Nov 29, 2018, 03:25 pm by Datman
L'ho modificato. Considerate che lo sto facendo in qualche ritaglio di tempo! :-)

millis()%1000<500 fa lampeggiare i LED a 1Hz, accendendoli o spegnendoli in opposizione a seconda che il resto sia minore o maggiore di 500.
Hi,I'm Gianluca from Roma.I play&work with electronics since I was16(1984).
After 25yrs of maintenance on cameras&video mixers,since 2013myJob is HDTVstudios design.
Since Jan2015 IPlayWith Arduino:bit.ly/2F3LPWP
Thanks 4 a Karma if U like my answer

Datman

#37
Nov 29, 2018, 05:17 pm Last Edit: Nov 29, 2018, 05:42 pm by Datman
Ti torna, Etemenanki? Dovrebbe funzionare...
17.42: ho corretto un "MARCIA" in "marcia".
Hi,I'm Gianluca from Roma.I play&work with electronics since I was16(1984).
After 25yrs of maintenance on cameras&video mixers,since 2013myJob is HDTVstudios design.
Since Jan2015 IPlayWith Arduino:bit.ly/2F3LPWP
Thanks 4 a Karma if U like my answer

Datman

#38
Nov 29, 2018, 07:12 pm Last Edit: Nov 29, 2018, 07:15 pm by Datman
ArTex:
ho anche pensato al timer scale, ne avevo uno in "cantina" ma gestire tutto in 220V non mi piaceva, avevo Arduino e la mia "saccenza"...

Hai ragione. Non mi sono posto il problema pensando che esistessero anche a 12V (e serve anche con lo scambio in uscita, perché deve lavorare al contrario e, come detto, deve essere non ripristinabile). In effetti, però, non ne sono sicuro...
Hi,I'm Gianluca from Roma.I play&work with electronics since I was16(1984).
After 25yrs of maintenance on cameras&video mixers,since 2013myJob is HDTVstudios design.
Since Jan2015 IPlayWith Arduino:bit.ly/2F3LPWP
Thanks 4 a Karma if U like my answer

ArTex

Eccezzionale!

E' perfetto, ti ringrazio molto ora posso finire e fare la vetrina.

Una delle cose per me più difficili da capire sono uso di questo comando:

if(!digitalRead(REED) && statoReedPrec==1)

ho un paio di libri che mi sono letto e riletto più letture sui vari forum, ma proprio non riesco a farli miei, è anche vero che non è il mio campo per mè è uno hobby...

Grazie mille a Voi che vi siente impegnati per me che alla fine sono un "rompibolle".

Se posso e vi fà piacere vorrei condividere questo sketch con i miei amici appassionati fermodellisti, così magari possono usarlo anche loro.

Saluti e a questo punto vi posto appena riesco a fare il video e  la foto del lavoro fatto.

Auguri in anticipo Marco.


Patrick_M

#40
Nov 30, 2018, 09:14 am Last Edit: Nov 30, 2018, 09:15 am by Patrick_M
if(!digitalRead(REED) && statoReedPrec==1)

se il contrario (!=not) della lettura del pin digitale REED è HIGH (quindi vero) e (&&=and) statoReedPrec è uguale ad 1

quindi quando REED è collegato a gnd e lo stato precedente era 1
per inserire (lo sketch) il programma, dall'IDE clicca modifica, clicca copia per il forum poi vieni qui e incolla nel tuo post (ctrl+v) ;)

Datman

#41
Nov 30, 2018, 10:45 am Last Edit: Nov 30, 2018, 12:09 pm by Datman
Ciao, Marco.
Ci farà piacere vederlo in funzione. :-)

if(!digitalRead(REED) && statoReedPrec==1)
equivale a scrivere:
if(digitalRead(REED)==0 && statoReedPrec==1)
e vuol dire: se il contatto reed è chiuso a massa e un attimo fa non lo era, vuol dire che è appena arrivato il treno, perciò fermalo.
Hi,I'm Gianluca from Roma.I play&work with electronics since I was16(1984).
After 25yrs of maintenance on cameras&video mixers,since 2013myJob is HDTVstudios design.
Since Jan2015 IPlayWith Arduino:bit.ly/2F3LPWP
Thanks 4 a Karma if U like my answer

ArTex

Ciao a tutti,

vi mando così il video che ho fatto per ringraziavi dell'aiuto e ne approfitto per...


AUGURI A TUTTI E BUONE FESTE!

Marco

View My Video

Datman

Purtroppo ora dal telefonino non posso vederlo, perché flash Player non è più supportato da Android! :(
Hi,I'm Gianluca from Roma.I play&work with electronics since I was16(1984).
After 25yrs of maintenance on cameras&video mixers,since 2013myJob is HDTVstudios design.
Since Jan2015 IPlayWith Arduino:bit.ly/2F3LPWP
Thanks 4 a Karma if U like my answer

Datman

Adesso capisco perché vogliono eliminare FlashPlayer! Da Windows 7 avvio la riproduzione, ingrandisco perdendo i primi secondi, arriva in fondo e non c'è modo di farlo ripartire se non ricaricando e ingrandendo nuovamente... :(

Bello, però! :-) Fai un altro filmatino un po' più lungo, da poco prima della partenza a poco dopo, senza usare Flash?
Hi,I'm Gianluca from Roma.I play&work with electronics since I was16(1984).
After 25yrs of maintenance on cameras&video mixers,since 2013myJob is HDTVstudios design.
Since Jan2015 IPlayWith Arduino:bit.ly/2F3LPWP
Thanks 4 a Karma if U like my answer

Go Up