Что не так с моим кодом? Сенсорный модуль LED2 всегда горит

Я получил этот код от robojax.com. я выполнил все шаги, но когда я пытаюсь хлопнуть в ладоши, он не выключается и не включается но когда я дую на датчик звука, он реагирует и включает свет (пожалуйста, помогите, мне очень нужен этот проект для моего экзамена)

int soundInPin = 2;// подключаем выход к DO звукового модуля
int relayPin = 8;// Подключен к реле или зуммеру (или светодиоду)
int extra5V = 12;// определяем контакт для дополнительных дополнительных 5В

// не изменяйте значения ниже
int val = 0; // звуковое значение от контакта 2
int relayON = 0;//статус освещения
int heard = 0;//статус прослушивания звука


void setup() {

// Пошаговый курс Robojax Arduino http://robojax.com/L/?id=338
  Serial.begin(9600);
  pinMode(soundInPin, INPUT_PULLUP); 
  pinMode(relayPin, OUTPUT);
  pinMode(extra5V,OUTPUT);// установить дополнительные 5V в качестве выхода
  digitalWrite(extra5V,HIGH);// подайте на вывод extra5V HIGH, чтобы получить 5V

}

void loop() {
// Пошаговый курс Robojax Arduino http://robojax.com/L/?id=338
  val = digitalRead(soundInPin);// прочитать звуковой вывод

  if(val == HIGH && relayON == LOW){

    heard = 1-heard;// переключить значение "услышал" от ВЫСОКОГО до НИЗКОГО или от НИЗКОГО до ВЫСОКОГО
    delay(100);
  }    
// Пошаговый курс Robojax Arduino http://robojax.com/L/?id=338
  relayON = val;// сохраняем значение вывода 2

      if(heard == HIGH){
        Serial.println("Light ON");
        digitalWrite(relayPin, LOW); // включить реле
       
      }else{
        Serial.println("Light OFF");
        digitalWrite(relayPin, HIGH);// выключаем реле
   
      }     


// Пошаговый курс Robojax Arduino http://robojax.com/L/?id=338
  delay(100);
} 

, 👍-1

Обсуждение

Добро пожаловать в Ардуино: SE. Если вы хотите, чтобы мы могли вам помочь, нам нужно посмотреть, как вы соединили оборудование вместе, а также ваш код., @sempaiscuba

Есть ли что-то на плате звукового датчика для регулировки порога? Как потенциометр?, @chrisl

Без схемы сложно понять, чего ожидать от soundInPin. Тем не менее, проверяя код, если «val» изменяется на 1, «heard» изменяется на 1, «relayON» изменяется на 1, светодиод включается, тогда светодиод никогда не выключается, потому что «relayON» равен 1, что не позволить «услышанному» снова измениться. Таким образом, несмотря на то, что делает аппаратное обеспечение, код, похоже, нуждается в доработке., @st2000

Здравствуйте, мистер Миф! Начнем с основ: 1. Что за плата Arduino? 2. Что вы пытаетесь сделать (объясните, пожалуйста) и 3. (Как уже говорили другие) как выглядит ваша схема?, @Austin

Вы видели этот ответ? https://arduinoprosto.ru/q/54495/37523, @VE7JRO


1 ответ


1

Это не ответ, поэтому я удалю его после того, как вы его прочитаете.

Поскольку вы новичок, вот комментарий о стиле программирования.

Ваш код выглядит очень загроможденным и подавляющим, потому что комментарии сделаны частью строк программы.

Между этими двумя строками есть разница в удобочитаемости.

digitalWrite(extra5V,HIGH);// поверните дополнительный контакт 5V в HIGH, чтобы получить 5V

digitalWrite(extra5V,HIGH); // переводим дополнительный контакт 5V в HIGH, чтобы получить 5V

Комментарии предназначены для будущего, например, в следующем году, чтобы напомнить вам, что делает программа.

Кроме того, следующие две строки находятся на одном уровне отступа

  relayON = val;     // сохраняем значение вывода 2

      if(heard == HIGH){

и должно быть

  relayON = val;     // сохраняем значение вывода 2

  if(heard == HIGH){

С некоторыми изменениями форматирования ваш код может выглядеть примерно так.

int soundInPin =  2;                       // подключаем выход к звуковому модулю DO
int relayPin   =  8;                       // Подключен к реле или зуммеру (или светодиоду)
int extra5V    = 12;                       // определяем контакт для дополнительных дополнительных 5В

// не изменять значения ниже

int val        =  0;                       // звуковое значение от контакта 2
int relayON    =  0;                       // световой статус
int heard      =  0;                       // состояние прослушивания звука


void setup() {                             // Пошаговый курс Robojax Arduino http://robojax.com/L/?id=338

  Serial.begin(9600);

  pinMode(soundInPin, INPUT_PULLUP);
  pinMode(relayPin,   OUTPUT);
  pinMode(extra5V,    OUTPUT);             // установить дополнительные 5 В в качестве выхода

  digitalWrite(extra5V,HIGH);              // переводим дополнительный контакт 5V в HIGH, чтобы получить 5V

}

void loop() {                              // Пошаговый курс Robojax Arduino http://robojax.com/L/?id=338

  val = digitalRead(soundInPin);           // прочитать звуковой контакт

  if (val == HIGH && relayON == LOW) {

    heard = 1-heard;                       // переключаем значение "услышано" от ВЫСОКОГО до НИЗКОГО или от НИЗКОГО до ВЫСОКОГО
    delay(100);

  }                                        // Пошаговый курс Robojax Arduino http://robojax.com/L/?id=338

  relayON = val;                           // сохраняем значение вывода 2

  if (heard == HIGH) {

    Serial.println("Light ON");
    digitalWrite(relayPin, LOW);           // включить реле

  } else {

    Serial.println("Light OFF");
    digitalWrite(relayPin, HIGH);          // выключаем реле

  }
                                           // Пошаговый курс Robojax Arduino http://robojax.com/L/?id=338
  delay(100);
}
,