Go Down

Topic: Light organ 3 channels to 6 channels (Read 558 times) previous topic - next topic

florin

Hi!
I have found this code, and i test it. It works great. http://fritzing.org/media/fritzing-repo/projects/a/arduino-psychedelic-light-organ/code/OrganoLuces.ino


I want to modify that to 6 channels, so i modified it.
Code: [Select]

#include <fix_fft.h>

#define MUESTRAS 128           
#define LOGM 7                 

#define BAJOS_MEDIOSA 7
#define MEDIOSA_MEDIOS 18
#define MEDIOS_AGUDOS 25
#define AGUDOS_AGUDOSA 30
#define AGUDOSA_AGUDOSAA 35

#define BPIN  3
#define BPINA 5
#define MPIN  6
#define MPINA 11
#define APIN  10
#define APINA 9

#define MAX_PASADAS 10         

char data[MUESTRAS];         
char im[MUESTRAS];             

unsigned char salida[MUESTRAS/2]; 
unsigned char bajos, bajosa,medios, mediosa, agudos , agudosa; 

byte  pasada,                           
      acumBajos, acumBajosa,acumMedios,acumMediosa,acumAgudos,acumAgudosa,   
      limBajos, limBajosa,limMedios,limMediosa,limAgudos,limAgudosa;   

void aplicaVentana (char *vData) {
    double muestrasMenosUno = (double(MUESTRAS) - 1.0);

    for (uint8_t i = 0; i < MUESTRAS/2 ; i++) {
        double indiceMenosUno = double(i);
        double ratio = (indiceMenosUno / muestrasMenosUno);
        double factorPeso = 0.5 * (1.0 - cos(6.28 * ratio));
vData[i] *= factorPeso;
vData[MUESTRAS - (i + 1)] *= factorPeso;
    }
}

void setup() {                   
   
   
   
    bitWrite(ADCSRA,ADPS2,1);
    bitWrite(ADCSRA,ADPS1,0);
    bitWrite(ADCSRA,ADPS0,1);

   
   
    analogReference(INTERNAL);   
   
   
    pinMode(BPIN,OUTPUT);
    pinMode(BPINA,OUTPUT);
    pinMode(MPIN,OUTPUT);
    pinMode(MPINA,OUTPUT);
    pinMode(APIN,OUTPUT);
    pinMode(APINA,OUTPUT);
   
   
    pasada = 0;
    acumBajos = acumBajosa = acumMedios = acumMediosa = acumAgudos = acumAgudosa = 0;
    limBajos = limBajosa = limMedios = limMediosa = limAgudos = limAgudosa = 50;
}

void loop() {

   
    for( int i=0; i < MUESTRAS; i++) {
       data[i] = analogRead(0)/4 -128;                                 
       im[i] = 0;                                                 
    }
   
   
    aplicaVentana (data);

   
    fix_fft(data,im,LOGM,0);
   
 
   
   
    for (int i=0; i < MUESTRAS/2; i++){
       salida[i] = data[i] * data[i] + im[i] * im[i];
    }
   
   
    bajos = 0;
    for (int i=2; i < BAJOS_MEDIOSA; i++){
      bajos += salida[i];
    }
    bajos = bajos/2;
   
    bajosa = 0;
    for (int i=BAJOS_MEDIOSA; i<MEDIOSA_MEDIOS; i++){
     bajosa += salida[i];
    }
    bajosa = bajosa/2;
   
    medios = 0;
    for (int i=MEDIOSA_MEDIOS ; i < MEDIOS_AGUDOS; i++){
      medios += salida[i];
    }
    medios = medios/2;
   
    mediosa = 0;
    for(int i=MEDIOS_AGUDOS; i < AGUDOS_AGUDOSA;i++){
      mediosa += salida[i];
    }
    mediosa = mediosa/2;
   
    agudos = 0;
    for (int i=AGUDOS_AGUDOSA; i < AGUDOSA_AGUDOSAA;i++){
      agudos += salida[i];
    }
    agudos = agudos/2;
   
    agudosa =0;
    for(int i = AGUDOSA_AGUDOSAA; i<i < MUESTRAS/2; i++){
      agudosa += salida[i];
    }
    agudosa = agudosa/2;
     
     
     
     
     
   
 
   
   int siBajos  =  bajos  > limBajos;
   int siBajosa  =  bajosa  > limBajosa;
   int siMedios =  medios > limMedios;
   int siMediosa =  mediosa > limMediosa;
   int siAgudos =  agudos > limAgudos;
   int siAgudosa =  agudosa > limAgudosa;
   
   digitalWrite(BPIN,siBajos ? HIGH : LOW);
   digitalWrite(BPINA,siBajosa ? HIGH : LOW);
   digitalWrite(MPIN,siMedios? HIGH : LOW);
   digitalWrite(MPINA,siMediosa? HIGH : LOW);
   digitalWrite(APIN,siAgudos? HIGH : LOW);
   digitalWrite(APINA,siAgudosa? HIGH : LOW);
   
   
   
 
   
   
   acumBajos  += siBajos;
   acumBajosa  += siBajosa;
   acumMedios += siMedios;
   acumMediosa += siMediosa;
   acumAgudos += siAgudos;
   acumAgudosa += siAgudosa;
   
   if ( ++pasada > MAX_PASADAS ) {
      pasada = 0;
      limBajos  = 20 + acumBajos*5;
      limBajosa  = 20 + acumBajosa*5;
      limMedios = 20 + acumMedios*5;
      limMediosa = 20 + acumMediosa*5;
      limAgudos = 20 + acumAgudos*5;
      limAgudosa = 20 + acumAgudosa*5;
     
      acumBajos  = 0;
      acumBajosa  = 0;
      acumMedios = 0;
      acumMediosa = 0;
      acumAgudos = 0;
      acumAgudosa = 0;
   }
}




No erros, but circuit do not work. Where is the mistake?

Thank you.


Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy