/* buffer capturador de onde */complex_t bfly_buff[FFT_N]; /* FFT buffer */uint16_t spektrum[FFT_N/2]; /* saida do espectro do buffer */int minimo = 10;void RGB(int r, int g, int b){//Contralador RBG digitalWrite(4, HIGH); analogWrite(3,r); analogWrite(5,g); analogWrite(6,b);}void Cor(int n){//Funcao que define 7 cores para n de 1-7switch(n){ case 1: RGB(255,0,0);break; case 2: RGB(0,255,0);break; case 3: RGB(0,0,255);break; case 4: RGB(255,255,0);break; case 5: RGB(255,0,255);break; case 6: RGB(150,255,10);break; case 7: RGB(255,255,255);break; default: RGB(0,0,0); }}int Maior(uint16_t lista[]){//Funcao que define intervalo de frequencia de maior intensidadeint maior = 7;for(int i=7;i<14;i++){ if(lista[i]>lista[maior])maior=i; } if(lista[maior]<15)maior=0; return maior;}void setup(){ Serial.begin(57600); adcInit(); adcCalb(); establishContact(); // manda um byte para estabelecer contato ate o processing responder for(int i=4;i<11;i++)pinMode(i,OUTPUT);}void loop(){ if (position == FFT_N) { fft_input(capture, bfly_buff); fft_execute(bfly_buff); fft_output(bfly_buff, spektrum); for (byte i = 7; i < 14; i++){ Serial.print(spektrum[i],BYTE); }//manda dados para o processing position = 0; int maior = Maior(spektrum); Cor(maior-6);//pede a funcao Cor() acender a cor maior-6 }}void establishContact() { while (Serial.available() <= 0) { Serial.print('A', BYTE); // manda um A maiusculo delay(300); }}// free running ADC fills capture bufferISR(ADC_vect){ if (position >= FFT_N) return; capture[position] = ADC + zero; if (capture[position] == -1 || capture[position] == 1) capture[position] = 0; position++;}void adcInit(){ /* REFS0 : VCC use as a ref, IR_AUDIO : channel selection, ADEN : ADC Enable, ADSC : ADC Start, ADATE : ADC Auto Trigger Enable, ADIE : ADC Interrupt Enable, ADPS : ADC Prescaler */ // free running ADC mode, f = ( 16MHz / prescaler ) / 13 cycles per conversion ADMUX = _BV(REFS0) | IR_AUDIO; // | _BV(ADLAR); //ADCSRA = _BV(ADSC) | _BV(ADEN) | _BV(ADATE) | _BV(ADIE) | _BV(ADPS2) | _BV(ADPS1); //pre-escala 64 : 19231 Hz - 300Hz por 64 divisoes ADCSRA = _BV(ADSC) | _BV(ADEN) | _BV(ADATE) | _BV(ADIE) | _BV(ADPS2) | _BV(ADPS1) | _BV(ADPS0); // pre-escala 128 : 9615 Hz - 150 Hz porr 64 divisoes, melhor para maioria das musicas(mais definicao) sei();}void adcCalb(){ Serial.println("Start to calc zero"); long midl = 0; // get 2 meashurment at 2 sec // on ADC input must be NO SIGNAL!!! for (byte i = 0; i < 2; i++) { position = 0; delay(100); midl += capture[0]; delay(900); } zero = -midl/2; Serial.println("Done.");}Quanto ao codigo do processing modificamos o codigo de barras para 7, ao inves das 64 do post anterior, contudo e preciso que voce modifique o campo da porta, pois ela le a porta que o arduino esta utilizando, para saber a porta que seu arduino esta utilizando va em tools-> Serial Port. No nosso caso utilizamos a porta "COM5"// Feel Free to edit these variables ///////////////////////////String xLabel = "Frequency";String yLabel = "Values";String Heading = "Arduino FFT";String URL = "01/02/2010";float Vcc = 255.0; // the measured voltage of your usb int NumOfVertDivisions=5; // dark grayint NumOfVertSubDivisions=10; // light grayint NumOfBars=7; // Numero de barras/ Deve ser o mesmo que o arduino envia. // since you should change what the arduino sends // if these are changed, backgroung image has problems // a plain background solves the problemint ScreenWidth = 800, ScreenHeight=600;/////////////////////////////////////////////////////////// Serial port stuff ///////////////////////import processing.serial.*;Serial myPort; boolean firstContact = false; int[] serialInArray = new int[NumOfBars];int