В чем проблема?,помогите ее решить, пожалуйста

Тема в разделе "Закажу проект", создана пользователем ksk2000, 26 май 2018.

  1. ksk2000

    ksk2000 Нуб

    Помогите,умоляю.Хочу сделать чтобы когда я стучал по столу или в ладоши хлопал ,благодаря микрофону семисегментный четырехразрядный индикатор включался а потом через некоторое время выключался

    Вот скеч,но он не работает, ничего не могу сделать.

    #include <SegmentsIndicator.h>

    /*
    * Первым параметром - количество разрядов + количество сегментов.
    * Если используется стандартный индикатор, то должно стоять 12
    * Дальше через запятую пины разрядов
    * и пины сегментов
    * кстати, A3,A5,A2 - значит аналоговое пины
    * D4 D3 D2 D1 A B C D E F G H
    */
    SegmentsIndicator segmentsIndicator2=(12, 13, 12 , 11, 10, 1, A5, A3, 3, 2, A2, A4, 4);
    int microphonePin = 2 ;
    int microphoneValue = 0;


    void setup()
    {
    pinMode (segmentsIndicator2, OUTPUT) ;
    pinMode (microphonePin, INPUT) ;
    segmentsIndicator2.displayVal(-22, 1); //— Подготавливаем значение первый параметр - значение, второй - положение точки

    }



    void loop()
    {

    segmentsIndicator2.displayRefresh(); //— Отображаем значение на индикаторе.
    delay(5); //— Дадим время разгорется сегментам индикатора
    }
    {
    microphoneValue = digitalRead(microphonePin); // чтение значения с микрофона
    if (microphoneValue == HIGH) // когда на входе высокий уровень
    //(есть звук) светодиод горит
    {
    digitalWrite ( segmentsIndicator2 , HIGH);
    {
    else
    {
    digitalWrite ( segmentsIndicator2 , LOW);
    }
    }
     
  2. Rassamaha78

    Rassamaha78 Нерд

    Вы микрофон то каким макаром к Ардуине подключили ? Если напрямую, то уровня сигнала не хватит для установки уровня логической единицы на цифровом входе ( microphoneValue = digitalRead(microphonePin); ). Нужен как минимум операционник и лучше использовать аналоговый вход, тогда и уровень сигнала можно отслеживать.
     
  3. a1000

    a1000 Гик

    Ну может у него готовый модуль. Что-то типа такого
    [​IMG]
     
  4. Rassamaha78

    Rassamaha78 Нерд

    Может, а может и не может ! Я потому и спросил, что начинать диагностику надо с этого момента.
     
  5. Daniil

    Daniil Гик

    Не лишние ли фигурные скобки?
    Как написали выше, микрофон цифровой или аналоговый? схему в студию.
     
  6. Rassamaha78

    Rassamaha78 Нерд

    Вот за что не люблю Си подобные языки - так это за их мерзкий синтаксис... А впрочем ладно, не будем мучать ТС:

    Код (C++):
    void loop()
    {
    segmentsIndicator2.displayRefresh(); //— Отображаем значение на индикаторе.
    delay(5); //— Дадим время разгорется сегментам индикатора
    microphoneValue = digitalRead(microphonePin); // чтение значения с микрофона
    if (microphoneValue == HIGH) // когда на входе высокий уровень
    //(есть звук) светодиод горит
    {
    digitalWrite ( segmentsIndicator2 , HIGH);
    }
      else
    {
    digitalWrite ( segmentsIndicator2 , LOW);
    }
    }
     
  7. ostrov

    ostrov Гуру

    Ну и где тут выключение через некоторое время?

    И вообще что за дикая библа используется для индикатора?
     
  8. Rassamaha78

    Rassamaha78 Нерд

    Я лишь поправил из того, что есть)
    ТС, если с задержкой, то:
    Код (C++):
    void loop()
    {
    segmentsIndicator2.displayRefresh(); //— Отображаем значение на индикаторе.
    delay(5); //— Дадим время разгорется сегментам индикатора
    microphoneValue = digitalRead(microphonePin); // чтение значения с микрофона
    if (microphoneValue == HIGH) // когда на входе высокий уровень
    //(есть звук) светодиод горит
    {
    digitalWrite ( segmentsIndicator2 , HIGH);
    delay(5000); //— Задержка включенного индикатора
    digitalWrite ( segmentsIndicator2 , LOW);
    }
      else
    {
    digitalWrite ( segmentsIndicator2 , LOW);
    }
    }
    Это если опять же с сохранением оригинального когда, но его можно упростить:

    Код (C++):

    void setup()
    {
    pinMode (segmentsIndicator2, OUTPUT) ;
    pinMode (microphonePin, INPUT) ;
    segmentsIndicator2.displayVal(-22, 1); //— Подготавливаем значение первый параметр - значение, второй - положение точки
    digitalWrite ( segmentsIndicator2 , LOW); //Изначально индикатор отключен
    }

    void loop()
    {
      microphoneValue = digitalRead(microphonePin); // чтение значения с микрофона

    if (microphoneValue == HIGH) // когда на входе высокий уровень
    //(есть звук) светодиод горит
    {
    segmentsIndicator2.displayRefresh(); //— Отображаем значение на индикаторе.
    digitalWrite ( segmentsIndicator2 , HIGH);
    delay(5000); //— Задержка включенного индикатора
    digitalWrite ( segmentsIndicator2 , LOW);
    }
    }
    Но такой код сгодится разве что в ознакомительных целях, негоже оперировать "делеями" для длительных задержек. Переходит на millis() или таймеры)

    Тоже улыбнуло, но вникать в подробности лень)
     
  9. parovoZZ

    parovoZZ Гуру

    Что взамен предложишь?
     
    Gippopotam и ZAZ-965 нравится это.
  10. ZAZ-965

    ZAZ-965 Гик

    Поддержу вопрос, расскажите о любимом синтаксическом сахаре. В понедельник самое время для споров С\С++ vs XXX, пока производная брожения сахара не выветрилась.
     
  11. ostrov

    ostrov Гуру

    Вообще, если с таким форматированием, то синтаксис реально мерзкий.
     
  12. parovoZZ

    parovoZZ Гуру

    Зачет))))!