Зуммер+кнопка+arduino

Я хочу остановить звук зуммера после того, как нажму кнопку. Я попробовал код, но когда кнопка не нажата, зуммер продолжает издавать звук. Как я могу это исправить?

const int pin_contact= 6;
const int buzzer = 9; //зуммер на вывод arduino 9

void setup(){
  pinMode(buzzer, OUTPUT); // Установить зуммер - pin 9 в качестве выходного
  pinMode(pin_contact, INPUT);
  Serial.begin(9600);
}

void loop() {
  tone(buzzer, 200);
 
  int stare_contact = digitalRead(pin_contact);
  if (stare_contact == HIGH) {
    noTone(buzzer); 
  }
}

, 👍2

Обсуждение

я попытался сделать снимок экрана, но не смог загрузить его в комментарии, поэтому я использовал ссылку. Но в конце концов мне это удалось, используя первый код и добавив в схему 2 резистора. Спасибо!, @Biancaaa

Если один из ответов вам помог, вы можете проголосовать за него. Если ни то, ни другое не помогло вам, и вы думаете, что можете дать ответ, который кто-то другой сочтет полезным, вы можете ответить на свой собственный вопрос. Если вопрос и без ответа, и без ответа, то, вероятно, лучше его удалить., @timemage

Это хорошо знать. Вы знаете, что я пытался проголосовать за ответ, но мне нужно заработать репутацию 15, чтобы проголосовать за публикации., @Biancaaa

Ах, ну вот тебе и 10., @timemage

Вы перезапускаете звуковой сигнал на каждой итерации " loop ()", поэтому, как только вы перестаете нажимать кнопку, звук запускается снова. Самым простым решением было бы переместить команду "тональный сигнал (зуммер, 200);" из "цикла ()" и поместить ее в конце " настройка ()". Также убедитесь, что ваша кнопка действительно показывает “ВЫСОКИЙ” при нажатии. Многие кнопки активны “НИЗКО”., @StarCat


2 ответа


1

Попробуй вот это

int LEDState = 1;
int SwitchPin = 6;
int LEDPIN = 9;

void setup()
{
  pinMode(LEDPIN,OUTPUT);
  pinMode(SwitchPin,INPUT);
  digitalWrite(LEDPIN,LEDState);
}

void loop()
{

  int SwitchState = digitalRead(SwitchPin);

  if(LEDState==1 && SwitchState==HIGH){
   LEDState = 0; 
  }

  digitalWrite(LEDPIN,LEDState);
    delay(10); 
}
,

Извини, Джсотла, я уже все исправил... @Biancaaa Я исправил код и попробовал использовать светодиод, кроме зуммера, потому что в настоящее время зуммер недоступен в моих коллекциях, в конце концов, попробуйте этот код, этот код очень хорошо работал для меня, используя светодиод в качестве выходного индикатора вместо зуммера, @Subha Jeet Sikdar


1

Ваш зуммер активен низко? попробуйте этот код ниже. он будет переключать вывод зуммера.

const int buzzerPin = 9;
const int buttonPin = 6; 
int buzzerState = 1;
int buttonState;
int buttonTemp = 0;

void setup() {
  pinMode(buzzerPin, OUTPUT);
  pinMode(buttonPin, INPUT);
  Serial.begin(9600);
}

void loop() { 
  buttonState = digitalRead(buttonPin); 
  digitalWrite(buzzerPin,buzzerState);
  if (buttonState == HIGH && buttonTemp == 0){
    Serial.print("Buzzer toggle to : ");
    if (buzzerState) {
        Serial.println("LOW");
        buzzerState = 0;
    } else {
        Serial.println("HIGH");
        buzzerState = 1;
    }
    buttonTemp = 1;
  } else if (buttonState == LOW) {
    buttonTemp = 0;
  }
}
,