Attenzione che non ho pensato di permettere di ereditare la classe, per cui tutte le variabili sono private e alcune invece potrebbero essere protected.
Mi viene in mente questo ragionamento:
Il cambio dell'auto non ha gli ingranaggi a vista, questi sono inseriti in un contenitore (la classe). Mi serve solo una interfaccia pubblica per cambiare marcia (lo stato).
Ma anche così non è esente da possibili problemi: se si chiama setState passando lo stato attuale, lo stato rimane lo stesso ma il tempo e il on_enter si comportano come se fosse cambiato.
Ci vorrebbe una initState separata dalla setState.
Ci potrebbe pure essere, perché se ci fai caso non ho specificato alcun costruttore, un costruttore che prende come argomento lo stato, ma non saprei poi cosa assegnare a m_previousState.
Faccio diventare m_currentState int8_t e inizialmente m_previousState = -1, booh ora ho solo 127 stati leciti, che sono sempre sufficienti.
E domani sempre la sveglia alle 6:30 Ma perchè ho fatto tardi? Ho provato a inserire un blocco Timer per la partenza in ritardo della partenza treno A... Della serie ho fatto un macello! Alla fine sono riuscito a dare un ritardo di 30 secondi ma poi mi inibiva tutti i servi... Lo lascio così che è meglio... Dopo le feste provo a riscrivere tutto... Sempre se non mi si " ingrippa il cervello!" [cit..] HAhahah!
E con questo "itagliano" vi dò la buonanotte. Marco
Nel tempo libero tra una scala maggiore e una minore ho giocato con il codice di claudio al fine di infilare la gestione del treno in un calsse.
Difatti ho una classe Treno della quale creo istanza così:
Treno trenoA(11); // 11 è il pin PWM, occhio che il ctor non verifica se il pin ha la funzione PWM.
Stando al numero di pin PWM sulla nano posso creare 6 istanze di classe Treno, cioè avere 6 treni.
L'interfaccia della classe è di tipo a comando: true | false
true accelera fino a 255.
false decelera fino a 0.
Il metodo run è da eseguire nel loop, ad esempio:
void loop(void)
{
trenoA.run();
trenoA.command(true); // accelera fino a 255
// trenoA.command(false) // decelera fino a 0
}
La classe Treno eredita la classe GenericFsm e grazie a questo si vede che GenericFsm non è stata pensata per essere ereditata, ma l'unico modo che conosco per aggiustare GenericFsm per essere ereditata è appunto ereditarla e poi apportare modifiche.
per ora funziona abbastanza bene, a memoria non ricordo se ho poi alla fine collegato il trenoA al pin 11... Verifico, comunque da mettere in serie una resistenza e il piccolo condensatore sul reed fà molta differenza...
Interessante poter far girare più treni ma sinceramente non ho capito molto di quello che hai scritto Maurotec.
A volte capita che uno dei due treni và a finire che si fà due o tre giri di seguito... Misteri dei trenini.... Forse potessi mettere un piccolo delay tipo (50) , il difetto forse non si presenterebbe... C'ho provato ma mi si contorce il cervello! HAhaha!
P.S. Non è ancora Natale, se domani tra un cliente è un'altro riesco a finire il P.L. posto il video.
Notte Marco.
Diciamo che ho scritto così di getto e ho spiegato lo spiegabile, che tradotto significa che mi hanno capito solo quelli che conoscono il C++.
Ma il succo è simile agli altri oggetti di arduino, ad esempio la classe Servo che hai usato qui:
Servo myservoA;
Dove crei un oggetto di nome myservoA. Cioè è possibile perché hanno implementato una classe di nome Servo. Io invece ho implementato una classe di nome Treno. Ora dovrebbe essere meno oscuro ciò che ho scritto.
Dimenticavo: Di modellismo e treni ne so poco e allora ho cercato e ho trovato uno standard chiamato NMRA. https://www.nmra.org/
La scoperta è nata dalla curiosità di fare partire un treno che arriva ad una stazione di smistamento e solo dopo farne partire un altro. L'idea era quella che hanno già implementato nello standard, ma anziché fare viaggiare le informazioni sui binari pensavo alle trasmissioni radio HC12 o bluetooth.
Rieccomi,
grazie per la chiarezza Maurotec...
Dalle mie esperienze i ferromodellisti hanno un grado di sordità elevato, perchè quando mi è capitato di parlare della potenzialità che poteva avere Arduino con il mondo "ferromodellistico" ho trovato molte persone riluttanti, ma per fortuna non tutti sono così...
Chiusa polemica,
per quello che ho capito la gestione del plastico in "digitale" si divide in due grosse categorie:
automatizzare tutto e gestire il traffico ferroviario in automatico tramite il PC e programmi a video,
gestire le varie locomotive e vagoni in digitale, con tutte le funzioni che potete immaginare, anche i ganci automatici tra i vari vagoni.
A chi piace il modellismo e l'elettronica suggerisco di andare sul tubo e cercare il famoso plastico di Amburgo.... Miniature wonderland... E li vedete anche video di come realizzano, elettronica, pc e notti perse a guardare i video!
Ciao Gianluca, sono Mario da Torino, questa è la prima domanda che faccio sul forum, sto procedendo con la costruzione di un plastico in scala N e ho visto con interesse le possibilità che potrei avere con Arduino. Premesso che non sono un esperto, vorrei sapere se esiste uno sketch già pronto per un passaggio a livello con sensori, luci e suoni. Se mi puoi dare qualche spiegazione in merito te ne sarei molto grato, ho visto i tuoi filmati, molto interessante... Buona serata
Mi sembra che tu non ti sia ancora presentato: perciò, per cortesia, come da regolamento, presentati nell'apposita discussione spiegando bene quali esperienze hai in elettronica e programmazione, affinché possiamo conoscere la tua esperienza ed esprimerci con termini adeguati.
Poi leggi attentamente tutto il regolamento, in particolare leggi bene i punti 15.3 e 17.1, e impegnati a rispettarlo.
Come sempre, nessuno potrà risponderti prima che ti sia presentato.
Grazie per le precisazioni, ho visto un argomento interessante e ho subito chiesto delle delucidazioni che mi interessano, mi spiace, ma mi sono iscritto senza approfondire il regolamento, scusate la mia inesperienza, non ho mai fatto parte di un forum e non conosco bene i meccanismi chi li regolano, ora mi leggo attentamente il regolamento. Buona serata. Mario