; ******************************* ; ***** Sample Header File ***** ; ******************************* ; Filename: KEYBOARD.BAS ; Date: 05/06/2009 ; File Version: TEST ; Written by: BIOLOGICAL HAZARD WASTE ; Function: Ring Tone Transfer Language KEYBOARD ; Last Revision: 30/06/2009 ; Target PICAXE: 18X ; ******************************* #picaxe 18x #gosubs 255 #simspeed 200 #terminal 4800 #rem INFORMAZIONI MEMORIA Device 24LC256 Type EE 64kb Slave %1010dddx Speed i2cfast Mode i2cword INFORMAZIONI TRASFERIMENTO SERIALE INFORMAZIONI COMPILATORE PICAXE Programming Editor Version 5.2.5 (Sintax DLL 262144) PICAXE Programming Editor Version 5.2.6 (Sintax DLL 262144) CARATTERISTICHE PERIFERICA PERIFERICHE CONSIGLIATE http://www.skullcandy.com/ PROTOCOLLO TEST AUTENTICAZIONE PICAXE 0 RIPRODUZIONE NOTA MUSICALE 1 SALVA BRANO 2 ESEGUI BRANO IMPLEMENTARE ALTRI CONTROLLI ED ALCUNI EFFETTI #endrem ' VARIABILI Symbol Trasmettitore_Display Is 0 ' PIN UTILIZZATO PER POTERE TRASMETTERE AL DISPLAY LE STRINGHE DA VISUALIZZARE Symbol Trasmettitore_Player Is 2 ' PIN UTILIZZATO PER POTERE TRASMETTERE I DATI AL PICAXE CHE DEVE RIPRODURRE LE NOTE Symbol Prima_Locazione Is $0000 ' NUMERO DELLA LOCAZIONE INIZIALE DELLA MEMORIA ATTUALMENTE UTILIZZATA Symbol Ultima_Locazione Is $7FF8 ' NUMERO DELLA LOCAZIONE FINALE DELLA MEMORIA ATTUALMENTE UTILIZZATA Symbol Totale Is Ultima_Locazione ' NUMERO TOTALE DELLE LOCAZIONI PRESENTI NELLA MEMORIA UTILIZZATA ' PROTOCOLLO Symbol Comando_Riproduzione_Nota Is 0 Symbol Comando_Salvataggio_Brano Is 1 Symbol Comando_Riproduzione_Brano Is 2 ' Duration Symbol Crotchet Is 0 ' Crotchet 1/4 Symbol Quaver Is 64 ' Quaver 1/8 Symbol Semibreve Is 128 ' Semibreve 1/1 Symbol Minim Is 192 ' Minim 1/2 ' Note Symbol Note_C Is 0 ' C Symbol Note_C_Diesis Is 1 ' C# Symbol Note_D Is 2 ' D Symbol Note_D_Diesis Is 3 ' D# Symbol Note_E Is 4 ' E Symbol Note_F Is 5 ' F Symbol Note_F_Diesis Is 6 ' F# Symbol Note_G Is 7 ' G Symbol Note_G_Diesis Is 8 ' G# Symbol Note_A Is 9 ' A Symbol Note_A_Diesis Is 10 ' A# Symbol Note_B Is 11 ' B Symbol Note_P Is 12 ' P ' Octave Symbol Octave_6 Is 0 ' 6 Symbol Octave_7 Is 16 ' 7 Symbol Octave_5 Is 32 ' 5 ' BYTE DI CONTROLLO Symbol Inizio_Canzone Is $0D Symbol Fine_Canzone Is $0E ' VARIABILI BYTE Symbol Duration Is B0 Symbol Note Is B1 Symbol Octave Is B2 Symbol Tempo Is B3 Symbol Posizione_Cursore Is B6 ' POSIZIONE DEL DISPLAY IN CUI DEVE ESSERE PRESENTE IL CURSORE Symbol Valore Is B7 ' VARIABILE IN CUI VIENE CONSERVATO IL VALORE PRESENTE NELLA LOCAZIONE ANALIZZATA Symbol Tempo_Da_Trasmettere Is B8 Symbol Nota_Da_Trasmettere Is B9 ' VALORE DELLA NOTA CHE DEVE ESSERE TRASMESSA AL PICAXE CHE HA IL COMPITO DI OCCUPARSI DELLA RIPRODUZIONE Symbol Carattere Is B10 ' CARATTERE CHE DEVE ESSERE VISUALIZZATO DURANTE LA SCRITTURA ' VARIABILI WORD Symbol Locazione Is W2 ' LOCAZIONE SUL QUALE IL FIRMWARE STA OPERANDO ' DEFINIZIONI VALORI Let Duration Is Crotchet ' Crotchet 1/4 Let Note Is Note_C ' C Let Octave Is Octave_6 ' 6 Let Tempo Is 8 ' 101 Let Locazione Is Prima_Locazione Let Posizione_Cursore Is 0 ' DEFINIZIONE INPUT ' DEFINIZIONE OUTPUT ' BOOT Pause 1000 ' PAUSA PER EVITARE ERRORI DI TRASMISSIONE I2CSlave %10100110,I2CFast,I2CWord ' VIENE CONFIGURATO IL PICAXE PER FARE IN MODO TALE CHE POSSA RICONOSCERE LA MEMORIA ESTERNA SerOut Trasmettitore_Player,N4800_4,("TEST") ' QUESTO PICAXE SI FA RICONOSCERE DAL PICAXE CHE HA IL COMPITO DI RIPRODURRE LA MUSICA WriteI2C Locazione,(Inizio_Canzone) ' SALVA NELLA PRIMA LOCAZIONE DELLA MEMORIA IL BYTE DI CONTROLLO CHE PERMETTE DI DEFINIRE L ' INIZIO DEL BRANO MUSICALE ' WELCOME CON IL DISPLAY GoSub Clear_Display GoSub Move_To_Line_1_Position_1 Let Posizione_Cursore Is 4 GoSub Move_To_Line_1_Position SerOut Trasmettitore_Display,N2400,("BEEP BOX") Pause 1000 GoSub Move_To_Line_2_Position_1 Let Posizione_Cursore Is 6 GoSub Move_To_Line_2_Position SerOut Trasmettitore_Display,N2400,("TEST") Pause 1000 ' VISUALIZZAZIONE SCRITTA IN GIAPPONESE GoSub Clear_Display GoSub Move_To_Line_1_Position_1 Let Posizione_Cursore Is 3 GoSub Move_To_Line_1_Position SerOut Trasmettitore_Display,N2400,(%11001111) SerOut Trasmettitore_Display,N2400,(%10101100) SerOut Trasmettitore_Display,N2400,(%10111000) SerOut Trasmettitore_Display,N2400,(%11011011) SerOut Trasmettitore_Display,N2400,(%11010000) SerOut Trasmettitore_Display,N2400,(%10101101) SerOut Trasmettitore_Display,N2400,(%10110000) SerOut Trasmettitore_Display,N2400,(%10111100) SerOut Trasmettitore_Display,N2400,(%10101111) SerOut Trasmettitore_Display,N2400,(%10111000) Pause 1000 GoSub Move_To_Line_2_Position_1 Let Posizione_Cursore Is 6 GoSub Move_To_Line_2_Position SerOut Trasmettitore_Display,N2400,("PLAY") ' GESTIONE INPUT Attendi_Pressione_Pulsante: KeyIn ' Note If KeyValue Is $0E Then Let Note Is Note_C EndIf ' C If KeyValue Is $16 Then Let Note Is Note_C_Diesis EndIf ' C# If KeyValue Is $1E Then Let Note Is Note_D EndIf ' D If KeyValue Is $26 Then Let Note Is Note_D_Diesis EndIf ' D# If KeyValue Is $25 Then Let Note Is Note_E EndIf ' E If KeyValue Is $2E Then Let Note Is Note_F EndIf ' F If KeyValue Is $36 Then Let Note Is Note_F_Diesis EndIf ' F# If KeyValue Is $3D Then Let Note Is Note_G EndIf ' G If KeyValue Is $3E Then Let Note Is Note_G_Diesis EndIf ' G# If KeyValue Is $46 Then Let Note Is Note_A EndIf ' A If KeyValue Is $45 Then Let Note Is Note_A_Diesis EndIf ' A# If KeyValue Is $4E Then Let Note Is Note_B EndIf ' B If KeyValue Is $55 Then Let Note Is Note_P EndIf ' P If KeyValue Is $0D Then Let Note Is Note_C EndIf ' C If KeyValue Is $15 Then Let Note Is Note_C_Diesis EndIf ' C# If KeyValue Is $1D Then Let Note Is Note_D EndIf ' D If KeyValue Is $24 Then Let Note Is Note_D_Diesis EndIf ' D# If KeyValue Is $2D Then Let Note Is Note_E EndIf ' E If KeyValue Is $2C Then Let Note Is Note_F EndIf ' F If KeyValue Is $35 Then Let Note Is Note_F_Diesis EndIf ' F# If KeyValue Is $3C Then Let Note Is Note_G EndIf ' G If KeyValue Is $43 Then Let Note Is Note_G_Diesis EndIf ' G# If KeyValue Is $44 Then Let Note Is Note_A EndIf ' A If KeyValue Is $4D Then Let Note Is Note_A_Diesis EndIf ' A# If KeyValue Is $54 Then Let Note Is Note_B EndIf ' B If KeyValue Is $5B Then Let Note Is Note_P EndIf ' P If KeyValue Is $58 Then Let Note Is Note_C EndIf ' C If KeyValue Is $1C Then Let Note Is Note_C_Diesis EndIf ' C# If KeyValue Is $1B Then Let Note Is Note_D EndIf ' D If KeyValue Is $23 Then Let Note Is Note_D_Diesis EndIf ' D# If KeyValue Is $2B Then Let Note Is Note_E EndIf ' E If KeyValue Is $34 Then Let Note Is Note_F EndIf ' F If KeyValue Is $33 Then Let Note Is Note_F_Diesis EndIf ' F# If KeyValue Is $3B Then Let Note Is Note_G EndIf ' G If KeyValue Is $42 Then Let Note Is Note_G_Diesis EndIf ' G# If KeyValue Is $4B Then Let Note Is Note_A EndIf ' A If KeyValue Is $4C Then Let Note Is Note_A_Diesis EndIf ' A# If KeyValue Is $52 Then Let Note Is Note_B EndIf ' B If KeyValue Is $5A Then Let Note Is Note_P EndIf ' P ' Duration If KeyValue Is $03 Then Let Duration Is Quaver EndIf ' Quaver 1/8 If KeyValue Is $0B Then Let Duration Is Crotchet EndIf ' Crotchet 1/4 If KeyValue Is $83 Then Let Duration Is Minim EndIf ' Minim 1/2 If KeyValue Is $0A Then Let Duration Is Semibreve EndIf ' Semibreve 1/1 ' Octave If KeyValue Is $05 Then Let Octave Is Octave_5 EndIf ' 5 If KeyValue Is $06 Then Let Octave Is Octave_6 EndIf ' 6 If KeyValue Is $04 Then Let Octave Is Octave_7 EndIf ' 7 ' Tempo If KeyValue Is $01 Then GoSub Funzione_Non_Implementata ' Funzione_PLAY ANTEPRIMA BRANO If KeyValue Is $09 Then Let Tempo Is Tempo - 1 EndIf ' DECREMENTA LA VELOCITA If KeyValue Is $78 Then Let Tempo Is Tempo + 1 EndIf ' INCREMENTA VELOCITA If KeyValue Is $07 Then GoSub Funzione_Non_Implementata ' Termina_Registrazione TERMINA LA REGISTRAZIONE ' EFFETTI If KeyValue Is $12 Then GoSub Effetto_Up ' UP If KeyValue Is $5D Then GoSub Effetto_Down ' DOWN If KeyValue Is $1A Then GoSub Effetto_Flash ' FLASH If KeyValue Is $22 Then GoSub Effetto_Bitonal ' BITONAL ' CONTROLLO DI ERRORI SULLA SCELTA DEL TEMPO If Tempo Is 16 Then Let Tempo Is 1 EndIf If Tempo Is 0 Then Let Tempo Is 15 EndIf #rem If KeyValue Is $00 Then Let Tempo Is Tempo - 1 EndIf ' DECREMENTAZIONE TEMPO If KeyValue Is $00 Then Let Tempo Is Tempo + 1 EndIf ' INCREMENTAZIONE TEMPO If KeyValue Is $00 Then GoSub Funzione_STOP ' FERMA LA RIPRODUZIONE DEL BRANO If KeyValue Is $00 Then GoSub Esportazione_Brano ' PERMETTE DI SALVARE IL BRANO If KeyValue Is $00 Then GoSub BACKUP_Memoria ' PERMETTE DI SALVARE TUTTO IL CONTENUTO DELLA MEMORIA SU UN COMPUTER If KeyValue Is $00 Then Formattazione_Memoria ' FORMATTA LA MEMORIA #endrem ' FILTRO PER SCEGLIERE SE AVERE UN OUTPUT AUDIO E VISIVO O SOLO VISIVO Select KeyValue Case $0E,$16,$1E,$26,$25,$2E,$36,$3D,$3E,$46,$45,$4E,$55 Let Octave Is Octave_5 GoTo Trasmissione_Nota_Musicale Case $0D,$15,$1D,$24,$2D,$2C,$35,$3C,$43,$44,$4D,$54,$5B Let Octave Is Octave_6 GoTo Trasmissione_Nota_Musicale Case $58,$1C,$1B,$23,$2B,$34,$33,$3B,$42,$4B,$4C,$52,$5A Let Octave Is Octave_7 GoTo Trasmissione_Nota_Musicale Case $03,$0B,$83,$0A,$05,$06,$04,$09,$78 GoSub Visualizza_Informazioni GoTo Attendi_Pressione_Pulsante Else GoSub Tasto_Non_Interpretato EndSelect #rem FUNZIONI Trasmissione_Nota_Musicale PERMETTE DI ESEGUIRE LA NOTA MUSICALE Funzione_PLAY PERMETTE DI ASCOLTARE UN ' ANTEPRIMA DI QUANTO E ' STATO SUONATO Funzione_STOP PERMETTE DI FERMARE LA RIPRODUZIONE DELLA ANTEPRIMA AUDIO BACKUP_Memoria PERMETTE DI ESEGUIRE IL BACKUP DELLA MEMORIA Formattazione_Memoria PERMETTE DI FORMATTARE LA MEMORIA E QUINDI CANCELLARE OGNI BRANO Clear_Display Hide_Display Restore_Display Turn_On_Cursor Move_Cursor_Left Move_Cursor_Right Move_To_Line_1_Position_1 Move_To_Line_1_Position Move_To_Line_2_Position_1 Move_To_Line_2_Position ERROR PERMETTE DI ESEGUIRE I COMANDI CHE DOVRANNO ESSERE ESEGUITI IN CASO DI ERRORE Visualizza_Informazioni PERMETTE DI VISUALIZZARE INFORMAZIONI SULLA NOTA APPENA SUONATA Esportazione_Brano PERMETTE DI ESPORTARE IL BRANO MUSICALE REGISTRATO IN DIVERSI FORMATI Scrittura_Titolo_Brano PERMETTE DI DIGITARE IL TITOLO DEL BRANO #endrem ' TRASMISSIONE DATI Trasmissione_Nota_Musicale: Let Nota_Da_Trasmettere Is Duration + Note + Octave ' GENERA IL VALORE DELLA NOTA MUSICALE DA RIPRODURRE SerOut Trasmettitore_Player,N4800_4,(Tempo) ' TRASMETTE IL TEMPO SerOut Trasmettitore_Player,N4800_4,(Nota_Da_Trasmettere) ' TRASMETTE LA NOTA WriteI2C Locazione,(Tempo) ' SALVA NELLA MEMORIA ESTERNA LA VELOCITA CON IL QUALE ESEGUIRE LA NOTA CHE STIAMO PER ANDARE A SALVARE Pause 10 ' RITARDO PER POTERE CONSENTIRE DI SCRIVERE CORRETTAMENTE WriteI2C Locazione,(Nota_Da_Trasmettere) ' SALVA IN MEMORIA LA NOTA APPENA SUONATA Pause 10 ' RITARDO PER POTERE CONSENTIRE DI SCRIVERE CORRETTAMENTE ' VERIFICA SCRITTURA Let Locazione Is Locazione + 2 ' INCREMENTA IL NUMERO DELLA LOCAZIONE IN MODO TALE CHE LA PROSSIMA NOTA VERRA ' SALVATA NELLA LOCAZIONE SUCCESSIVA GoSub Visualizza_Informazioni GoTo Attendi_Pressione_Pulsante Termina_Riproduzione_Musicale: Let Locazione Is Prima_Locazione + 1 Return ' NEL CASO IL TASTO PREMUTO NON POSSIEDE UNA FUNZIONE Tasto_Non_Interpretato: GoTo Attendi_Pressione_Pulsante ' INTERPRETAZIONE DEGLI ERRORI ERROR: GoSub Clear_Display SerOut Trasmettitore_Display,N2400,("ERROR") GoTo Attendi_Pressione_Pulsante ' EFFETTO UP Effetto_Up: GoSub New_Line_1 SerOut Trasmettitore_Display,N2400,("UP") SerOut Trasmettitore_Player,N2400,(3) Return ' EFFETTO DOWN Effetto_Down: GoSub New_Line_1 SerOut Trasmettitore_Display,N2400,("DOWN") SerOut Trasmettitore_Player,N2400,(4) Return ' EFFETTO FLASH Effetto_Flash: GoSub New_Line_1 SerOut Trasmettitore_Display,N2400,("FLASH") SerOut Trasmettitore_Player,N2400,(5) Return ' EFFETTO BITONAL Effetto_Bitonal: GoSub New_Line_1 SerOut Trasmettitore_Display,N2400,("BITONAL") SerOut Trasmettitore_Player,N2400,(6) Return ' VISUALIZZAZIONE INFORMAZIONI SULLA NOTA DA SUONARE Visualizza_Informazioni: GoSub Clear_Display GoSub Move_To_Line_1_Position_1 ' Duration If Duration Is Crotchet Then SerOut Trasmettitore_Display,N2400,("Crotchet 1/4") EndIf If Duration Is Quaver Then SerOut Trasmettitore_Display,N2400,("Quaver 1/8") EndIf If Duration Is Semibreve Then SerOut Trasmettitore_Display,N2400,("Semibreve 1/1") EndIf If Duration Is Minim Then SerOut Trasmettitore_Display,N2400,("Minim 1/2") EndIf GoSub Move_To_Line_2_Position_1 ' Note If Note Is Note_C Then SerOut Trasmettitore_Display,N2400,("C") EndIf If Note Is Note_C_Diesis Then SerOut Trasmettitore_Display,N2400,("C",$23) EndIf If Note Is Note_D Then SerOut Trasmettitore_Display,N2400,("D") EndIf If Note Is Note_D_Diesis Then SerOut Trasmettitore_Display,N2400,("D",$23) EndIf If Note Is Note_E Then SerOut Trasmettitore_Display,N2400,("E") EndIf If Note Is Note_F Then SerOut Trasmettitore_Display,N2400,("F") EndIf If Note Is Note_F_Diesis Then SerOut Trasmettitore_Display,N2400,("F",$23) EndIf If Note Is Note_G Then SerOut Trasmettitore_Display,N2400,("G") EndIf If Note Is Note_G_Diesis Then SerOut Trasmettitore_Display,N2400,("G",$23) EndIf If Note Is Note_A Then SerOut Trasmettitore_Display,N2400,("A") EndIf If Note Is Note_A_Diesis Then SerOut Trasmettitore_Display,N2400,("A",$23) EndIf If Note Is Note_B Then SerOut Trasmettitore_Display,N2400,("B") EndIf If Note Is Note_P Then SerOut Trasmettitore_Display,N2400,("P") EndIf Let Posizione_Cursore Is 3 GoSub Move_To_Line_2_Position ' Octave If Octave Is Octave_6 Then SerOut Trasmettitore_Display,N2400,("6") EndIf If Octave Is Octave_7 Then SerOut Trasmettitore_Display,N2400,("7") EndIf If Octave Is Octave_5 Then SerOut Trasmettitore_Display,N2400,("5") EndIf Let Posizione_Cursore Is 5 GoSub Move_To_Line_2_Position ' Tempo SerOut Trasmettitore_Display,N2400,(#Tempo) Let Posizione_Cursore Is 8 GoSub Move_To_Line_2_Position ' Beats Per Minute If Tempo Is 1 Then SerOut Trasmettitore_Display,N2400,("812") EndIf If Tempo Is 2 Then SerOut Trasmettitore_Display,N2400,("406") EndIf If Tempo Is 3 Then SerOut Trasmettitore_Display,N2400,("270") EndIf If Tempo Is 4 Then SerOut Trasmettitore_Display,N2400,("203") EndIf If Tempo Is 5 Then SerOut Trasmettitore_Display,N2400,("162") EndIf If Tempo Is 6 Then SerOut Trasmettitore_Display,N2400,("135") EndIf If Tempo Is 7 Then SerOut Trasmettitore_Display,N2400,("116") EndIf If Tempo Is 8 Then SerOut Trasmettitore_Display,N2400,("101") EndIf If Tempo Is 9 Then SerOut Trasmettitore_Display,N2400,("90") EndIf If Tempo Is 10 Then SerOut Trasmettitore_Display,N2400,("81") EndIf If Tempo Is 11 Then SerOut Trasmettitore_Display,N2400,("73") EndIf If Tempo Is 12 Then SerOut Trasmettitore_Display,N2400,("67") EndIf If Tempo Is 13 Then SerOut Trasmettitore_Display,N2400,("62") EndIf If Tempo Is 14 Then SerOut Trasmettitore_Display,N2400,("58") EndIf If Tempo Is 15 Then SerOut Trasmettitore_Display,N2400,("54") EndIf Return ' FUNZIONI DISPLAY Clear_Display: SerOut Trasmettitore_Display,N2400,(254,1) Pause 30 Return Hide_Display: SerOut Trasmettitore_Display,N2400,(254,8) Return Restore_Display: SerOut Trasmettitore_Display,N2400,(254,12) Return Turn_On_Cursor: SerOut Trasmettitore_Display,N2400,(254,14) Return Move_Cursor_Left: SerOut Trasmettitore_Display,N2400,(254,16) Return Move_Cursor_Right: SerOut Trasmettitore_Display,N2400,(254,20) Return Move_To_Line_1_Position_1: SerOut Trasmettitore_Display,N2400,(254,128) Return Move_To_Line_1_Position: Let Posizione_Cursore Is 128 + Posizione_Cursore SerOut Trasmettitore_Display,N2400,(254,Posizione_Cursore) Let Posizione_Cursore Is 0 Return Move_To_Line_2_Position_1: SerOut Trasmettitore_Display,N2400,(254,192) Return Move_To_Line_2_Position: Let Posizione_Cursore Is 192 + Posizione_Cursore SerOut Trasmettitore_Display,N2400,(254,Posizione_Cursore) Let Posizione_Cursore Is 0 Return New_Line_1: GoSub Clear_Display GoSub Move_To_Line_1_Position_1 Return New_Line_2: GoSub Clear_Display GoSub Move_To_Line_2_Position_1 Return ' COSA FARE SE LA FUNZIONE SELEZIONATA NON ESISTE Funzione_Non_Implementata: Return
BIOLOGICAL HAZARD WASTEULTIMO AGGIORNAMENTO 16/08/2009