打地鼠机可以使用Arduino等微控制器进行编程实现。以下是一个简单的打地鼠机示例,使用LED灯和按钮来模拟地鼠和地洞,并通过串口输出结果。
硬件连接
LED灯 :三个LED灯分别接在数字口9、10、11上,用于模拟地鼠出现的位置。按钮:
三个按钮分别接在数字口3、4、5上,用于模拟击打地鼠。
电源:
确保电源的正极接在Vcc,负极接在GND。
编程实现
```cpp
const int ledPins[] = {9, 10, 11}; // LED灯接在数字口9、10、11
const int buttonPins[] = {3, 4, 5}; // 按钮接在数字口3、4、5
int ledIndex = 0; // 当前亮起的LED灯索引
int buttonIndex = 0; // 当前按下的按钮索引
int hits = 0; // 击中的次数
void setup() {
Serial.begin(9600); // 初始化串口通信,波特率9600
for (int i = 0; i < 3; i++) {
pinMode(ledPins[i], OUTPUT); // 设置LED灯为输出模式
digitalWrite(ledPins[i], LOW); // 初始时LED灯关闭
}
for (int i = 0; i < 3; i++) {
pinMode(buttonPins[i], INPUT_PULLUP); // 设置按钮为输入模式,并启用内部上拉电阻
}
}
void loop() {
int buttonState = digitalRead(buttonPins[buttonIndex]); // 读取按钮状态
if (buttonState == LOW) { // 按钮被按下
digitalWrite(ledPins[ledIndex], HIGH); // 点亮对应的LED灯
hits++; // 击中次数加1
Serial.print(" LED ");
Serial.print(ledIndex);
Serial.print(" right ");
buttonIndex = (buttonIndex + 1) % 3; // 切换到下一个按钮
} else {
digitalWrite(ledPins[ledIndex], LOW); // 关闭对应的LED灯
}
if (buttonIndex == 0) { // 每轮结束后
Serial.println(); // 换行
ledIndex = (ledIndex + 1) % 3; // 切换到下一个LED灯
}
delay(100); // 延时100毫秒
}
```
代码解释
初始化
`setup()`函数中,初始化串口通信,设置LED灯和按钮的引脚模式。
`ledPins`数组存储LED灯的引脚号,`buttonPins`数组存储按钮的引脚号。
主循环
`loop()`函数中,读取当前按钮的状态。
如果按钮被按下(状态为LOW),则点亮对应的LED灯,增加击中次数,并通过串口输出“LED 编号 right”。
按钮按下后,切换到下一个按钮。
每轮结束后,切换到下一个LED灯。
延时100毫秒以控制游戏节奏。
运行与测试
1. 上传代码到Arduino开发板。
2. 连接LED灯和按钮到Arduino开发板。
3. 打开串口监视器,波特率设置为9600。
4. 运行程序,观察串口输出和LED灯的状态。
通过以上步骤,你可以实现一个简单的打地鼠机。你可以根据需要进一步扩展功能,例如增加计分、地鼠说话等。