利用单片机控制4个按键和4个发光二极管,设计一个4人代码
时间: 2024-03-22 17:42:12 浏览: 73
以下是一个基于Arduino的示例代码,可以实现4人游戏系统的功能。这个代码使用了随机数生成器来选择一个玩家的发光二极管熄灭,并且使用了一个计时器来控制游戏的节奏。你可以根据自己的需要进行修改和优化。
```
const int LED_PIN[] = {2, 3, 4, 5};
const int BUTTON_PIN[] = {6, 7, 8, 9};
const int PLAYER_NUM = 4;
const int GAME_DURATION = 5000; // 游戏持续时间(毫秒)
const int MIN_WAIT_TIME = 500; // 最小等待时间(毫秒)
const int MAX_WAIT_TIME = 3000; // 最大等待时间(毫秒)
bool is_playing[PLAYER_NUM]; // 玩家是否正在游戏中
bool is_button_pressed[PLAYER_NUM]; // 玩家是否按下了按钮
bool is_led_on[PLAYER_NUM]; // 发光二极管是否亮起
int winner = -1; // 获胜者
int led_to_turn_off = -1; // 需要熄灭的发光二极管
int remaining_players = PLAYER_NUM; // 剩余玩家数
int time_to_wait = 0; // 等待时间
void setup() {
for (int i = 0; i < PLAYER_NUM; i++) {
pinMode(LED_PIN[i], OUTPUT);
pinMode(BUTTON_PIN[i], INPUT_PULLUP);
}
randomSeed(analogRead(0)); // 初始化随机数生成器
Serial.begin(9600); // 用于调试的串口输出
}
void loop() {
if (winner == -1) {
// 游戏未结束
if (remaining_players == 1) {
// 只剩下一个玩家,游戏结束
for (int i = 0; i < PLAYER_NUM; i++) {
if (is_playing[i]) {
winner = i;
break;
}
}
Serial.print("Winner: ");
Serial.println(winner);
} else if (time_to_wait == 0) {
// 等待时间到,选择一个玩家的发光二极管熄灭
do {
led_to_turn_off = random(PLAYER_NUM);
} while (!is_playing[led_to_turn_off] || !is_led_on[led_to_turn_off]);
digitalWrite(LED_PIN[led_to_turn_off], LOW);
is_led_on[led_to_turn_off] = false;
remaining_players--;
time_to_wait = random(MIN_WAIT_TIME, MAX_WAIT_TIME + 1);
Serial.print("Turn off: ");
Serial.print(led_to_turn_off);
Serial.print(", wait: ");
Serial.println(time_to_wait);
} else {
// 正在等待
time_to_wait -= 10;
delay(10);
}
} else {
// 游戏结束
for (int i = 0; i < PLAYER_NUM; i++) {
digitalWrite(LED_PIN[i], HIGH);
}
}
// 检测按键是否按下
for (int i = 0; i < PLAYER_NUM; i++) {
if (is_playing[i] && !is_button_pressed[i] && digitalRead(BUTTON_PIN[i]) == LOW) {
is_button_pressed[i] = true;
if (i == led_to_turn_off) {
// 熄灭的发光二极管属于该玩家,该玩家被淘汰
is_playing[i] = false;
Serial.print("Eliminated: ");
Serial.println(i);
} else {
// 玩家按对了,重新开始计时
time_to_wait = 0;
}
}
}
}
```
阅读全文