Go Down

Topic: "Decodifica" sequenza di note con arduino (Read 898 times) previous topic - next topic

Lima68

Avevo trovato questo in rete, ma parlavano di frequenze per applicazioni RPM(contagiri) e quindi ho lasciato stare, ma vedo di reperire i componeti e provare. Dici che, con questa configurazione si riesca a fare ciò che mi serve, cioè leggere varie frequenze una dopo l'altra

Code: [Select]

tone (buzz, 1152, tempo);
  delay(tempo);
  tone (buzz, 1446, tempo);
  delay(tempo);
  tone (buzz, 991, tempo);
  delay(tempo);
  tone (buzz, 1192, tempo);
  delay(tempo);
  tone (buzz, 2400, tempo);


, oppure no?

Datman

Hi,I'm Gianluca from Roma.I play&work with electronics since I was16(1984).
After 25yrs of maintenance on cameras&video mixers,since 2013myJob is HDTVstudios design.
Since Jan2015 IPlayWith Arduino:bit.ly/2F3LPWP
Thanks 4 a Karma if U like my answer

Lima68

Porta pazienza, ma che senso ha rispondere ad una mia domanda, con una frase riportante una cosa scontata? Lo so anch'io che il codice che ho riportato emette suoni. Io questi suoni li devo decodificare, in base alla loro frequenza,o in qualsiasi altro modo che mi potete spiegare, per far compiere ad arduino determinate cose(nel mio caso si tratta di scrivere uan cosa sul monitor seriale o su un display LCD). Ho chiesto se la cosa è fattibile e mi avete detto di si..bene...ora vi chiedo come poterlo fare. C'è qualche buon uomo/donna che può spiegarmelo,magari con spiegazioni più accurate, senza scrivere cose ovvie o non rilevanti al fine di ciò che chiedo?
(non sto parlando di codifica/decodifica di toni DTMF)

gpb01

#33
Jul 04, 2020, 09:26 am Last Edit: Jul 04, 2020, 09:27 am by gpb01
Guarda, io l'unica cosa che consco sono due ottime librerie che permetto di leggere, con una buona precisione, una frequenza su Arduino ... librerie con cui è anche possibile fare un piccolo frequenzimetro ... magari puoi adattarle per capire la frequenza che ti interessa.

Sono dello stesso autore e sono due perché sono suddivise per range di frequenza identificabile;  la prima, FreqMeasure, è specifica per frequenza tra 0.1 Hz fino ad 1 KHz;  la seconda FreqCount, è specifica per frequenze tra 1 KHz fino a 8 MHz (su Arduino, su altre schede arriva anche sino a 65 MHz).

Studiatele e adattale alla tua esigenza (... ci sono anche gli schemi di ingresso).

Guglielmo
Search is Your friend ... or I am Your enemy !

Datman

#34
Jul 04, 2020, 10:05 am Last Edit: Jul 04, 2020, 11:49 am by Datman
Avevo trovato questo in rete, ma parlavano di frequenze (...). Dici che, con questa configurazione si riesca a fare ciò che mi serve, cioè leggere varie frequenze una dopo l'altra
Code: [Select]

tone (buzz, 1152, tempo);
  delay(tempo);
  tone (buzz, 1446, tempo);
  delay(tempo);
  tone (buzz, 991, tempo);
  delay(tempo);
  tone (buzz, 1192, tempo);
  delay(tempo);
  tone (buzz, 2400, tempo);

, oppure no?
Con quel codice non puoi leggere frequenze. È scontato, ma la tua domanda era proprio quella...
Chiedi se con quella configurazione puoi leggere una frequenza... Di che configurazione parli? Circuitale? Subito dopo hai riportato il codice, perciò pensavo che ti riferissi a quello e che, quanto meno, avessi incollato il codice sbagliato!

Per generare i segnali, invece, va bene.
Hi,I'm Gianluca from Roma.I play&work with electronics since I was16(1984).
After 25yrs of maintenance on cameras&video mixers,since 2013myJob is HDTVstudios design.
Since Jan2015 IPlayWith Arduino:bit.ly/2F3LPWP
Thanks 4 a Karma if U like my answer

Claudio_FF

