спектроанализатор звука arduino

Тема в разделе "Arduino & Shields", создана пользователем sanik, 2 ноя 2014.

  1. sanik

    sanik Гик

    Вот мне надо получить примерно такие значения
    Код (Text):
     outputValue = map(spectrumRead,0, 1024, 0, 4095);
    chanelValue = map (spectrumRead, 0, 1024, 0, 16);
    delaylValue = map (spectrumRead, 0, 1024, 0, 500);
     
  2. Unixon

    Unixon Оракул Модератор

    Какую?
     
  3. Unixon

    Unixon Оракул Модератор

    Да, можно. Но нужно научиться понимать код и писать его тоже с пониманием.
     
  4. Unixon

    Unixon Оракул Модератор

    Какие три из восьми, получаемых от MSGEQ7?
     
  5. sanik

    sanik Гик

    Ошибку исправил уже
    первую из низких частот одна полоса вторую из средних две полосы вместе третью из высоких тоже две полосы
     
  6. sanik

    sanik Гик

    Я поэтому и не могу понять как работает массив как контролер из одного x понимает что куда пихать)
     
  7. Unixon

    Unixon Оракул Модератор

    В вашем примере x - переменная цикла for(), внутри цикла она принимает значения от 0 до 7 и запись "a[x]" обозначает доступ к элементу массива "a" под номером x.
     
  8. Unixon

    Unixon Оракул Модератор

    А с двумя полосами что будете делать? Считать максимальное значение, среднее или еще какое-то? Вам ведь одно число нужно в итоге. Точнее, из 8 чисел составить 3.

    Я вам предлагаю сначала в цикле считать все значения амплитуд и положить их в массив, а потом из этого массива уже брать отдельные элементы и использовать.
     
  9. sanik

    sanik Гик

    То есть получается a[x] b[x] c[x] это и будут три разные переменые которые мне нужны?
     
  10. sanik

    sanik Гик

    Так получается?
    Код (Text):
    #define msg7RESET 11
    #define msg7Strobe 12
    #define msg7DCout 0
    int chanelValue [8];
    int delaylValue [8];


    void setup()
    {              

      pinMode(msg7RESET, OUTPUT);
      pinMode(msg7Strobe, OUTPUT);
    }
    void loop()
    {
      digitalWrite(msg7RESET, HIGH);  // осуществляем сброс MSGEQ7
      delay(5);
      digitalWrite(msg7RESET, LOW);
      for (int x = 0; x < 7; x++)
      {          
        digitalWrite(msg7Strobe, LOW); // семь частот - семь стробирующих импульсов
        delayMicroseconds(35);          // ждем установления значения 35 мкс
        int spectrumRead = analogRead(msg7DCout);
        int a[x] = map(spectrumRead, 0, 1024, 0, 16);
        int b[x] = map(spectrumRead, 0, 1024, 0, 4095);
        chanelValue = a[x];
        delaylValue = b[x];
      }
    }
     
  11. sanik

    sanik Гик

    Блин опять не правильно(
     
  12. sanik

    sanik Гик

    Если б я знал как это записывается...На одних догадках далеко не уедешь
     
  13. sanik

    sanik Гик

    В моем понимании это было так но оно не работает(

    Код (Text):


    #define msg7RESET 11
    #define msg7Strobe 12
    #define msg7DCout 0
    int spectrumRead[8];
    int spectrum[7]={0,0,0,0,0,0,0};
    int delaylValue = 0;
    int outputValue = 0;
    int chanelValue = 0;
    void setup()
    {                

      pinMode(msg7RESET, OUTPUT);
      pinMode(msg7Strobe, OUTPUT);
    }

    void loop()
    {
      digitalWrite(msg7RESET, HIGH);  // осуществляем сброс MSGEQ7
      delay(5);
      digitalWrite(msg7RESET, LOW);
      for (int x = 0; x < 7; x++)
      {          
        digitalWrite(msg7Strobe, LOW); // семь частот - семь стробирующих импульсов
        delayMicroseconds(35);          // ждем установления значения 35 мкс
        int spectrumRead = analogRead(msg7DCout);
        spectrum[x] = spectrumRead;
        int a[x] = spectrum;
        int b[x] = spectrum;
        int c[x] = spectrum;
      }
    }
     
  14. Unixon

    Unixon Оракул Модератор

    Вы не поняли.
     
  15. Unixon

    Unixon Оракул Модератор

    Код (Text):

    #define msg7RESET 11
    #define msg7Strobe 12
    #define msg7DCout 0
    int spectrumRead[8];
    int spectrum[7]={0,0,0,0,0,0,0};
    int delaylValue = 0;
    int outputValue = 0;
    int chanelValue = 0;

    void setup()
    {            
     pinMode(msg7RESET, OUTPUT);
     pinMode(msg7Strobe, OUTPUT);
    }

    void loop()
    {
     digitalWrite(msg7RESET, HIGH);  // осуществляем сброс MSGEQ7
     delay(5);
     digitalWrite(msg7RESET, LOW);
     for (int x = 0; x < 7; x++)
     {        
      digitalWrite(msg7Strobe, LOW); // семь частот - семь стробирующих импульсов
      delayMicroseconds(35);          // ждем установления значения 35 мкс
      spectrum[x] = analogRead(msg7DCout);
     }
     int a = spectrum[0];
     int b = (spectrum[3]+spectrum[4])/2;
     int c = (spectrum[6]+spectrum[7])/2;
     outputValue = map(a, 0, 1024, 0, 4095);
     chanelValue = map(b, 0, 1024, 0, 16);
     delaylValue = map(c, 0, 1024, 0, 500);
    }

     
     
  16. sanik

    sanik Гик

    Спасибо! А я попытался сделать так
    Код (Text):
    #define msg7RESET 11
    #define msg7Strobe 12
    #define msg7DCout 0
    int spectrumRead[8];
    int spectrum[7]={0,0,0,0,0,0,0};

    int delaylValue []={0,0,0,0,0,0,0};
    int outputValue []={0,0,0,0,0,0,0};
    int chanelValue []={0,0,0,0,0,0,0};
    void setup()
    {              

      pinMode(msg7RESET, OUTPUT);
      pinMode(msg7Strobe, OUTPUT);
    }
    void loop()
    {
      digitalWrite(msg7RESET, HIGH);  // осуществляем сброс MSGEQ7
      delay(5);
      digitalWrite(msg7RESET, LOW);
      for (int x = 0; x < 7; x++)
      {          
        digitalWrite(msg7Strobe, LOW); // семь частот - семь стробирующих импульсов
        delayMicroseconds(35);          // ждем установления значения 35 мкс
        int spectrumRead = analogRead(msg7DCout);
        spectrum[x] = spectrumRead;
        delaylValue[x] = spectrum[x];
        outputValue[x] = spectrum[x];
        chanelValue[x] = spectrum[x];
      }
    }
     
  17. sanik

    sanik Гик

    Вот ни за что бы не догадался
    Код (Text):
     int a = spectrum[0];
    int b = (spectrum[3]+spectrum[4])/2;
    int c = (spectrum[6]+spectrum[7])/2;
    outputValue = map(a, 0, 1024, 0, 4095);
    chanelValue = map(b, 0, 1024, 0, 16);
    delaylValue = map(c, 0, 1024, 0, 500);
     
  18. sanik

    sanik Гик

    Откуда мне было знать что можно в квадратных скобках конкретно указать число [3]
     
  19. Unixon

    Unixon Оракул Модератор

    Это просто номер полосы. Я не знаю какие полосы вы выберете. Написал "3" для примера.

    У вас есть 8 полос от 0 до 7, вам нужно из 8 амплитуд сконструировать три управляющих значения. Я выбрал для примера полосы 0, 3 и 4, 6 и 7. Какие вам полосы нужно - мне не ведомо.
     
  20. sanik

    sanik Гик

    Я про это и говорю если б я сразу догадался что хочу например взять пятую полосу то записать [5]