Arduino 在构建爱好项目和游戏方面非常受欢迎,我们之前使用 Arduino 构建过贪吃蛇游戏、乒乓球游戏、太空竞赛游戏等。今天我们正在使用 Arduino- Buzz 线游戏或 Steady 手游戏构建更流行的游戏。
对于这个项目,我们将使用 Arduino Uno、蜂鸣器和两根铝线。一个16x2 的 LCD也用于显示游戏状态。迷宫线的两端将连接到 Arduino 的数字引脚 2 和 3,手柄线连接到 Arduino 的接地引脚。数字引脚定义为 INPUT_PULLUP 引脚。所以当手柄线接触到迷宫线时,数字引脚状态变为低电平,蜂鸣器发出声音。
二极管连接在迷宫线的末端,因此当您经过该二极管并用圆形手柄线触摸迷宫线时,只有一个引脚(引脚 3)会变低。在这种情况下,LCD 上将显示祝贺文字(做得好)。
所需组件
阿杜诺
铝线
16x2 液晶
I 2 C 模块
面包板
蜂鸣器
二极管
电路原理图
上面给出了 Arduino Buzz Wire Game 的电路图。I2C 模块的 SCL 和 SDA 引脚连接到 Arduino 的 A5 和 A4 引脚,而 I2C 模块的 V CC和 GND 引脚连接到 Arduino 的 5V 和 GND 引脚。蜂鸣器的正轨连接到 Arduino 的数字引脚 4,负轨连接到 GND。切割铝线并将其弯曲成锯齿形。在电线的一端焊接一个二极管。然后剪下另一根电线做一个把手,并将一端弯曲成一个环。
16x2 LCD 也可以在不使用 I2C 模块的情况下与 Arduino连接。
将 Arduino 的 D2 和 D3 引脚连接到 Zig-Zag 线的两端,并将手柄线连接到 Arduino 的 GND 引脚。
代码说明
此Arduino Buzz Wire 游戏的完整代码在文档末尾给出。
通过包含 LCD 模块的库文件开始您的代码。LiquidCrystal_I2C.h 库用于 Arduino 和 LCD 模块之间的 I2C 通信。
#include
之后,定义蜂鸣器的 Arduino 引脚、电线的起点和电线的终点。
常量 int startPin = 2; 常量 int endPin = 3; 常量 int 蜂鸣器 = 4;
然后定义两个变量start & end_。这些变量将用于保存电线的读数。
整数开始,结束_;
现在将蜂鸣器引脚定义为输出,将接线引脚定义为INPUT_PULLUP。Arduino 有内部上拉电阻,其值约为 20k 欧姆。这些电阻可以使用INPUT_PULLUP在内部连接。定义 INPUT_PULLUP 在功能上与在引脚和 +5V 之间连接一个 ~20k 欧姆电阻器相同。
pinMode(蜂鸣器,输出); pinMode(startPin, INPUT_PULLUP); pinMode(startPin, INPUT_PULLUP);
在void 循环内,读取线引脚的状态。
开始 = digitalRead(startPin); end_ = digitalRead(endPin);
现在比较线针的读数。如果两个引脚都为低电平,则表示您已经触摸了电线,因此蜂鸣器会发出声音,如果电线的起始引脚为高电平,而结束引脚为低电平,则表示您已到达终点。
如果(开始 == 低 && 结束_== 低){ 数字写入(蜂鸣器,高); 延迟(1000); 数字写入(蜂鸣器,低); lcd.setCursor(0,0); lcd.print("再试一次"); Serial.print("再试一次"); } else if (start == HIGH && end_== LOW){ lcd.setCursor(0,0); lcd.print("做得好"); Serial.print("做得好"); }
测试 Buzz Wire 游戏
连接硬件并上传给定代码后,您就可以开始玩游戏了。因此,将带有圆圈的电线握在手中,并尝试将带有圆圈的电线一直通过曲折线焊接到二极管上,而不要让圆线接触任何地方。如果您触摸电线,则蜂鸣器会发出声音,LCD 会显示“再试一次”。如果你在不接触电线的情况下完成游戏,那么它会显示“干得好”。
#include
LiquidCrystal_I2C lcd(0x27, 16, 2);
常量 int startPin = 2;
常量 int endPin = 3;
常量 int 蜂鸣器 = 4;
整数开始,结束_;
无效设置(无效)
{
Serial.begin(9600);
液晶显示器开始();
lcd.clear();
pinMode(蜂鸣器,输出);
pinMode(startPin, INPUT_PULLUP);
pinMode(startPin, INPUT_PULLUP);
}
无效循环(无效)
{
开始 = digitalRead(startPin);
end_ = digitalRead(endPin);
串行打印(开始);
序列号.print("\n");
Serial.print(end_);
if (start == LOW && end_== LOW ){
digitalWrite(buzzer, HIGH);
延迟(1000);
数字写入(蜂鸣器,低);
lcd.setCursor(0,0);
lcd.print("再试一次");
Serial.print("再试一次");
}
else if (start == HIGH && end_== LOW){
lcd.setCursor(0,0);
lcd.print("做得好");
Serial.print("做得好");
}
延迟(500);
}
全部0条评论
快来发表一下你的评论吧 !