用Arduino语言写一个三路抢答器代码,要求有数码管上数字显示蜂鸣器响声以及控制led灯的亮灭
时间: 2023-04-04 21:03:21 浏览: 140
感谢您的提问。以下是Arduino语言写一个三路抢答器的代码:
int ledPin1 = 2; // 第一组LED灯的引脚
int ledPin2 = 3; // 第二组LED灯的引脚
int ledPin3 = 4; // 第三组LED灯的引脚
int buzzerPin = 5; // 蜂鸣器的引脚
int digitPins[] = {6, 7, 8, 9}; // 数码管的引脚
int digits[] = {0, 0, 0, 0}; // 数码管显示的数字
int button1 = 10; // 第一组按钮的引脚
int button2 = 11; // 第二组按钮的引脚
int button3 = 12; // 第三组按钮的引脚
int lastButton = 0; // 上一次按下的按钮
int lastTime = 0; // 上一次按下按钮的时间
int interval = 1000; // 抢答器的时间间隔
void setup() {
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
pinMode(buzzerPin, OUTPUT);
pinMode(button1, INPUT_PULLUP);
pinMode(button2, INPUT_PULLUP);
pinMode(button3, INPUT_PULLUP);
for (int i = 0; i < 4; i++) {
pinMode(digitPins[i], OUTPUT);
}
}
void loop() {
int button = 0;
if (digitalRead(button1) == LOW) {
button = 1;
} else if (digitalRead(button2) == LOW) {
button = 2;
} else if (digitalRead(button3) == LOW) {
button = 3;
}
if (button != 0 && button != lastButton) {
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, LOW);
digitalWrite(ledPin3, LOW);
digitalWrite(buzzerPin, LOW);
digits[3 - lastButton] = 0;
lastButton = button;
lastTime = millis();
}
if (button == lastButton && millis() - lastTime >= interval) {
digitalWrite(ledPin1, HIGH);
digitalWrite(ledPin2, HIGH);
digitalWrite(ledPin3, HIGH);
digitalWrite(buzzerPin, HIGH);
digits[3 - lastButton] = 1;
}
for (int i = 0; i < 4; i++) {
digitalWrite(digitPins[i], LOW);
switch (digits[i]) {
case 0:
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, LOW);
digitalWrite(ledPin3, LOW);
break;
case 1:
digitalWrite(ledPin1, HIGH);
digitalWrite(ledPin2, LOW);
digitalWrite(ledPin3, LOW);
break;
}
digitalWrite(digitPins[i], HIGH);
}
}
希望对您有所帮助。