Go Down

Topic: Audio e invio (Read 232 times) previous topic - next topic

alessandro87gatto

Ciao a tutti,
avrei la necessità di leggere l'audio dal pin analogico e mandarlo.
Acquisisco l'audio collegando un microfono analogico al pin analogico, vorrei avviare lo stream per 10 secondi. In questi 10 secondi dovrò popolare due vettori, "vettoreA" che contiene le info dal secondo 0 al secondo 7, "vettoreB" che contiene le info dal secondo 4 al secondo 10. Essendo che lo stream è uno avrò che le info dei due vettori, nelle celle da 4 a 7 saranno uguali in quanto si accavallano i due vettori, ma grazie a questo accavallarsi, non avrò perdita di info.
Come posso annidare i cicli?

ORSO2001

supponendo che il segnale al pin analogico va da 0 a 5 volt potresti fare (pseudo codice):
Code: [Select]
int vettoreA[8];
int vettoreB[7];
byte count = 0;

se (millis - oldMillis >= 1000) {
  se (count <= 7) {
    vettoreA[count] = lettura;
    se (count >= 4) {
      vettoreB[count - 4] = vettoreA[count];
    }
  }
  se (count > 7) {
    vettoreB[count - 4] = lettura;
  }
  count++;
  se (count >= 10) {
    count = 0;
  }
  oldMillis = millis;
}

Standardoil

#2
Mar 19, 2019, 09:47 pm Last Edit: Mar 19, 2019, 09:48 pm by Standardoil
vedo anche altra alternativa:
usare un solo vettore da 11 elementi e scrivere una volta sola
ma passare alle funzioni che utilizzeranno i due vettori prima una cosa del genere:
Code: [Select]

foo(vettore,7);

e poi
Code: [Select]

foo(&vettore[4],6)

notare la finezza del passare come indirizzo del vettore l'indirizzo del suo quinto elemento (ollapeppa, sempre quel film torna....
PS, per non innescare polemiche, la ho COPIATA da Dennis e Brian, lo ammetto subito
Prima legge di Nelson (che sono io): Se vuoi il mio aiuto dimostrami almeno che hai letto il nostro "aiutateCi ad aiutarVi"

Non bado a studenti, che copino altrove

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

alessandro87gatto

Grazie per le vostre risposte. Nel commento di
Quote
Standardoil
non capisco cosa fai

Standardoil

Niente di particolare
Si tratta di un trucco, quando hai due array che si sovrappongono, come nel tuo caso, per risparmiare memoria usando un array che li "copre" tutti e due, e poi taroccare gli indici per farlo sembrare come due separati
Prima legge di Nelson (che sono io): Se vuoi il mio aiuto dimostrami almeno che hai letto il nostro "aiutateCi ad aiutarVi"

Non bado a studenti, che copino altrove

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

docdoc

Acquisisco l'audio collegando un microfono analogico al pin analogico
A parte i validi consigli che ti hanno già dato per il programma (ma sarebbe utile se iniziassi tu a scrivere due righe e mostrarcele), volevo solo sottolineare che un microfono (che tipo e quale impedenza?) se collegato direttamente ad Arduino non ti dà una tensione sufficiente per poterla leggere (è dell'ordine di pochi mV) quindi ti serve quantomeno un preamplificatore.

Do' per scontato quindi che sia preamplificato (è così?) e che i livelli in uscita siano di qualche Volt (maggiore il livello migliore sarà l'acquisizione), Arduino ha poi input "sbilanciati" verso il positivo, ossia da 0 a 5V max, mentre un segnale audio normalmente ha anche una parte negativa (es. +/- 1V pp) quindi serve una traslazione.

Per farla breve, quindi, spiegaci intanto tu cosa hai o pensavi di usare, poi guarda cose come QUESTA ad esempio, oppure piccole board apposite come QUESTA che includono un preamplificatorino MAX4466 e QUI un esempio.

Alex "docdoc" - ** se ti sono stato d'aiuto, un punto karma sarà gradito, clicca su "add" qui a sinistra, vicino al mio nome ;) **

Go Up