#include <LiquidCrystal_I2C.h> #include <Keypad.h> #include <Ultrasonic.h> #include <Tone.h> #define Trig 13 #define Echo 12 LiquidCrystal_I2C lcd(0*27,16,2); Ultrasonic ultrasonic(Trig, Echo); const byte rows = 4; const byte cols = 4; char keys[rows][cols] = { {'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'}, {'*', '0', '#', 'D'} }; byte rowPins[rows] = {2, 3, 4, 5}; byte colPins[cols] = {6, 7, 8, 9}; Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, rows, cols); int distance = 0; int alarmValue = 0; const int buzzerPin = 10; Tone buzzer; void setup() { lcd.begin(16, 2); buzzer.begin(buzzerPin); Serial.begin(9600); } void loop() { distance = ultrasonic.read(); char key = keypad.getKey(); if (key == '*') { // 执行确认输入功能 Serial.println("确认输入"); } else if (key != NO_KEY) { // 处理其他按键输入 Serial.println(key); } lcd.clear(); lcd.setCursor(0, 0); lcd.print("Distance: "); lcd.print(distance); lcd.setCursor(0, 1); lcd.print("Alarm: "); lcd.print(alarmValue); if (distance < alarmValue) { buzzer.play(1000); } else { buzzer.stop(); } delay(100); }
时间: 2024-02-01 07:02:50 浏览: 95
ARM-clock.rar_2410keypad.h_clockarm_windows 8
这个程序看起来不错,但是有一个问题:在程序中没有任何地方更新alarmValue的值,因此它将一直保持为0,蜂鸣器也不可能发出响声。为了使程序正常工作,需要在按键输入时更新alarmValue的值。可以使用以下代码来实现这个功能:
```
if (key >= '0' && key <= '9') {
alarmValue = key - '0';
Serial.print("Alarm value set to ");
Serial.println(alarmValue);
}
```
把这段代码加到程序中的if语句中,就可以在按下数字键时更新alarmValue的值了。
阅读全文