Микрофон

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем TeHeBuK, 23 мар 2013.

  1. TeHeBuK

    TeHeBuK Нерд

  2. nailxx

    nailxx Официальный Нерд Администратор

    Хм, а что именно не работает? Перепутать что-то довольно сложно: красный провод — питание, чёрный — земля, а синий втыкаете в один из аналоговых входов и делаете analogRead(PIN_WHEREVER_YOUR_MIC_IS).
     
  3. TeHeBuK

    TeHeBuK Нерд

    А как сделать что б он "запомнил хлопок" и по нему включил диод
    ?
     
  4. nailxx

    nailxx Официальный Нерд Администратор

    Проще всего: в цикле ждите пока сигнал станет выше некоторого порога громкости, который вы сами подберёте

    Чуть сложнее: используйте компаратор. Подведите к нему сигнал с микрофона и постоянный сигнал, уровень которого можете настроить потенциометром. Выход компаратора отправьте в пин Arduino и повешайте на него прерывание. Так вы включите светодиод, когда услышите звук, но при этом не будете грузить циклом ожидания «основной поток»
     
    Megakoteyka нравится это.
  5. TeHeBuK

    TeHeBuK Нерд

    А какой оператор считывает единицу из val?
     
  6. nailxx

    nailxx Официальный Нерд Администратор

    Не совсем понял вопрос. О каком `val` идёт речь?

    Считать аналоговое значение: analogRead(pin), цифровое — digitalRead(x)
     
  7. TeHeBuK

    TeHeBuK Нерд

    Код (Text):
    int sensePin =0;
    int ledPin = 13;
     
    void setup (){
      analogReference (DEFAULT);
     
      pinMode(ledPin, OUTPUT);
     
    }
     
    void loop (){
      int val =analogRead (sensePin);
     
      if(val < 1) digitalWrite (ledPin, HIGH);
      else digitalWrite (ledPin, LOW);
    }
    вот сам скетч но у меня почему то диод горит все время хоть хлопай хоть не хлопай:(
    Что не так со скетчем?
     
  8. warman

    warman Гик

    скорее всего просто в else непопадает. Попробуй так
    Код (Text):
    int sensePin =0;
    int ledPin = 13;
    boolean state=false;
    int shum=0;
     
    void setup (){
      analogReference (DEFAULT);
     
      pinMode(ledPin, OUTPUT);
      shum=analogRead (sensePin);
    }
     
    void loop (){
      int val =analogRead (sensePin);
      if((val > shum) && !(state))
      {
         state=true;
      }
      else
      {
        state=false;
      }
    digitalWrite (ledPin, state);
    delay(1000); //да простят меня программеры, но для обучающего кода без delay никак
    }
     
  9. TeHeBuK

    TeHeBuK Нерд

    спс щас попробую:)
     
  10. TeHeBuK

    TeHeBuK Нерд

    Нет теперь диод вообще не горит хоть микрофон об стол стучишь:(
     
  11. Megakoteyka

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

    Добавьте отладочный вывод, посмотрите, что на самом деле читается с аналогового входа.
     
  12. Unixon

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

    Код (Text):

    const int PIN_SENSE = A0;
    const int PIN_LED = 13;
    const int N_CAL = 16; // must be power of 2
    const int SNR_THRESH = 4; // critical signal to noise ratio
    const int MAX_NOISE = 1000;
    boolean state = false;
    int noise = 0;
     
    void setup ()
    {
     // pin setup
     analogReference (DEFAULT);
     pinMode(PIN_LED, OUTPUT);
     // precalibration
     for (byte i=(N_CAL-1); i>=0; i--)
     {
      noise += analogRead(PIN_SENSE);
      delay(50);
     }
     if (noise>MAX_NOISE) noise = MAX_NOISE;
    }
     
    void loop ()
    {
     int val = analogRead(PIN_SENSE);
     if ((val>MAX_NOISE) || (N_CAL*val > SNR_THRESH*noise))
     {
      // process event
      state != state;
      if (state) delay(1000);
     }
     else
     {
      // autocalibration
      noise -= noise/N_CAL;
      noise += val;
      if (noise>MAX_NOISE) noise = MAX_NOISE;
     }
     digitalWrite (PIN_LED, state);
     delay(50);
    }
     
  13. TeHeBuK

    TeHeBuK Нерд

    Спасибо сегодня проверю
     
  14. TeHeBuK

    TeHeBuK Нерд

    нет не работает
     
  15. Unixon

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

    Узнайте тогда, сначала, что у вас вообще происходит.
    Код (Text):
    const int PIN_SENSE = A0;
     
    void setup()
    {
     Serial.begin(9600);
    }
     
    void loop()
    {
     Serial.println(analogRead(PIN_SENSE));
     delay(100);
    }
     
    Megakoteyka нравится это.