Hey all,
So I am a college student working on a massive project, and I need for my LED array of sorts to read an audio imput and the change color based on Amplitude. Unfortunately, it is reading an amplitued of 0 always. Any help with code would be greatly appreciated. and remember im a civil engineering major, so electronics and programming isnt my forte!
Pinout: 36 RGB LEDS
Reds on Digital 2-5
Greens on 6-9
and Blues on 10-13
my Code:
//define the LEDs and audio input to their respective pins
#define RedLED2 2
#define RedLED3 3
#define RedLED4 4
#define RedLED5 5
#define GrnLED6 6
#define GrnLED7 7
#define GrnLED8 8
#define GrnLED9 9
#define BlueLED10 10
#define BlueLED11 11
#define BlueLED12 12
#define BlueLED13 13
#define audioInput A1
//declare variables
int inputAmplitude, aveAmpValue, stepValue;
int ampValue0, ampValue1, ampValue2, ampValue3, ampValue4, ampValue5, ampValue6, ampValue7;
void setup()
{
//establish each LED pair as an output and turn it off
for(int n = 2; n <= 13; n++)
{
pinMode(n, OUTPUT);
digitalWrite(n, LOW);
}
//establish the music as an input
pinMode(A1, INPUT);
/*
Serial port troubleshooting. All serial port behavior is commented out during run
for faster LED response time.
*/
Serial.begin(9600);
}
void loop()
{
//read values of the audio coming in, average them, for use in the loop function
ampValue0 = analogRead(audioInput);
delay(5);
ampValue1 = analogRead(audioInput);
delay(5);
ampValue2 = analogRead(audioInput);
delay(5);
ampValue3 = analogRead(audioInput);
delay(5);
ampValue4 = analogRead(audioInput);
delay(5);
ampValue5 = analogRead(audioInput);
delay(5);
ampValue6 = analogRead(audioInput);
delay(5);
ampValue7 = analogRead(audioInput);
delay(5);
aveAmpValue = (ampValue0 + ampValue1 + ampValue2 + ampValue3 + ampValue4 + ampValue5 + ampValue6 + ampValue7)/8;
delay(5);
/*
Set the step value (how sensetive the lights are to the music) as a variable
of the difference of the first amplitude value and the changing average
amplitude value.
/
stepValue = 2abs(aveAmpValue - inputAmplitude);
//read the amplitude of the music
inputAmplitude = analogRead(audioInput);
Serial.println(inputAmplitude);
//troubleshooting output to serial port
Serial.print("inputAmplitude is: ");
Serial.println(inputAmplitude);
if (analogRead(audioInput) >= 50){
/*
Make the lights light up according to changes in the music. Do this by
comparing the refreshing average amplitude to the first amplitude value
recieved in setup. Based on how much this value is different (the step
value), change the lights by either a large factor or a small one.
*/
if (inputAmplitude<=10){digitalWrite(RedLED2, LOW);
digitalWrite(RedLED3, LOW);
digitalWrite(RedLED4, LOW);
digitalWrite(RedLED5, LOW);
digitalWrite(GrnLED6, LOW);
digitalWrite(GrnLED7, LOW);
digitalWrite(GrnLED8, LOW);
digitalWrite(GrnLED9, LOW);
digitalWrite(BlueLED10, LOW);
digitalWrite(BlueLED11, LOW);
digitalWrite(BlueLED12, LOW);
} digitalWrite(BlueLED13, LOW);
if(inputAmplitude <= aveAmpValue - stepValue)
{
digitalWrite(RedLED2, HIGH);
digitalWrite(RedLED3, HIGH);
digitalWrite(RedLED4, HIGH);
digitalWrite(RedLED5, HIGH);
digitalWrite(GrnLED6, LOW);
digitalWrite(GrnLED7, LOW);
digitalWrite(GrnLED8, LOW);
digitalWrite(GrnLED9, LOW);
digitalWrite(BlueLED10, LOW);
digitalWrite(BlueLED11, LOW);
digitalWrite(BlueLED12, LOW);
digitalWrite(BlueLED13, LOW);
}
else if(inputAmplitude <= aveAmpValue)
{
digitalWrite(RedLED2, LOW);
digitalWrite(RedLED3, LOW);
digitalWrite(RedLED4, LOW);
digitalWrite(RedLED5, LOW);
digitalWrite(GrnLED6, LOW);
digitalWrite(GrnLED7, LOW);
digitalWrite(GrnLED8, LOW);
digitalWrite(GrnLED8, LOW);
digitalWrite(BlueLED10, HIGH);
digitalWrite(BlueLED11, HIGH);
digitalWrite(BlueLED12, HIGH);
digitalWrite(BlueLED13, HIGH);
}
else if(inputAmplitude <= aveAmpValue + stepValue)
{
digitalWrite(RedLED2, HIGH);
digitalWrite(RedLED3, HIGH);
digitalWrite(RedLED4, HIGH);
digitalWrite(RedLED5, HIGH);
digitalWrite(GrnLED6, LOW);
digitalWrite(GrnLED7, LOW);
digitalWrite(GrnLED8, LOW);
digitalWrite(GrnLED9, LOW);
digitalWrite(BlueLED10, LOW);
digitalWrite(BlueLED11, LOW);
digitalWrite(BlueLED12, LOW);
digitalWrite(BlueLED13, LOW);
}
else if(inputAmplitude <= aveAmpValue + stepValue*2)
{
digitalWrite(RedLED2, LOW);
digitalWrite(RedLED3, LOW);
digitalWrite(RedLED4, LOW);
digitalWrite(RedLED5, LOW);
digitalWrite(GrnLED6, HIGH);
digitalWrite(GrnLED7, HIGH);
digitalWrite(GrnLED8, HIGH);
digitalWrite(GrnLED9, HIGH);
digitalWrite(BlueLED10, LOW);
digitalWrite(BlueLED11, LOW);
digitalWrite(BlueLED12, LOW);
digitalWrite(BlueLED13, LOW);
}
else if(inputAmplitude <= aveAmpValue + stepValue*3)
{
digitalWrite(RedLED2, LOW);
digitalWrite(RedLED3, LOW);
digitalWrite(RedLED4, LOW);
digitalWrite(RedLED5, LOW);
digitalWrite(GrnLED6, HIGH);
digitalWrite(GrnLED7, HIGH);
digitalWrite(GrnLED8, HIGH);
digitalWrite(GrnLED9, HIGH);
digitalWrite(BlueLED10, LOW);
digitalWrite(BlueLED11, LOW);
digitalWrite(BlueLED12, LOW);
digitalWrite(BlueLED13, LOW);
}
else if(inputAmplitude <= aveAmpValue + stepValue*4)
{
digitalWrite(RedLED2, LOW);
digitalWrite(RedLED3, LOW);
digitalWrite(RedLED4, LOW);
digitalWrite(RedLED5, LOW);
digitalWrite(GrnLED6, HIGH);
digitalWrite(GrnLED7, HIGH);
digitalWrite(GrnLED8, HIGH);
digitalWrite(GrnLED9, HIGH);
digitalWrite(BlueLED10, LOW);
digitalWrite(BlueLED11, LOW);
digitalWrite(BlueLED12, LOW);
digitalWrite(BlueLED13, LOW);
}
else if(inputAmplitude <= aveAmpValue + stepValue*5)
{
digitalWrite(RedLED2, LOW);
digitalWrite(RedLED3, LOW);
digitalWrite(RedLED4, LOW);
digitalWrite(RedLED5, LOW);
digitalWrite(GrnLED6, LOW);
digitalWrite(GrnLED7, LOW);
digitalWrite(GrnLED8, LOW);
digitalWrite(GrnLED9, LOW);
digitalWrite(BlueLED10, HIGH);
digitalWrite(BlueLED11, HIGH);
digitalWrite(BlueLED12, HIGH);
digitalWrite(BlueLED13, HIGH);
}
else if(inputAmplitude <= aveAmpValue + stepValue*6)
{
digitalWrite(RedLED2, LOW);
digitalWrite(RedLED3, LOW);
digitalWrite(RedLED4, LOW);
digitalWrite(RedLED5, LOW);
digitalWrite(GrnLED6, LOW);
digitalWrite(GrnLED7, LOW);
digitalWrite(GrnLED8, LOW);
digitalWrite(GrnLED9, LOW);
digitalWrite(BlueLED10, HIGH);
digitalWrite(BlueLED11, HIGH);
digitalWrite(BlueLED12, HIGH);
digitalWrite(BlueLED13, HIGH);
}
else
{
digitalWrite(RedLED2, HIGH);
digitalWrite(RedLED3, HIGH);
digitalWrite(RedLED4, HIGH);
digitalWrite(RedLED5, LOW);
digitalWrite(GrnLED6, HIGH);
digitalWrite(GrnLED7, HIGH);
digitalWrite(GrnLED8, HIGH);
digitalWrite(GrnLED9, LOW);
digitalWrite(BlueLED10, HIGH);
digitalWrite(BlueLED11, HIGH);
digitalWrite(BlueLED12, HIGH);
digitalWrite(BlueLED13, LOW);
}
}
else{
digitalWrite(RedLED2, HIGH);
digitalWrite(RedLED3, HIGH);
digitalWrite(RedLED4, HIGH);
digitalWrite(RedLED5, HIGH);
digitalWrite(GrnLED6, HIGH);
digitalWrite(GrnLED7, HIGH);
digitalWrite(GrnLED8, HIGH);
digitalWrite(GrnLED9, HIGH);
digitalWrite(BlueLED10, HIGH);
digitalWrite(BlueLED11, HIGH);
digitalWrite(BlueLED12, HIGH);
digitalWrite(BlueLED13, HIGH);
}
delay(20);
}
Thanks Again!