Pages: [1]   Go Down
Author Topic: Light organ 3 channels to 6 channels  (Read 448 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 26
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
#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.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 26
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Please, I need help. Anyone? smiley
Logged

Pages: [1]   Go Up
Jump to: