Go Down

Topic: Cronometro particolare x gare di pattinaggio (Read 2764 times) previous topic - next topic

big-ivan

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...:)

Ciao e grazie

Ivan

pgiagno

#76
Apr 29, 2019, 04:36 pm Last Edit: Apr 29, 2019, 05:15 pm by pgiagno
. . .
- 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

. . .
 - modificare la visualizzazione dei secondi eliminando i minuti e facendolo contare anche dopo i 60 sec.
. . .
Questo lo sai fare da solo

. . .
 - 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.

Standardoil

Io voto per mettere 4 coppie di HC11 su 4 canali ben distanziati
Configurati come telecomando, non seriale
Prima legge di Nelson (che sono io): Non scambiare il fine con il mezzo: ricorda "cosa" devi fare, non "come" devi farlo

Non bado a studenti, che copino altrove

Tu hai problema-Io ti domando-Tu non mi rispondi: vuol dire che non ti serve più

pgiagno

#78
Apr 29, 2019, 09:22 pm Last Edit: Apr 29, 2019, 09:25 pm by pgiagno
Grazie Standardoil, il tuo aiuto è prezioso. Io uso abitualmente HC12. Mi spieghi la differenza? Potrei usare gli HC12?

Ciao,
P.

Standardoil

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
Prima legge di Nelson (che sono io): Non scambiare il fine con il mezzo: ricorda "cosa" devi fare, non "come" devi farlo

Non bado a studenti, che copino altrove

Tu hai problema-Io ti domando-Tu non mi rispondi: vuol dire che non ti serve più

pgiagno


big-ivan

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

big-ivan

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

Code: [Select]
/======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

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.


big-ivan

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

big-ivan

#85
May 05, 2019, 09:18 pm Last Edit: May 05, 2019, 09:23 pm by gpb01
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!!! :)


ciao e grazie

Ivan


pgiagno

é 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.

Silente

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à
Dove va un numero va una variabile o una funzione. E dove va una boolean va un insieme di test.

Se vuoi ottenere devi saper spiegare

In pochi capiscono l'importanza di formattare, sii tra di essi

pgiagno

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

Code: [Select]
//======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.

big-ivan

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

Grazie

Ivan

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

Go Up