Cronometro particolare x gare di pattinaggio

Ciao,
allora adesso metto mano al file, per quel che riguarda il led rosso, deve rimanere acceso solo quando il pulsante è premuto. se il tasto è rilasciato si accende il led verde.

Ora mi metto al lavoro

Grazie

Ivan

Eccomi qua, dopo aver editato il listato con le tue indicazioni, mi sono permesso di personalizzare un po la grafica :slight_smile:

per adesso gira che è una bellezza.....GRAZIE GRAZIE GRAZIE.

si si ho un'appetito, come le fotocellule ti arrivo al posto dei pulsanti!!!! :slight_smile: :slight_smile:

Adesso inizio a progettare la scatola.......

Grazie

Ivan

test_27aprile.ino (12.8 KB)

...mi sono permesso di personalizzare un po la grafica

E hai fatto benissimo. Ricorda che il programma è TUO. Qui sul forum si fornisce solo supporto.

Una raccomandazione: adesso che hai ancora fresco in mente il funzionamento del programma disseminalo di commenti e spiegazioni e, soprattutto, descrivi come è connesso l'hardware (display, led e pulsanti) e come funziona. Non fidarti della tua memoria che sarà sicuramente migliore della mia, ma fra qualche mese non saprai più metterci le mani.

Un'altra ancora. Quando ho cominciato a programmare un vecchio del mestiere mi ha passato una massima fondamentale:

Se un programma funziona quanto basta,
lascialo stare, sennò si guasta

Intendeva dire che, se vuoi introdurre migliorie, crea una copia di quello che funziona e lavora su quella. Dopo che avrai fatto pasticci potrai sempre buttarlo via e tornare all'originale.

Quando sarà finito, allega una foto. Buon lavoro.

Ciao,
P.

CIao Pgiagno,

Allora, oggi sono andato ad una gara(dove partecipava anche mia figlia che ha fatto il terzo posto di categoria), e ho avuto modo di far vedere il funzionamento del mio progettino, e sopratutto convergere alcune idee per il miglioramento.

  • ok lo stop con i funghi e non con le fotocellule.
  • modificare la visualizzazione dei secondi eliminando i minuti e facendolo contare anche dopo i 60 sec.
  • ok per la trasmissione via wireless per i pulsanti e led.

per quest'ultimo punto, pensavo, di non modificare il progetto, e comandando gli ingressi dei pulsanti con dei rele, comandati da un ricevitore wireless...............per fare quest'ultima cosa, devo prendere altri 5 nano (uno come ricevitore e 4 come trasmettitori) oppure bastano solo i moduli tx/rx? (naturalmente alimentati da una batteria da 7,4v)

cmq è piaciuto a tutto lo staff, sia come progetto che come logica di funzionameto...:slight_smile:

Ciao e grazie

Ivan

big-ivan:
. . .

  • ok lo stop con i funghi e non con le fotocellule.
    . . .

Meglio. Le fotocellule necessitano di allineamenti meccanico ottici abbastanza precisi, che possono essere difficili da settare e mantenere in istallazioni mobili

big-ivan:
. . .

  • modificare la visualizzazione dei secondi eliminando i minuti e facendolo contare anche dopo i 60 sec.
    . . .

Questo lo sai fare da solo

big-ivan:
. . .

  • ok per la trasmissione via wireless per i pulsanti e led.
    . . .

Su questo argomento non sono molto ferrato. Ho cominciato a sperimentare su connessioni a 433 MHz uno-a-uno, ma non saprei come fare per trasmissioni molti-a-uno nel caso dei pulsanti rossi. Trasmettere uno-a-molti (è il caso dell'accensione del jumbo led) è abbastanza semplice, e appena mi arrivano gli altri moduli faccio la prova con i ricevitori tarati su canali differenti, in modo da non darsi noia.
Altro problema è il molti-a-uno. Ci vorrebbe un ricevitore in grado di ricevere contemporaneamente quattro canali differenti, oppure quattro ricevitori tarati ciascuno su un canale diverso. Devo fare prove e sarà una cosa lunga.

Questo topic è ormai monopolizzato da noi due e temo che possa non venire nessuno con suggerimenti. Potresti provare ad aprire un altro topic con questo problema e vedere cosa dicono più esperti in questo campo.

Ciao,
P.

Io voto per mettere 4 coppie di HC11 su 4 canali ben distanziati
Configurati come telecomando, non seriale

Grazie Standardoil, il tuo aiuto è prezioso. Io uso abitualmente HC12. Mi spieghi la differenza? Potrei usare gli HC12?

Ciao,
P.

Gli HC11 hanno un modo di funzionamento in più rispetto ai 12
Che copia sulle uscite del ricevitore gli ingressi del trasmettitore
Cerca i pdf

Grazie, provvedo.

Ciao,
P.

Buonasera,
Rieccomi dopo qualche giorno.......
@ pgiagno
Non sono mia sicuro di riuscirci............
Praticamente devo modificare i “00” dei secondi in “000” e togliere la stringa relativa ai minuti. Poi devo modificare il comando che moltiplica per 6000 e farlo moltiplicare per 10000!!!
Appena rientro a casa vedo di postare una stringa modificata...........
Per il resto, sto aspettando che arrivi tutto l’occorrente per saldare il tutto definitivamente.
Intanto ho trovato un piccolo intoppo con i led............. quelli verdi mi rimangono sempre accesi come i rossi.............. controllerò le uscite e sopratutto se le porte sono corrette!!! :).
Ho avuto un bel po da fare con il lavoro/ attività della bambina (3 gare in 8 giorni) e non sono riuscito a guardare il progetto.

