Show Posts
Pages: [1] 2 3 ... 51
1  International / Generale / Re: Auguri di buone feste on: December 24, 2013, 09:47:53 am
Un grandissimo augurio di cuore a tutti anche da parte mia e che il 2014 porti a tutti un sacco di cose buone  smiley
Ciao tony
2  International / Generale / Re: [OT] Consiglio macchina CNC per CS on: December 12, 2013, 03:06:05 pm
Domani ti posto una foto ma non ti aspettare un lavoro mega galattico,è un piano in legno aggiuntivo molto duro con dei fori e poi ci ho fatto una bella passata (4/5)con la fresa da sgrosso per fare in modo che vengano annullati i non precisissimi parallelismi dei movimenti y e z .
Dai un occhiata a mj cnc in rete,è della mia zona e ci sono andato diverse volte a prendere delle cosette.
Puoi usare bulini o utensili per scoring(passami il termine perchè non so come si scrive).
Per il resto dovrei mettere in stampa un PCB e fare una media ,in questi giorni sono un po preso ma appena riesco posso fare una prova.
Tieni presente che comunque dopo aver fatto molte prove e molte stampe definitive ad oggi non uso la cnc per fare pcb vuoi perchè per fare dei pcb un po complessi ci impiega il suo bel tempo ,vuoi che mentre lavora il rumore mi deconcentra e non riesco a fare altro..
Se ti serve sapere altro fammi sapere,ciao.
3  International / Generale / Re: [OT] Consiglio macchina CNC per CS on: December 12, 2013, 01:06:54 pm
Sinceramente non so ,l'avevo presa un annetto e mezzo fa,non so se hanno dei modelli diversi ora...
Per fissare il pcb al piano uso solo il biadesivo(ero dubbioso all'inizio ma devo dire che mi sono ricreduto) se devo fare un solo layer,altrimenti ,se devo fare due layer,ho predisposto il piano di lavoro di una serie di fori filettati fatti a modi griglia ad una distanza di 20mm l'uno dall'altro che uso per il ribaltamento,ovviamente in funzione delle dimensioni del pcb che devo fare devo inserire i fori che devo utilizzare nel disegno...non so se mi sono spiegato.
Ho avuto degli ottimi risultati con piste da 0,2mm,con chip smd ma non ho fatto prove con chip ad alta densità di pin tipo TQFP .
Ho preso a suo tempo dei bulini con passo da 0,1 e 0 mm a 10° ,delicatissimi ovviamente, e non ho ancora avuto tempo di provarli...
A giorni dovrei,tempo permettendo,finire una scheda con un TQFP 100 e sarebbe interessante provare a vedere cosa ne viene fuori,quel che son sicuro che ci vuole un bel po di tempo per lavorare intorno ai pin !!
4  International / Generale / Re: [OT] Consiglio macchina CNC per CS on: December 12, 2013, 12:21:54 pm
Avevo preso la meccanica da futura e funziona bene.  Uso mach 3 con porta parallela e come motore uso un Kress
5  International / Generale / Re: [OT] Consiglio macchina CNC per CS on: December 12, 2013, 11:44:12 am
Io ho una cnc ed all'inizio pensavo di poterla usare per fare i PCB,anche io pernsavo " schiaccio un bottone e quando ha finito ...."
ma non è assolutamente così ti porta via un sacco di tempo,molto di più rispetto alla fotoincisione ed acido(ad esempio),se poi hai necessità di fare due layer devi prevederti anche il ribaltamento e insomma per me è una bella rottura di balle.
Faccio molto prima a fare master fotoincisione etc...
Ad oggi la uso (per il discorso PCB)per ritagliare le schede sagomate in un modo che per farle a mano risulta difficile ,dove ho bisogno di precisione ed eventualmente per forare.

Ciao
6  International / Hardware / Re: interfacciare arduino duemilanove e TDA1524A stereo tone/volume control on: November 30, 2013, 01:50:21 pm
Secondo me la maniera più semplice e precisa è quella dei potenziometri digitali.

Ciao
7  International / Generale / Re: MEGA 2560: affrontiamo l'errore "first mismatch at byte 0x1e000 0xff != 0x0d" on: November 29, 2013, 06:08:34 am
Quote
ok, allora provo il full swing, intanto riusciresti a recuperarmi i valori del filtro e come va montato? (cioè il C va lato micro o lato convertitore? Ora sono messo molto meglio con l'hw, visto che prima era tutto volante.
Se non ricordo male era in passa basso quindi R tra micro e convertitore e condensatore lato micro....non ricordo i valori che usava,mi pare 10K e 100nF
Ciao

edit .....anticipato
8  International / Generale / Re: Upload Lilypad on: November 23, 2013, 03:07:18 pm
Stavo guardando il link della lilypad.......c'è un sommario e li parla di clock 8Mhz,tu che quarzo hai?
Non è che hai un quarzo da 8MHz e se usi una board da 16 ti dà errore?? io non ho mai provato e non saprei dirti..
9  International / Software / Re: MP3 Player shield on: November 20, 2013, 04:51:18 pm
Ciao a tutti,ho fatto un po di aggiornamenti al codice........
Ora ho 2 pulsanti per il volume(+,-),1 x play,1 x stop,2 x traccia avanti,traccia indietro ed un pulsante per la riproduzione automatica,dovrò fare ancora delle sistemazioni e dovrò aggiungere il controllo dei toni (bassi,alti) più un ultimo pulsante ON/OFF,dovrò usare un pin per l'accensione dell'amplificatore esterno(remote) ed altre cosucce tra cui un display 40x4.....
Sicuramente userò un ATMega2560 sulla scheda definitiva perchè con un 328 c'è poca memoria e non si riesce a fare tutto questo.
Il passo successivo sarà quello di fare una app su android per fare un telecomando sfruttando il bluetooth..
Code:
#include <MemoryFree.h>
#include <SPI.h>
#include <SdFat.h>
#include <SdFatUtil.h>
#include <SFEMP3Shield.h>
SdFat sd;
SdFile file;
SFEMP3Shield MP3player;
char filename[13];         // char in cui metto il nome del file
byte conta =0;             //variabile che uso per memorizzare il numero di file che ho riprodotto
byte traccia=0;            //variabile che uso per raggiungere il numero di traccia da riprodurre
byte n_brani=0;            //variabile che uso per memorizzare quanti brani ci sono in tutto nella SD
char title[20];            // buffer che contiene il titolo del file
char artist[20];           // buffer che contiene l'artista del file
char album[20];            // buffer che contiene l'album del file
boolean state_r_auto=false;


/////////////////////////////////////////////////////////////////////////////////////////////////////////////////


int analogico=0;
#define play 0
#define alt 1
#define traccia_in 2
#define traccia_av 3
#define r_auto 4
#define alza 5
#define abbassa 6
#define toni 7
#define ON 8
#define no_pulsante 9
#define DEBOUNCE_TIME  200
int pulsante=0;
boolean debounce;
unsigned long previous_time;



//////////////////////////////////////////////////////////////////////////////////////////////////////////////



void setup() {
 
  Serial.begin(9600);                          //inizializzo la seriale
  debounce=false;
  sd.begin(SD_SEL, SPI_HALF_SPEED);            //inposto la velocità SPI
  MP3player.begin();                           //inizializzo l'MP3
  sd.chdir("/",true);
  while(file.openNext(sd.vwd(),O_READ)){        //entro nella sd card e conto quanti file ci sono(uscirà dal while quando sono finiti)
     n_brani++;                                 //memorizzo il numero totale
     file.close();                              //chiudo
    }
  Serial.print("brani trovati in SD card  :");  //stampo a monitor
  Serial.println(n_brani);                      //quanti brani ci sono
 
}

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

union twobyte mp3_vol; // create key_command existing variable that can be both word and double byte of left and right.

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

void loop(){
 if(debounce) {
    pulsante = no_pulsante;
    if(millis() > previous_time + DEBOUNCE_TIME) debounce = false;
  } else  pulsante= read_buttons();
 
  // if a button is pressed, start debounce time
  if(pulsante != no_pulsante) {
   
    previous_time = millis();
    debounce = true; 
  }
 switch(pulsante){
 case ON:
// Serial.println ("ON/Off");
 break;
 case alza:
 mp3_vol.word = MP3player.getVolume(); // returns a double uint8_t of Left and Right packed into int16_t
 if(mp3_vol.byte[1] <= 2) { // range check
        mp3_vol.byte[1] = 2;
      } else {
        mp3_vol.byte[1] -= 2;
      }   
 MP3player.setVolume(mp3_vol.byte[1], mp3_vol.byte[1]);
 break;
 case abbassa:
 mp3_vol.word = MP3player.getVolume();
 if(mp3_vol.byte[1] >= 254) { // range check
        mp3_vol.byte[1] = 254;
      } else {
        mp3_vol.byte[1] += 2; // keep it simpler with whole dB's
      }
 MP3player.setVolume(mp3_vol.byte[1], mp3_vol.byte[1]);
 break;
 case toni:
 Serial.println ("toni");
 break;
 case r_auto:
 if(state_r_auto==false){state_r_auto=true;}
 else {state_r_auto=false;}
 break;
 case traccia_av:
 MP3player.stopTrack();
 if(state_r_auto==false){conta++;traccia_av_in();}
 else{rip_auto();}
 break;
 case traccia_in:
 conta--;
 MP3player.stopTrack();
 if(state_r_auto==false){traccia_av_in();}
 else{conta--;rip_auto();}
 break;
 case alt:
 MP3player.stopTrack();
 state_r_auto=false;
 conta=0;
 break;
 case play:
 rip_auto();
 break;
 }
 if(state_r_auto)rip_auto();
 Serial.println(state_r_auto);
}


////////////////////////////////////////////////////////////////////////////////////////////////////////////


void rip_auto(){
 
  if(!MP3player.isPlaying()) {                 //controllo se è in riproduzione
    sd.chdir("/",true);
   while(file.openNext(sd.vwd(),O_READ)){      //entro nella sd ed apro il primo file
     file.getFilename(filename);               //memorizzo il nome del file
     traccia++;                                //do un numero di traccia
     file.close();                             //chiudo il file
     if(traccia>conta){                        //se non è già stato riprodotto
     MP3player.playMP3(filename);              //riproduco ed esco dal ciclo bloccante while
     break;
     }
  }
  conta++;                                     //aumento il numero di brano riprodotto
  //Serial.print("traccia in esecuzione :  ");   //stampo a monitor questultimo
  //Serial.println(conta);
//  MP3player.trackTitle((char*)&title);         //richiedo i dati scritti nei tag del file e li stampo a monitor
//  MP3player.trackArtist((char*)&artist);
//  MP3player.trackAlbum((char*)&album);
//  Serial.write((byte*)&title, 20);
//  Serial.println();
//  Serial.print(F("by:  "));
//  Serial.write((byte*)&artist, 20);
//  Serial.println();
//  Serial.print(F("Album:  "));
//  Serial.write((byte*)&album, 20);
//  Serial.println();
  traccia=0;                                  //azzero il contatore della traccia aperta per poter arrivare a quella successiva a quella appena riprodotta
  }
  if(conta==n_brani){                         //se i brani riprodotti hanno lo stesso numero di quelli presenti in SD
    conta=0;                                  //azzero conta per poter ricominciare da capo 
  }
}


//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

void traccia_av_in(){
 
  if(!MP3player.isPlaying()) {                 //controllo se è in riproduzione
    sd.chdir("/",true);
   while(file.openNext(sd.vwd(),O_READ)){      //entro nella sd ed apro il primo file
     file.getFilename(filename);               //memorizzo il nome del file
     traccia++;                                //do un numero di traccia
     file.close();                             //chiudo il file
     if(traccia>conta){                        //se non è già stato riprodotto
     MP3player.playMP3(filename);              //riproduco ed esco dal ciclo bloccante while
     break;
     }
  }
  traccia=0;                                  //azzero il contatore della traccia aperta per poter arrivare a quella successiva a quella appena riprodotta
  }
  if(conta==n_brani){                         //se i brani riprodotti hanno lo stesso numero di quelli presenti in SD
    conta=0;                                  //azzero conta per poter ricominciare da capo 
  }
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

int read_buttons(){
 
  analogico=analogRead(0);
  if(analogico<50)   {return ON;}
  if(analogico<150)  {return alza;}
  if(analogico<300)  {return abbassa;}
  if(analogico<400)  {return toni;}
  if(analogico<500)  {return r_auto;}
  if(analogico<600)  {return traccia_av;}
  if(analogico<700)  {return traccia_in;}
  if(analogico<800)  {return alt;}
  if(analogico<900)  {return play;}
  if(analogico>1000) return no_pulsante;
}

 

Per il momento è tutto,ciao.
Tony
10  International / Hardware / Re: Lcd hd44780 on: November 20, 2013, 10:21:57 am
Ed il piedino del display W/R lo hai collegato a massa? Dovrebbe essere il pin 5...
11  International / Generale / Re: Selettore audio per scrivania on: November 18, 2013, 07:41:23 am
Anche secondo me è meglio trattare il tutto in analogico ed usando magari degli operazionali otterresti anche un ottimo risultato se tutto ovviamente è ben progettato.
Potresti usare un arduino 1 per controllare dei pulsanti da usare per scambiare dei contatti di micro relè(come ti diceva astro)per scegliere
l'ingresso desiderato e magari dei potenziometri digitali per variare volume e toni(bassi,medi,alti),potresti usare un display per visualizzare volume, attenuazioni o esaltazione dei relativi toni e dell'ingresso scelto......
Però è un progettino, sicuramente fattibile,che richiede una certa conoscenza e se tu sei un po a digiuno è abbastanza impegnativo.
Puoi fare un po di ricerche in rete e vedere se trovi dei semplici schemi tipo un regolatore di toni,capire come usare un pot digitale ecc..
 

12  International / Software / Re: MP3 Player shield on: November 17, 2013, 02:33:51 pm
Rieccomi,dopo un po di studio ulteriore,sono riuscito a fare qualcosina
Code:
#include <SPI.h>
#include <SdFat.h>
#include <SdFatUtil.h>
#include <SFEMP3Shield.h>
SdFat sd;
SdFile file;
SFEMP3Shield MP3player;
char filename[13];         // char in cui metto il nome del file
byte conta =0;             //variabile che uso per memorizzare il numero di file che ho riprodotto
byte traccia=0;            //variabile che uso per raggiungere il numero di traccia da riprodurre
byte n_brani=0;            //variabile che uso per memorizzare quanti brani ci sono in tutto nella SD
char title[20];            // buffer che contiene il titolo del file
char artist[20];           // buffer che contiene l'artista del file
char album[20];            // buffer che contiene l'album del file
 

void setup() {
  Serial.begin(9600);                          //inizializzo la seriale
  sd.begin(SD_SEL, SPI_HALF_SPEED);            //inposto la velocità SPI
  MP3player.begin();                           //inizializzo l'MP3
  sd.chdir("/",true);
  while(file.openNext(sd.vwd(),O_READ)){        //entro nella sd card e conto quanti file ci sono(uscirà dal while quando sono finiti)
     n_brani++;                                 //memorizzo il numero totale
     file.close();                              //chiudo
    }
  Serial.print("brani trovati in SD card  :");  //stampo a monitor
  Serial.println(n_brani);                      //quanti brani ci sono
}

/////Nel loop si crea una riproduzione automatica a partire dalla prima traccia fino all'ultima e si richiedono i dati dai tag_MP3 dopo la
/////riproduzione visualizzandoli in serial monitor.........


void loop(){
  if(!MP3player.isPlaying()) {                 //controllo se è in riproduzione
    sd.chdir("/",true);
   while(file.openNext(sd.vwd(),O_READ)){      //entro nella sd ed apro il primo file
     file.getFilename(filename);               //memorizzo il nome del file
     traccia++;                                //do un numero di traccia
     file.close();                             //chiudo il file
     if(traccia>conta){                        //se non è già stato riprodotto
     MP3player.playMP3(filename);              //riproduco ed esco dal ciclo bloccante while
     break;
     }
  }
  conta++;                                     //aumento il numero di brano riprodotto
  Serial.print("traccia in esecuzione :  ");   //stampo a monitor questultimo
  Serial.println(conta);
  MP3player.trackTitle((char*)&title);         //richiedo i dati scritti nei tag del file e li stampo a monitor
  MP3player.trackArtist((char*)&artist);
  MP3player.trackAlbum((char*)&album);
  Serial.write((byte*)&title, 20);
  Serial.println();
  Serial.print(F("by:  "));
  Serial.write((byte*)&artist, 20);
  Serial.println();
  Serial.print(F("Album:  "));
  Serial.write((byte*)&album, 20);
  Serial.println();
  traccia=0;                                  //azzero il contatore della traccia aperta per poter arrivare a quella successiva a quella appena riprodotta
  }
  if(conta==n_brani){                         //se i brani riprodotti hanno lo stesso numero di quelli presenti in SD
    conta=0;                                  //azzero conta per poter ricominciare da capo 
  }
}
 
Con questo codice faccio una riproduzione in sequenza dal primo brano fino all'ultimo presente nella SD card....
Il problema che avevo era quello di non riuscire a capire come aprire un file senza conoscere il nome della traccia ed anche se conoscevo il nome traccia mi preoccupava la limitazione della lunghezza del nome di 8 caratteri più 3 per l'estensione.
Di fatto invece il problema non c'è nel senso che se il nome traccia è più lungo dello standard(8.3) il nome viene accorciato in lettura in questo modo :  file originale = MARIOROSSI.MP3 diventa  MARIOR->1.MP3.......a questo punto se viene memorizzato come tale in un Char,quando decido di riprodurre la traccia con il nome file,usando sempre lo stesso concetto di riduzione del nome ,effettivamente trova la traccia .........Quindi per il momento il problema è risolto ma non ritengo chiuso il topic perchè ,a lavoro ultimato, condividerò il lavoro fatto.
Ciao,Tony smiley-wink
13  International / Software / Re: MP3 Player shield on: November 13, 2013, 01:22:06 pm
Quote
potresti fare una funzione nella quale, a ogni cambiamento/modifica/inserimento di SD,  rinomini i file in 8.3 mettendo però i nomi dei files in un tag sconosciuto dei files MP3(creatore mi pare che non lo legga nessuno). Però non so se si possa fare con quella libreria, non so se mi sono fatto capire
Si ho capito cosa vuoi dire ma penso di aver capito come risolvere il problema.

Guardando bene dall'esempio allegato alla libreria dello shield mi sono soffermato in questo passaggio......

Code:
else if(key_command == 'l') {
    if(!MP3player.isPlaying()) {
      Serial.println(F("Music Files found :"));
      SdFile file;
      char filename[13];
      sd.chdir("/",true);
      uint16_t count = 1;
      while (file.openNext(sd.vwd(),O_READ))
      {
        file.getFilename(filename);
        if ( isFnMusic(filename) ) {
          SerialPrintPaddedNumber(count, 5 );
          Serial.print(F(": "));
          Serial.println(filename);
          count++;
        }
        file.close();
      }
      Serial.println(F("Enter Index of File to play"));

    } else {
      Serial.println(F("Busy Playing Files, try again later."));
    }
...ed ho capito che ogni volta che si alimenta il circuito fa una lettura di tutti i file nella SD e li numera partendo dal numero 00001
a partire dal primo fino all'ultimo.
Ora eliminando ciò che riguarda la stampa in serial monitor non riesco ad interpretare ciò che è scritto e cioè quale variabile assegna il numero in sequenza alle tracce smiley-roll-blue
Riuscite per favore a spiegarmi queste righe di codice??
 
EDIT

quì c'è la void SerialPrintPaddedNumber
Code:
void SerialPrintPaddedNumber(int16_t value, int8_t digits ) {
  int currentMax = 10;
  for (byte i=1; i<digits; i++){
    if (value < currentMax) {
      Serial.print("0");
    }
    currentMax *= 10;
  }
  Serial.print(value);
}
14  International / Software / Re: MP3 Player shield on: November 13, 2013, 05:53:32 am
[
Quote
Non mi è chiarissima l'ultima tua frase.
Metti i file su SD chiamandoli 1.mp3, 2.mp3,etc. con i dati nei tag?
Effettivamente rileggendo ho detto una fesseria ,se la lib legge nomi in 8.3 non posso fargli fare diversamente  smiley-evil
E' che vorrei fare in modo di non doversi preoccupare di modificare il nome del file (in formato 8.3) una volta messo sulla SD

In pratica il problema è:
-metto un brano in SD il cui nome è Daniele Antonio.MP3 (quindi lungo più di smiley-cool
-se lo apro con la lib usando open next file il nome del file viene stampato in maniera differente,qualcosa tipo Daniele ->.MP3
-se ora mando in riproduzione Daniele ->.MP3 non son sicuro che parta......
15  International / Software / Re: MP3 Player shield on: November 13, 2013, 05:27:20 am
Ciao e grazie della risposta smiley
Quote
La libreria NON legge nomi di file lunghi.
Infatti ho visto che non li legge ed ho fatto una prova a leggere un file con nome Michele Zarr.... e lo leggo a display come michel->1.MP3
Per leggere all'interno del file il titolo,artista ed altre cosucce(a patto che vi siano scritte) è stata implementata la funzione quindi è possibile farlo sfruttando dei char....Un esempio
Code:
char title[30]; // buffer to contain the extract the Title from the current filehandles
    char artist[30]; // buffer to contain the extract the artist name from the current filehandles
    char album[30]; // buffer to contain the extract the album name from the current filehandles
    uint32_t offset = 0;
    char trackName[] = "2.mp3";
    //start playing track 1
    MP3player.playMP3(trackName,offset);
    MP3player.trackTitle((char*)&title);
    MP3player.trackArtist((char*)&artist);
    MP3player.trackAlbum((char*)&album);
Il problema rimane il fatto che vorrei fosse possibile visualizzare nomi estesi .......
Ma se ,secondo te, volessi invece creare un file con nome più lungo di 8.3 riuscirei con la libreria oppure anche in scrittura ho delle limitazioni??
Perchè pensavo,in maniera contorta,di memorizzare il nome intero,rinominarlo come "1",mandarlo in riproduzione,leggere i tag all'interno visualizzandoli a display ed alla fine ripristinare il suo nome originale..... smiley-roll
Pages: [1] 2 3 ... 51