#35
Jul 04, 2020, 11:45 am Last Edit: Jul 04, 2020, 12:25 pm by Claudio_FF
Comunque il compito non mi sembra affatto liquidabile con "misurare una frequenza" (che richiede che la frequenza sia stabile per un certo tempo di misura), si tratta di riconoscere sequenze asincrone di toni della durata di 70ms con relative interpause... cioè, mi sembra ci sia da scrivere un vero e proprio modem AFSK software, con relativa macchina a stati per il riconoscimento non solo delle frequenze ma anche di tutte le temporizzazioni...
* * * * Una domanda ben posta è già mezza risposta * * * *

Datman

#36
Jul 04, 2020, 11:51 am Last Edit: Jul 04, 2020, 12:01 pm by Datman
Infatti io leggerei il tempo con micros(), calcolerei la durata e, da quella, identificherei il tono in arrivo, senza perdere tempo a fare la divisione per calcolare la frequenza. L'uso dall'interrupt potrebbe essere controproducente. Piuttosto, deve essere tutto molto rapido.
Hi,I'm Gianluca from Roma.I play&work with electronics since I was16(1984).
After 25yrs of maintenance on cameras&video mixers,since 2013myJob is HDTVstudios design.
Since Jan2015 IPlayWith Arduino:bit.ly/2F3LPWP
Thanks 4 a Karma if U like my answer

Datman

Ad esempio, un while che attende un segnale

Sul fronte di salita prende il tempo

Un altro while attende la discesa

Quando arriva, prende il tempo e calcola la durata

In base alla durata, attiva l'uscita corrispondente

Ritorna ad attendere la salita

Fa le stesse cose

Finché la durata è la stessa, ignora.
Hi,I'm Gianluca from Roma.I play&work with electronics since I was16(1984).
After 25yrs of maintenance on cameras&video mixers,since 2013myJob is HDTVstudios design.
Since Jan2015 IPlayWith Arduino:bit.ly/2F3LPWP
Thanks 4 a Karma if U like my answer

Claudio_FF

#38
Jul 04, 2020, 12:00 pm Last Edit: Jul 04, 2020, 12:00 pm by Claudio_FF
Io pensavo ad una ISR che "per questa volta" esegua qualche operazione in più, cioè che si incarichi non solo di misurare il singolo periodo, ma anche di riconoscere un treno di misure uguali (±tolleranza), e segnali con questo la ricezione di un tono, e lasciare al loop principale con tutta calma il compito di decidere se è un tono valido e se si stanno rispettando i tempi. In questo modo altri segnali audio non dovrebbero poter essere scambiati per toni validi.
* * * * Una domanda ben posta è già mezza risposta * * * *

Datman

Infatti stavo per correggermi: bisogna verificare che la durata resti costante (con un po' di tolleranza) per almeno 100 cicli, altrimenti rileverà anche frequenze nel parlato.

L'interrupt non lo userei, perché non deve interrompere inutilmente altre operazioni. Una volta rilevato con certezza il tono, deve scriverlo in una matrice contenente la sequenza di toni ignorando l'ingresso; fatto ciò, torna a controllare l'ingresso.
Hi,I'm Gianluca from Roma.I play&work with electronics since I was16(1984).
After 25yrs of maintenance on cameras&video mixers,since 2013myJob is HDTVstudios design.
Since Jan2015 IPlayWith Arduino:bit.ly/2F3LPWP
Thanks 4 a Karma if U like my answer

Claudio_FF

#40
Jul 04, 2020, 12:23 pm Last Edit: Jul 04, 2020, 12:27 pm by Claudio_FF
Ennò.... ci sarebbero da controllare anche i tempi, circa 85ms tra l'inizio di un tono e quello successivo... e 140ms di pausa per convalidare il pacchetto toni. Il singolo tono probabilmente non sarebbe da testare per 100 volte fisse, ma per 50ms totali.
* * * * Una domanda ben posta è già mezza risposta * * * *

Datman

Più o meno...

Per iniziare, trascurerei il controllo delle pause. Prima lo farei funzionare! Potrebbe anche non essere proprio indispensabile o venire quasi da solo, prolungando i tempi di elaborazione.
Hi,I'm Gianluca from Roma.I play&work with electronics since I was16(1984).
After 25yrs of maintenance on cameras&video mixers,since 2013myJob is HDTVstudios design.
Since Jan2015 IPlayWith Arduino:bit.ly/2F3LPWP
Thanks 4 a Karma if U like my answer

Go Up