Ciao e Grazie

Ivan

ecco come ho modificato, ma non è corretto. non riesco a capire dove sbaglio!!!

/======INIZIO PARTE PER CORSIA 4
     time4 = corsia4Time - startTime; //calcola i millisecondi impiegati
     //trasforma i millisecondi in minuti(1 cifra), secondi(2 cifre),
     //millisecondi(3 cifre)
     unsigned long secondi, millesimi;
     //i minuti sono il quoziente della divisione del tempo ottenuto x 60000
     //i secondi sono il quoziente della divisione x 1000 del resto della
     //divisione x 60000
     secondi = (time4 % 100000) / 1000;
     //i millesimi sono il resto della divisione x 1000 del resto della
     //divisione x 60000
     millesimi = (time4 % 60000) % 1000;
     //si presuppone che i minuti siano < 10
     lcd.setCursor(9, 3);
     lcd.print("     ");
     //scrivi i secondi anteponendo 0 se sono < 10
     if (secondi < 10) {
       lcd.print("0");
     }
     lcd.print(secondi);
     lcd.print("'");
     //scrivi i millisecondi anteponendo 00 se < 10 oppure 0 se < 100
     if (millesimi < 100) {
       lcd.print("0");
     }
     if (millesimi < 10) {
       lcd.print("0");
     }
     lcd.print(millesimi);
//======FINE PARTE PER CORSIA 4

grazie

Ivan

Il segreto sta in due tipi diversi di divisione che ti fornisce il C++.

Contrariamente a qualunque calcolatrice tascabile, che quando fa la divisione ti fornisce il quoziente con tutti i decimali che può calcolare, il linguaggio usato da Arduino ti fornisce una divisione del tipo A / B (" A diviso B") che dà come risultato il solo QUOZIENTE e una divisione A % B ("A modulo B") che dà come risultato il solo RESTO della divisione.

Se ti studi questi due operatori, con tutti gli esempi, non è possibile che tu non riesca a dividere un numero (ad es. 123456 millisecondi) in secondi (ad es 123) e millisecondi (ad es 456).

Una volta ottenuti i due valori, per stampare gli zeri eventualmente mancanti ai millisecondi, perché inferiori a 100 o a 10, puoi usare la parte di programma che c'è già.

Posta quello che riesci a fare.

Ciao,
P.

Standardoil:
Io voto per mettere 4 coppie di HC11 su 4 canali ben distanziati
Configurati come telecomando, non seriale

ma gli HC11, per trasmettere devo obbligatoriamente accoppiarlo ad un'altro Nano, per dirgli cosa trasmettere giusto?

quindi dovrei prende 8 HC11 e altri 8 Nano, per far si di trasmettere i dati? ma posso codificarli che uno lavori solo con il suo ricevitore? se un pulsante è più lontano dal ricevitore rispetto agli altri, può sfalsarmi il tempo con la latenza?

Grazie
Ivan

pgiagno:
Il segreto sta in due tipi diversi di divisione che ti fornisce il C++.

Contrariamente a qualunque calcolatrice tascabile, che quando fa la divisione ti fornisce il quoziente con tutti i decimali che può calcolare, il linguaggio usato da Arduino ti fornisce una divisione del tipo A / B (" A diviso B") che dà come risultato il solo QUOZIENTE e una divisione A % B ("A modulo B") che dà come risultato il solo RESTO della divisione.

Se ti studi questi due operatori, con tutti gli esempi, non è possibile che tu non riesca a dividere un numero (ad es. 123456 millisecondi) in secondi (ad es 123) e millisecondi (ad es 456).

Una volta ottenuti i due valori, per stampare gli zeri eventualmente mancanti ai millisecondi, perché inferiori a 100 o a 10, puoi usare la parte di programma che c'è già.

Posta quello che riesci a fare.

Ciao,
P.

é da stamattina che leggo il tuo pos.............
non ci sono ancora venuto a capo.

Cmq a parte questo, sto testando il progetto, e fino ad ora non mi ha dato problemi.
devo solo modificare lo schema elettrico sui pulsanti per accendere il led, perchè ho trovato dei pulsanti in alluminio, con doppio contatto stabile NO, quidi mettendo una batteria per alimentare il wifi, posso alimentare il led direttamente dal pulsante!!! :slight_smile:

ciao e grazie

Ivan

big-ivan:
é da stamattina che leggo il tuo pos.............
non ci sono ancora venuto a capo...

Eppure è semplice.

