Как улучшить время отклика этого светодиода со звуковым управлением?
Я написал следующий код для включения светодиода при хлопке (с использованием звукового датчика), который я подключил через сопротивление 330 Ом к контакту номер 4.
Однако, когда я хлопаю один раз, близко к звуковому датчику, светодиод не загорается. Но светодиод загорается только в том случае, если я обеспечиваю длительное воздействие звука (более 6 секунд) на звуковой датчик.
Как мне это улучшить, чтобы даже если я хлопну один раз в течение секунды, светодиод загорелся?
int soundSensor=10;
int LED=4;
void setup()
{
Serial.begin(9600);
pinMode(soundSensor,INPUT);
pinMode(LED,OUTPUT);
}
void loop()
{
int SensorData=digitalRead(soundSensor);
if(SensorData==1)
{
digitalWrite(LED,HIGH);
delay(3000);
Serial.println("LOUD, LOUD");
delay(1000);
}
else
{
digitalWrite(LED,LOW);
Serial.println("SLOW, SLOW");
delay(1000);
}
}
@Haider Ali, 👍5
3 ответа
Я думаю, проблема в том, когда вы проверяете датчик. Если вы хлопаете точно в момент проверки, он будет светиться, даже если хлопать в течение 1 мс, но если он проверяет между двумя хлопками, он не обнаруживает это.
Поэтому проверяйте чаще (уменьшайте задержки) и проверяйте как можно больше обнаружений звука в течение одной секунды.
Или, как предлагает JRE ниже, используйте прерывание, это даже лучше, но требует немного больше навыков программирования. Тем не менее прерывания часто используются в программировании микроконтроллеров, поэтому стоит это проверить.
В зависимости от датчика, простая модификация с последовательным диодом для обнаружения импульса и удержания медленного затухания, скажем, от 0,01 мкФ до 10 МОм до 0 В, обнаружит первый раз и растянет импульс ~ 0,01 мкФ*10 МОм = 0,1 с
Прерывания полезны для автоматического выполнения действий в программах микроконтроллера и могут помочь решить проблемы синхронизации. Хорошие задачи для использования прерывания могут включать чтение вращающегося энкодера или мониторинг пользовательского ввода (например, хлопков).
Использование функции attachInterrupt() — вот выход!
https://www.arduino.cc/reference/en/language/functions/external-interrupts/attachinterrupt/
- Почему мой код обрабатывает звуковой датчик так, как будто он всегда ВЫСОКИЙ?
- помогите с циклом
- Я не могу установить правильную конфигурацию звукового модуля
- Есть ли способ воспроизводить звуки с Arduino без использования звукового экрана?
- Питание светодиодной ленты - Сколько ампер?
- Несколько условий оператора if
- Светодиоды: разница между общим анодом и общим катодом
- Светодиод L продолжает гореть