@botti1988: allora, c''è da dire che ovviamente il chip è lo stesso, dunque le "potenzialità" sono le stesse. Se fosse una vita che programmi Atmel, allora probabilmente non saresti interessato ad Arduino. Per fartela davvero davvero breve (per maggiori info vai su
www.arduino.cc) Arduino è una board pe lo sviluppo con tre vantaggi:
- Si programma tramite USB: questo è possibile grazie ad un piccolo bootloader preinstallato nel uC (il cuore di Arduino) che permette di scrivere i programmi passati dal cavo USB
- Dispone di librerie di base avanzate: non ci saranno mai istruzion a bassissimo livello incomprensibile, ti sembrerà sempre di programmare su un PC piuttosto che su un uC, le funzionalità offerte sono tantissime tutte pronte e documentate alla perfezione
- C'è una grande comunità: moltissime persone utilizzano Arduino, e grazie a loro oggi ci sono librerie oramai stabili per controllare qualsiasi cosa si possa attaccare all'Arduino (per farti capire.. sai come scrivi ciao 'mondo' su un LCD? lcd.print("Ciao Mondo!"))
La cosa ovviamente migliore è che è tutto in PIU', cioè anche se compri Arduino nessuno ti vieta di programmare direttamente in assembler, c o c++ (io ad esempio il programma per il MIDI switcher l'ho sviluppato in c++ con le librerie di base di Arduino!) di eliminare o ripristinare il bootloader.
Ma controlla il sito per informazioni più dettagliate!
@Luix: eccome! potenze,esponenziali, logaritmi.. giusto il caffé ancora non lo sà fare!

cmq, ho dato un'occhiata al codice, cerco di spiegare a grandi linee l'intento del codice (nei particolari non scendo), forse sono cose che avrai già notato.. cmq:
Prima cosa, c'è un timer interno che ogni volta che scade aumenta di 1 il contatore "count_hi" a cosa serve? da quanto si evince dal codice se il timer scatta per 80 volte vuol dire che non c'è stato input per 80 cicli = si considera che non c'è segnale in ingresso (così spegne i led quando non si suona una nota). La prima for accumula (nel caso non scada il timer come detto) 32 campioni dell'input nella variabile count.
Nel caso di una serie valida questo valore viene diviso per 32 mediante lo shift di 5 (praticamente se ne fa la media) e poi si comincia a a fare dei controlli per verificare in che fascia si ricade (Transition_Count) così si identifica dove è la nota suonata (fra E e B? fra B e G? e così via...).
In ultimo si verifica se fosse mai la nota è intonata, e quindi se coincide più o meno con un valore "centered" (dico più o meno perchè si prende un piccolo margine per evitare che l'accordatore sia troppo sensibile e non ti dia mai la nota intonata, si crea difatti un comparatore ad isteresi proprio come è documentato sul codice)
.... praticamente fine dei giochi!

ora.. in effetti è un pò cervellotico, ma sopratutto perchè probabilmente con quel PIC non si possono definire interrupt esterni (per l'onda quadra, infatti se la legge con una sequenza di polling.. questo incasina parecchio l'idea). Credo che un'implementazione migliore, sfruttando a meglio le Potenzialità dell'Arduino vorrebbe almeno due oggetti software, uno che AUTONOMAMENTE (grazie ad interrupt trasparenti al ciclo di main) calcolasse CONTINUAMENTE la nota suonata (eventualmente con un valore speciale tipo "NO_NOTE" per dire che non c'è segnale in ingresso) e che un altro oggetto, diciamo il ciclo main ogni tot gli chiedesse "che nota suona?" con un metodo dedicato.. molto più pulito e ordinato e sopratutto.. comprensibile!
Edit: scusa mi ero dimenticato dell'LCD, io direi un parallelo.. costa meno!

considera che è vero che ti prende 6 PIN, ma quello seriale poi ti impedisce di usare la trasmissione seriale perchè ci devi attaccare l'LCD e non ci puoi mettere altro!
La teoria è quando si sa tutto ma non funziona niente. La pratica è quando funziona tutto ma non si sa il perché. In ogni caso si finisce sempre con il coniugare la teoria con la pratica: non funziona niente e non si sa il perché.
(Albert Einstein)