Arduino立体声VU表

时间:2018-05-13 17:58:05

标签: c++ audio arduino

我想为每个频道使用Arduino Nano和5个LED创建一个音频VU表。
问题是我无法找到/创建执行此操作的程序。

代码

//STEREO LED VU
const int leftLedCount = 5;
const int rightLedCount = 5;
const int leftLed[leftLedCount] = {2,3,4,5,6};
const int rightLed[rightLedCount] = {7,8,9,10,11};
int leftInput, l;
int rightInput, r;
void setup()
{
  for (l = 0; l < leftLedCount; l++)
    pinMode(leftLed[l], OUTPUT);
  for (r = 0; r < rightLedCount; r++)
    pinMode(rightLed[r], OUTPUT);
  testLEDs();
}
void testLEDs()
{
  for (l = 0; l < leftLedCount; l++)
    digitalWrite(leftLed[l], HIGH);
  for (r = 0; r < rightLedCount; r++)
    digitalWrite(rightLed[r], HIGH);
  delay(1000);
  turnOffLEDs();
}
void turnOffLEDs()
{  
  for (l = 0; l < leftLedCount; l++)
    digitalWrite(leftLed[l], LOW);
  for (r = 0; r < rightLedCount; r++)
    digitalWrite(rightLed[r], LOW);
}
void loop()
{
  leftInput = analogRead(A0)/12,5;
  rightInput = analogRead(A1)/12,5;
  //LEFT
  for(l=0; l <= leftInput; l++)
  {
    digitalWrite(leftLed[l], HIGH);
  }
  //RIGHT
  for(r=0; r <= rightInput; r++)
  {
    digitalWrite(rightLed[r], HIGH);
  }
  //TURN OFF LEDS
  turnOffLEDs();
}

问题:

  • 几分钟后它完全停止工作:随机几个LED保持开启
  • 灯光与声音无关

我认为问题在于改变输入水平,因为我不明白应该如何分配信号水平。任何形式的帮助都会有所帮助。

1 个答案:

答案 0 :(得分:0)

您可能希望在这些表达式中编写12.5而不是12,5leftInput = analogRead(A0)/12,5; rightInput = analogRead(A1)/12,5;但即使这样,analogRead也会将值从0返回到1023 1}}(包括)。因此left/rightInput的值范围从0到大约81,而您需要它在0...4的范围内。我建议使用另一组阈值,并根据信号强度点亮所有高于阈值的LED,例如(未测试)添加此值而不是loop()

const int thresholdsLeftLed[leftLedCount] = { 4, 208, 412, 616, 820 };
const int thresholdsRightLed[rightLedCount] = { 4, 208, 412, 616, 820 };

void LightLEDs(int signalLeft, int signalRight)
{
    for (int l = 0; l < leftLedCount; ++l)
        digitalWrite(leftLed[l], signalLeft > thresholdsLeftLed[l] ? HIGH : LOW);
    for (int r = 0; r < rightLedCount; ++r)
        digitalWrite(rightLed[r], signalRight > thresholdsRightLed[r] ? HIGH : LOW);
}

void loop()
{
    LightLEDs(analogRead(A0), analogRead(A1));
}

请注意,如果信号低于阈值,您可能不需要关闭所有LED,因为它们在循环中关闭