Prendi un valore in millisecondi. Per semplicità di esempio prendiamo 123456. Questi sono MILLIsecondi, se tu vuoi i secondi, a occhio, 123456 millisecondi quanti secondi INTERI contengono?

E se tu togli quei secondi INTERI dai 123456 millisecondi quanti millisecondi restano?

Dài prova, e se non dormi domattina andiamo avanti.

Ciao,
P.

Io ti cosniglio una cosa, non puoi venire a capo del problema se hai difficoltà sia hardware che software, comincia a risolvere, e dico risolvere definitivamente, quelle hardware, e soltanto in un momento successivo preoccupati del codice. Questo per due ragioni:

  1. se testi un codice su un hardware di cui non sei sicuro e non va come sai che il problema non é hardware?
  2. se l'hardware é a posto il codice é già scritto per metà

big-ivan:
ecco come ho modificato, ma non è corretto. non riesco a capire dove sbaglio!!!...

Prova così:

//======INIZIO PARTE PER CORSIA 4
     time4 = corsia4Time - startTime; //calcola i millisecondi impiegati
/*===PARTE DA TOGLIERE====================================================
     //trasforma i millisecondi in minuti(1 cifra), secondi(2 cifre),
     //millisecondi(3 cifre)
========================================================================*/
     unsigned long secondi, millesimi;
/*===PARTE DA TOGLIERE====================================================
     //i minuti sono il quoziente della divisione del tempo ottenuto x 60000
     //i secondi sono il quoziente della divisione x 1000 del resto della
     //divisione x 60000
     secondi = (time4 % 100000) / 1000; 
========================================================================*/
     secondi = time4 / 1000;	//istruzione da aggiungere
/*===PARTE DA TOGLIERE====================================================
     //i millesimi sono il resto della divisione x 1000 del resto della
     //divisione x 60000
     millesimi = (time4 % 60000) % 1000;
========================================================================*/
     millesimi = time4 % 1000;	//istruzione da aggiungere
/*===PARTE DA TOGLIERE====================================================
     //si presuppone che i minuti siano < 10
========================================================================*/
     lcd.setCursor(9, 3);
/*===PARTE DA TOGLIERE====================================================
     lcd.print("     ");
     //scrivi i secondi anteponendo 0 se sono < 10
     if (secondi < 10) {
       lcd.print("0");
     }
========================================================================*/
     lcd.print(secondi);
     lcd.print("'");
     //scrivi i millisecondi anteponendo 00 se < 10 oppure 0 se < 100
     if (millesimi < 100) {
       lcd.print("0");
     }
     if (millesimi < 10) {
       lcd.print("0");
     }
     lcd.print(millesimi);
//======FINE PARTE PER CORSIA 4

S.E.&O.

Ciao,
P.

CIao Pgiagno,
domani sera mi metto dietro a fare delle prove.......

Grazie

Ivan

P.S. pian piano arriva il materiale............ :slight_smile:

big-ivan:
ma gli HC11, per trasmettere devo obbligatoriamente accoppiarlo ad un'altro Nano, per dirgli cosa trasmettere giusto?

Come già accennato in altro post conosco gli HC12 e non ho mai usato gli HC11. Dai data sheet comunque mi sembra che siano molto simili, ma io preferirei darti consigli solo sugli HC12.
Sì, dovrà essere accoppiato a un altro nano. Ogni apparato periferico non potrà avere soltanto un led e un pulsante, ma dovrà avere necessariamente: un led, un pulsante, un modulo HC12, un modulo di alimentazione (LiPo o Power bank), un modulo di ricarica (nel caso delle LiPo fisse), un interruttore acceso/spento.

big-ivan:
quindi dovrei prende 8 HC11 e altri 8 Nano, per far si di trasmettere i dati?

No, ti ci vorranno 8 HC12, 4 nella consolle e 1 per ogni apparato periferico, e 4 nano, 1 per ogni apparato periferico. I 4 HC12 della consolle possono essere connessi tutti e 4 all'unico Arduino Nano.

big-ivan:
ma posso codificarli che uno lavori solo con il suo ricevitore?

Non ho mai provato, ma a leggere sul data sheet si può fare distanziando i canali di trasmissione/ricezione di almeno 5 canali. Essendocene 100 a disposizione non dovrebbe essere difficile.

big-ivan:
se un pulsante è più lontano dal ricevitore rispetto agli altri, può sfalsarmi il tempo con la latenza?

Se intendi che la distanza può influire sulla precisione della temporizzazione ti ricordo che la trasmissione radio viaggia a circa 300.000 km/s. Altri fattori influiranno sulla precisione, ma una programmazione attenta della scansione dei ricevitori dovrebbe minimizzare i ritardi (pochi ms) e comunque renderli circa uguali per tutti.

Ciao,
P.

Lo ho gia scritto, e adesso lo riscrivo, per un'ultima volta
I moduli hc11 hanno un modo di funzionamento che permette il loro uso a 'copiare' degli ingressi, quindi non scambio dati, ma simile a dei radiocomandi per cancello
Poi, se in tutto questo tempo a chi gli serve non ha nemmeno guardato i datasheet....