Lanterne di coda lampeggianti

Utilizza questo forum per richiedere informazioni o condividere le tue esperienze sulla digitalizzazione dei modelli ferroviari.
 
Luca Regoli
Assistente di Stazione
Assistente di Stazione
Messaggi: 1767
Iscritto il: martedì 7 marzo 2006, 7:26

Re: Lanterne di coda lampeggianti

Messaggio da Luca Regoli »

Esatto! Nella raccolta di sketch c'è anche un esempio per decoder accessori, ma non l'ho provato
Luca Regoli
Assistente di Stazione
Assistente di Stazione
Messaggi: 1767
Iscritto il: martedì 7 marzo 2006, 7:26

Re: Lanterne di coda lampeggianti

Messaggio da Luca Regoli »

ecco il video del segnale pilotato con il multimaus di Roco

dtomei
Deviatore
Deviatore
Messaggi: 199
Iscritto il: lunedì 23 gennaio 2012, 12:50
Interesse per i treni reali: Si
Interesse per i treni in modello: Si
Epoche di interesse: IV
Località: Latina

Re: Lanterne di coda lampeggianti

Messaggio da dtomei »

e annamo su :yahoo:

Oggi mi sono arrivate le schedine Attiny85 digispark.... :D manca solo l'optocoupler per isolare e acquisire il segnale dcc, ma intanto inizierò a prenderci la mano.
Domenico Tomei

"...fatti non foste a viver come bruti, ma per seguir virtute e canoscenza." (Inferno XVI)
Luca Regoli
Assistente di Stazione
Assistente di Stazione
Messaggi: 1767
Iscritto il: martedì 7 marzo 2006, 7:26

Re: Lanterne di coda lampeggianti

Messaggio da Luca Regoli »

Grande soddisfazione! Ho modificato la logica dello script per avere il default delle funzioni basso e non alto. Domani se la febbre mi da pace, ci lavoro in modo da avere il rosso di default e giallo e verde premendo F1 ed F2
Avatar utente
Marco Guerra
Assistente di Stazione
Assistente di Stazione
Messaggi: 1453
Iscritto il: giovedì 3 aprile 2008, 22:11
Interesse per i treni reali: Si
Interesse per i treni in modello: Si
Località: Savona

Re: Lanterne di coda lampeggianti

Messaggio da Marco Guerra »

Ottimo Luca, un grande passo per l'umanità. :D
E' bello vedere un'altra applicazione pratica, quando hai messo a posto lo sketch lo puoi postare a beneficio di tutti ?
Marco Guerra

" Io ne ho visti treni che voi automobilisti non potreste immaginarvi "
Avatar utente
Marco Guerra
Assistente di Stazione
Assistente di Stazione
Messaggi: 1453
Iscritto il: giovedì 3 aprile 2008, 22:11
Interesse per i treni reali: Si
Interesse per i treni in modello: Si
Località: Savona

Re: Lanterne di coda lampeggianti

Messaggio da Marco Guerra »

Glifo ha scritto:...con il pic 12f629 IC minidip ,con lo schema di DCCW...
Concordo con te, ottimo decoder ad un prezzo irrisorio, d'altronde la fonte è più che autorevole.
Marco Guerra

" Io ne ho visti treni che voi automobilisti non potreste immaginarvi "
Luca Regoli
Assistente di Stazione
Assistente di Stazione
Messaggi: 1767
Iscritto il: martedì 7 marzo 2006, 7:26

Re: Lanterne di coda lampeggianti

Messaggio da Luca Regoli »

Marco Guerra ha scritto:Ottimo Luca, un grande passo per l'umanità. :D
E' bello vedere un'altra applicazione pratica, quando hai messo a posto lo sketch lo puoi postare a beneficio di tutti ?
Ovvio che si!
Avatar utente
Marco Guerra
Assistente di Stazione
Assistente di Stazione
Messaggi: 1453
Iscritto il: giovedì 3 aprile 2008, 22:11
Interesse per i treni reali: Si
Interesse per i treni in modello: Si
Località: Savona

Re: Lanterne di coda lampeggianti

Messaggio da Marco Guerra »

Evvai !! :up:
Marco Guerra

" Io ne ho visti treni che voi automobilisti non potreste immaginarvi "
Avatar utente
Marco Guerra
Assistente di Stazione
Assistente di Stazione
Messaggi: 1453
Iscritto il: giovedì 3 aprile 2008, 22:11
Interesse per i treni reali: Si
Interesse per i treni in modello: Si
Località: Savona

Re: Lanterne di coda lampeggianti

Messaggio da Marco Guerra »

Mentre aspettiamo di vedere postati i test e i risultati degli ultimi progetti presentati, proviamo ad ottimizzare il codice dello sketch Lanterne per eliminare le parti inutili, ridondate o comunque esose in termini di byte.
Abbiamo visto che la memoria programma dell’Attiny è modesta e il risparmio di risorse può tornare utile per implementare maggiori funzioni.

Apriamo e compiliamo lo sketch Lanterne_coda_01_Attiny85, in basso nella finestra dell’IDE leggiamo il rapporto e apprendiamo che verranno usati 884byte.
Mi riferisco alla versione 1.5.8C dell’IDE, con altre versioni vi sono lievi differenze.
Nella sezione Controllo LED2 rimpiazziamo l’uso della struttura switch con if/else, come per Controllo LED1:

-codice old

