Почему мой код обрабатывает звуковой датчик так, как будто он всегда ВЫСОКИЙ?

У меня есть звуковой датчик, который работал отлично, так как я использовал его как датчик хлопка, чтобы включать и выключать свет. Однако я попытался изменить код, чтобы он работал немного плавнее, и по какой-то причине он перестал работать. Затем я попытался написать очень простой скрипт, позволяющий включать и выключать его с помощью всего одного хлопка, но теперь он обрабатывает звуковой датчик так, как будто он всегда вводит HIGH. Есть идеи, почему это может происходить?

Примечание: я увеличил чувствительность и вижу, что датчик звука не всегда ВЫСОКАЯ. Даже когда звук слишком высок, чтобы услышать, как я хлопаю в ладоши, он все равно включает и выключает светодиод, как если бы приведенное ниже выражение if всегда было истинным.

int SENSOR = 2;
int LED = 13;


void setup() {
  // put your setup code here, to run once:
  pinMode(LED, OUTPUT);
  pinMode(SENSOR, INPUT);
}

void loop() {
  // put your main code here, to run repeatedly:

  if(digitalRead(SENSOR) == HIGH){
    digitalWrite(LED, (digitalRead(LED) == HIGH ? LOW : HIGH));
    delay(100);
  }
}

Это модуль датчика звука, который я использую: Модуль микрофона обнаружения звука Robojax

, 👍0

Обсуждение

датчики не выводят ВЫСОКИЙ или НИЗКИЙ, их выход - числа..., @ElectronSurf

верните свой код туда, где он работал, и снова начните переписывать код, @jsotola

Проблема в том, что я не могу вернуться к своему старому коду, поэтому мне нужно его переписать., @JeffBrin

Кроме того, даже если я использую 1 или 0, у меня такая же проблема., @JeffBrin

Какой у вас "датчик звука"?, @Majenko

Прошу прощения за всю путаницу, я только что прочитал о том, как это работает, и, по-видимому, он выдает низкий уровень, когда чувствует звук, странно, потому что он работал раньше, когда я проверял вход HIGH. В любом случае, моя проблема решена, спасибо за предложения., @JeffBrin

одна вещь, которая может помочь вам в написании кода в будущем... `относитесь к моему звуковому датчику так, как будто он всегда ВЫСОКИЙ'.... это абсолютно неправда ..... просто ваш код ничего не делает, когда датчик НИЗКИЙ, @jsotola

@jsotola Не совсем. Он переключает светодиод, когда датчик показывает HIGH, с задержкой 100 мс между каждым переключением. Когда датчик не показывает HIGH, он не переключает светодиод. Таким образом, он делает что-то другое, когда датчик ВЫСОКИЙ по сравнению с НИЗКИМ., @Nick Gammon


1 ответ


2

Переключатель микрофона robojax, который я использовал, выдает НИЗКИЙ уровень, когда воспринимает звук, а не ВЫСОКИЙ, как я предполагал. Решение состояло в том, чтобы просто заменить все операторы if, проверяющие вход HIGH, на LOW.

примечание: извините, что не посмотрели в микрофон раньше.

,