Почему мой выключатель срабатывает без нажатия кнопки?

Я здесь новичок, извините, если форматирование некорректно.

int button = 2;
int relay = 3;
int speaker = 4;

void setup() 
{

  pinMode(button, INPUT_PULLUP);
  pinMode(relay, OUTPUT);
  pinMode(speaker, OUTPUT);

}

void loop() 
{
  if(digitalRead(button) == 0)
  {
    digitalWrite(relay, HIGH);
    tone (speaker, 100, 300);
    delay (3000);
  }
  else
  {
    digitalWrite(relay, LOW);
  }
}

Я хочу, чтобы реле срабатывало и оставалось открытым только пока нажата кнопка. Однако по какой-то причине прикосновение к контакту 2 вызывает срабатывание реле и звук, даже если я не подключаю его к земле.

Если я уберу тон (динамик, 100, 300); он сработает только при нажатии кнопки, соединяющей контакт 2 с землей, но, очевидно, не воспроизведет тон.

, 👍0

Обсуждение

как подключен динамик?, @Juraj

@Gerben, извините, на доске все было правильно, но я неправильно скопировал сюда., @BreakoutOfTheBox

@Juraj, Красный провод подключен к контакту 4, а черный — к GND на POWER., @BreakoutOfTheBox

это пьезодинамик? потому что обычный динамик не должен подключаться без резистора?, @Juraj

@juraj Пьезоэлектрический преобразователь — это динамик, однако проблема не может быть только в нем, так как даже если я не подключаю динамик, ошибку вызывает только код., @BreakoutOfTheBox

Я не вижу в вашем вопросе никаких красных или черных проводов., @Nick Gammon


1 ответ


Лучший ответ:

0

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

Прикосновение к штифту похоже на подключение его к земле с помощью резистора (человеческое тело является проводником). Он может быть или не быть сильнее подтягивающего резистора.

Если я уберу тон (динамик, 100, 300); он срабатывает только тогда, когда кнопка, соединяющая контакт 2 с землей, нажата, но, очевидно, не воспроизвести тон.

Активация соседнего контакта влияет на подтяжку контакта 2. Попробуйте внешнюю подтяжку контакта 2.

,