Codice: Seleziona tutto

  // Controllo LED2:
  switch (ledState2)        // Testiamo lo stato di LED2
  {
    case LOW:
      if (currentMillis2 - previousMillis2 >= intervalOff2)
      // Se è spento e ha superato l'intervallo di Off...
      {
        previousMillis2 = currentMillis2;    // ...salva il momento in cui LED2 cambia stato...
        ledState2 = HIGH;                    // ...memorizza il cambio di stato in ledState2...
        digitalWrite(ledPin2, ledState2);    // ...e trasferisci il contenuto della variabile ledState2 al pin 4.
      }
      break;                // Se la condizione è vera salta i successivi case
      
    case HIGH:
      if (currentMillis2 - previousMillis2 >= intervalOn2)
      // Se è acceso e ha superato l'intervallo di On...
      {  
        previousMillis2 = currentMillis2;    // ...salva il momento in cui LED2 cambia stato...
        ledState2 = LOW;                     // ...memorizza il cambio di stato in ledState2...
        digitalWrite(ledPin2, ledState2);    // ...e trasferisci il contenuto della variabile ledState2 al pin 4.
      }
      break;                // Se la condizione è vera salta i successivi case

  }
-codice new

Codice: Seleziona tutto

  // Controllo LED2:
  // LED2 è spento e ha superato l'intervallo di Off?...
  if (ledState2 == LOW && (currentMillis2 - previousMillis2 >= intervalOff2))
  {
    previousMillis2 = currentMillis2;    // ...se si, salva il momento in cui LED2 cambia stato...
    ledState2 = HIGH;                    // ...memorizza il cambio di stato in ledState2...
    digitalWrite(ledPin2, ledState2);    // ...e trasferisci il contenuto della variabile ledState2 al pin 4.
  }
  // Oppure, LED2 è acceso e ha superato l'intervallo di On?...  
  else if (ledState2 == HIGH && (currentMillis2 - previousMillis2 >= intervalOn2))
  {  
    previousMillis2 = currentMillis2;    // ...se si, salva il momento in cui LED2 cambia stato...
    ledState2 = LOW;                     // ...memorizza il cambio di stato in ledState2...
    digitalWrite(ledPin2, ledState2);    // ...e trasferisci il contenuto della variabile ledState2 al pin 4.
  }
Ricompiliamo e leggiamo il rapporto: 882byte.
Abbiamo risparmiato ben 2 byte, incoraggiante, no ? :lol:
Andiamo avanti e osserviamo che in ogni struttura if delle sezioni Controllo LED invochiamo la funzione digitalWrite(), se è il momento giusto, solo uno dei due if cambia lo stato della variabile ledState, proviamo quindi a riunire le funzioni in un’unica chiamata alla fine di ogni controllo, cioè quando ledState ha terminato il test :


-codice new

Codice: Seleziona tutto

  // Controllo LED2:
  // LED2 è spento e ha superato l'intervallo di Off?...
  if (ledState2 == LOW && (currentMillis2 - previousMillis2 >= intervalOff2))
  {
    previousMillis2 = currentMillis2;    // ...se si, salva il momento in cui LED2 cambia stato...
    ledState2 = HIGH;                    // ...memorizza il cambio di stato in ledState2...
  }
  // Oppure, LED2 è acceso e ha superato l'intervallo di On?...  
  else if (ledState2 == HIGH && (currentMillis2 - previousMillis2 >= intervalOn2))
  {  
    previousMillis2 = currentMillis2;    // ...se si, salva il momento in cui LED2 cambia stato...
    ledState2 = LOW;                     // ...memorizza il cambio di stato in ledState2...
  }
  digitalWrite(ledPin2, ledState2);    // ...e trasferisci il contenuto della variabile ledState2 al pin 3.
Leggiamo adesso il rapporto: 864byte.
Abbiamo risparmiato atri 18byte, non molti in realtà ma come recita un vecchio proverbio, tutto fa brodo.

Ed ecco lo sketch in versione alleggerita:
Lanterne_coda_03_Attiny85.ino
Marco Guerra

" Io ne ho visti treni che voi automobilisti non potreste immaginarvi "
Avatar utente
Marco Guerra
Assistente di Stazione
Assistente di Stazione
Messaggi: 1453
Iscritto il: giovedì 3 aprile 2008, 22:11
Interesse per i treni reali: Si
Interesse per i treni in modello: Si
Località: Savona

Re: Lanterne di coda lampeggianti

Messaggio da Marco Guerra »

Inseriamo nello sketch la funzione decoder, scaricabile da questo link:
https://rudysmodelrailway.wordpress.com/software/
e la adattiamo alle nostre necessità.
Vogliamo ottenere tre differenti modalità di lampeggio selezionabili tramite F1, F2 o F3 e se nessun tasto funzione è premuto le lanterne dovranno restare spente.

Associamo alla risposta dei tasti funzione la variabile menu, che contiene il tipo di lampeggio scelto.
Inseriamo nel void loop la risposta ai tasti funzione e il controllo dei led.
Creiamo una variabile booleana lamp che stabilisce se le lanterne lampeggiano o sono spente.
Con una struttura switch case definiamo i tempi di off e on delle lanterne a seconda del tasto funzione scelto e modifichiamo la parte finale delle sezioni di controllo dei led.
Lanterne_coda_04_Attiny85_RB_DCC_Decoder_Function.ino
Marco Guerra

" Io ne ho visti treni che voi automobilisti non potreste immaginarvi "
Rispondi

Torna a “Universo Digitale DCC”