Lanterne di coda lampeggianti
-
- Assistente di Stazione
- Messaggi: 1767
- Iscritto il: martedì 7 marzo 2006, 7:26
Re: Lanterne di coda lampeggianti
Esatto! Nella raccolta di sketch c'è anche un esempio per decoder accessori, ma non l'ho provato
-
- Assistente di Stazione
- Messaggi: 1767
- Iscritto il: martedì 7 marzo 2006, 7:26
Re: Lanterne di coda lampeggianti
ecco il video del segnale pilotato con il multimaus di Roco
-
- 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
e annamo su
Oggi mi sono arrivate le schedine Attiny85 digispark.... manca solo l'optocoupler per isolare e acquisire il segnale dcc, ma intanto inizierò a prenderci la mano.
Oggi mi sono arrivate le schedine Attiny85 digispark.... 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)
"...fatti non foste a viver come bruti, ma per seguir virtute e canoscenza." (Inferno XVI)
-
- Assistente di Stazione
- Messaggi: 1767
- Iscritto il: martedì 7 marzo 2006, 7:26
Re: Lanterne di coda lampeggianti
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
- Marco Guerra
- 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
Ottimo Luca, un grande passo per l'umanità.
E' bello vedere un'altra applicazione pratica, quando hai messo a posto lo sketch lo puoi postare a beneficio di tutti ?
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 "
" Io ne ho visti treni che voi automobilisti non potreste immaginarvi "
- Marco Guerra
- 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
Concordo con te, ottimo decoder ad un prezzo irrisorio, d'altronde la fonte è più che autorevole.Glifo ha scritto:...con il pic 12f629 IC minidip ,con lo schema di DCCW...
Marco Guerra
" Io ne ho visti treni che voi automobilisti non potreste immaginarvi "
" Io ne ho visti treni che voi automobilisti non potreste immaginarvi "
-
- Assistente di Stazione
- Messaggi: 1767
- Iscritto il: martedì 7 marzo 2006, 7:26
Re: Lanterne di coda lampeggianti
Ovvio che si!Marco Guerra ha scritto:Ottimo Luca, un grande passo per l'umanità.
E' bello vedere un'altra applicazione pratica, quando hai messo a posto lo sketch lo puoi postare a beneficio di tutti ?
- Marco Guerra
- 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
Evvai !!
Marco Guerra
" Io ne ho visti treni che voi automobilisti non potreste immaginarvi "
" Io ne ho visti treni che voi automobilisti non potreste immaginarvi "
- Marco Guerra
- 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
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 new
Ricompiliamo e leggiamo il rapporto: 882byte.
Abbiamo risparmiato ben 2 byte, incoraggiante, no ?
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
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:
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: 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.
}
Abbiamo risparmiato ben 2 byte, incoraggiante, no ?
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.
Abbiamo risparmiato atri 18byte, non molti in realtà ma come recita un vecchio proverbio, tutto fa brodo.
Ed ecco lo sketch in versione alleggerita:
Marco Guerra
" Io ne ho visti treni che voi automobilisti non potreste immaginarvi "
" Io ne ho visti treni che voi automobilisti non potreste immaginarvi "
- Marco Guerra
- 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
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.
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.
Marco Guerra
" Io ne ho visti treni che voi automobilisti non potreste immaginarvi "
" Io ne ho visti treni che voi automobilisti non potreste immaginarvi "