Нужна помощь с состоянием кнопки

Я создаю программу, которая работает как фортепиано. У меня четыре кнопки, пьезо-жучок и ЖК-экран. У меня небольшая проблема с состоянием кнопки.

Вот моя программа: когда я ее запускаю, пьезо-жужжание не перестает издавать звук. Предполагается, что это должно работать так: когда я нажимаю зеленую кнопку, пьезоэлемент должен издавать звук «до», но это не так. Кто-нибудь может сказать мне, что я сделал не так?

код:

#include <LiquidCrystal.h>

LiquidCrystal lcd(13, 12, 11, 10, 9, 8);

int buttonyellow = 3; 
int buttonred = 4;
int buttongreen = 5;
int buttonblue = 6;

int C,D,E,F;  
int buzz = 7;

int buttonstate;

void setup()
{
  lcd.begin(16, 2);

  lcd.print("hello, world!");

  Serial.begin(9600);
  pinMode(buttonyellow,INPUT);
  pinMode(buttonred,INPUT);
  pinMode(buttongreen,INPUT);
  pinMode(buttonblue,INPUT);
}

void loop()
{
  lcd.setCursor(0, 1);

  lcd.print(millis() / 1000);

  C = digitalRead(buttonyellow);
  D = digitalRead(buttonred);
  E = digitalRead(buttongreen);
  F = digitalRead(buttonblue);

  buttonstate = digitalRead(C); 
  if(buttonstate == HIGH){ 
    tone(buzz,523); 
  }  else if ( buttonstate == LOW) {
    tone(buzz,1000); 
  }else{
   noTone(buzz); 
  }  
  delay(50); 
}

, 👍0

Обсуждение

что такое «buttonstate = digitalRead(C);»? if (C == HIGH){ был план?, @Juraj

внимательно посмотрите на свой блок if-else..... какое значение buttonstate позволит запустить noTone(buzz);?, @jsotola


1 ответ


1

Как указал jsotola, в вашем коде есть ошибка. Удалить строку

buttonstate = digitalRead(C)

и заменить

if(buttonstate == HIGH)

с

if(C == HIGH)

Более того, предлагаю вам взглянуть на пример устранения дребезга, чтобы сделать звук «более плавным», т.е. не трястись из-за кнопки

,