Помогите,умоляю.Хочу сделать чтобы когда я стучал по столу или в ладоши хлопал ,благодаря микрофону семисегментный четырехразрядный индикатор включался а потом через некоторое время выключался Вот скеч,но он не работает, ничего не могу сделать. #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); } }
Вы микрофон то каким макаром к Ардуине подключили ? Если напрямую, то уровня сигнала не хватит для установки уровня логической единицы на цифровом входе ( microphoneValue = digitalRead(microphonePin); ). Нужен как минимум операционник и лучше использовать аналоговый вход, тогда и уровень сигнала можно отслеживать.
Вот за что не люблю Си подобные языки - так это за их мерзкий синтаксис... А впрочем ладно, не будем мучать ТС: Код (C++): void loop() { segmentsIndicator2.displayRefresh(); //— Отображаем значение на индикаторе. delay(5); //— Дадим время разгорется сегментам индикатора microphoneValue = digitalRead(microphonePin); // чтение значения с микрофона if (microphoneValue == HIGH) // когда на входе высокий уровень //(есть звук) светодиод горит { digitalWrite ( segmentsIndicator2 , HIGH); } else { digitalWrite ( segmentsIndicator2 , LOW); } }
Ну и где тут выключение через некоторое время? И вообще что за дикая библа используется для индикатора?
Я лишь поправил из того, что есть) ТС, если с задержкой, то: Код (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() или таймеры) Тоже улыбнуло, но вникать в подробности лень)
Поддержу вопрос, расскажите о любимом синтаксическом сахаре. В понедельник самое время для споров С\С++ vs XXX, пока производная брожения сахара не выветрилась.