近代物理实验期末报告 ——by 金宵 14307110021 周逸卢 14307130154
什么是arduino Arduino是一款便捷灵活、方便上手的开源电子原型平台。包含硬件(各种型号的Arduino板)和软件(Arduino IDE)。由一个欧洲开发团队于2005年冬季开发。包含硬件(各种型号的arduino板)和软件(arduino IDE),适用于艺术家、设计师、爱好者和对于“互动”有兴趣的朋友们。 Arduino发轫于意大利的伊夫雷亚(Ivrea)。伊夫雷亚的阿尔杜伊(Arduin)是约1000年前的意大利国王,在当地声名卓著。Arduino是意大利语中的男性用名,意思是“强壮的朋友”。
硬件
软件 1.工具栏:包括在程序编辑 时常用的命令、编辑方式及 相关设置。 2.代码编辑区:进行程序编 辑的位置。 3.消息通知区:显示当前程 序编辑或上传的状态,右下 角可以显示出Arduino控制 器所在的com接口。
软件
打地鼠游戏! 我们的课题 Whac-A-Mole 1.0 ——by 金宵 Whac-A-Mole 2.0 ——by 周逸卢
Whac-A-Mole 1.0
器材 Arduino单片机、面包板、三色LED、导线、电阻、按键
连接图示
代码与功能实现 功能: 1、可以实现3个三色LED灯的亮灭。 2、实现用按键来表示敲在地鼠头上的锤子。 3、利用3色LED的特点,绿灯亮起表示击中,如果红色依旧持续,表示未击中,通过计数三色LED绿色灯亮起的次数,达到计分。 特点:三个LED互相独立,随机数的判断互不干涉,如果一个损坏,其余两个仍然可以独立工作。 缺陷: 1、击中判断与按键Scankey()延迟时间设置相关,不适当的延迟时间的设置会导致玩家击中以后,绿灯仍然无法亮起,影响计数。 2、对命中的计算依靠计数绿灯次数,比较落后。 3、功能较少(相对于2.0版本)
Whac-A-Mole 2.0
器材 Arduino单片机、面包板、LED、导线、电阻、按键、蜂鸣器、LCD显示屏
图示
代码与功能实现 功能: 1、相对于2.0加入了蜂鸣器,不必依靠三色LED,根据蜂鸣器的声音就可以知道是否命中。 2、加入了显示屏,显示出了命中数量,不用计数。 3、加入了时间系统,可以以“局”为单位进行游戏,一局以后数据清空 特点:随机数的判断与1.0不同,不能实现多个等同时亮起的情况,即只允许一只地鼠存在。
开关 #define key1 1 int keynum1 = 0; void setup() { pinMode(key1,INPUT_PULLUP); } void ScanKey1() keynum1 = 0; if(digitalRead(key1) == LOW) delay(20); if(digitalRead(key1) == LOW) keynum1 = 1; while(digitalRead(key1) == LOW);
LED 蜂鸣器 #define led1 2 void setup() { pinMode(led1,OUTPUT); digitalWrite(led1,HIGH); digitalWrite(led1,LOW); } #define buzzer 13 pinMode(buzzer,OUTPUT); void buzzerdi() digitalWrite(buzzer,HIGH); delay(10); digitalWrite(buzzer,LOW);
液晶LCD #include <LiquidCrystal.h> LiquidCrystal lcd(12,11,10,9,8,7); void setup() { lcd.begin(16,2); lcd.print("Game start!"); } void loop() lcd.clear(); lcd.setCursor(0,0); lcd.print(m); lcd.setCursor(0,1); lcd.print("hits");
液晶LCD void loop() { lcd.clear(); lcd.print("miss"); delay(500); lcd.setCursor(0,0); lcd.print(m); lcd.setCursor(0,1); lcd.print("hits"); }
随机数 int randnum; void loop() { randnum = random(6); }
轮数 void loop() { for(i = 0;i < 20;i++) …… } digitalWrite(led1,HIGH); digitalWrite(led2,HIGH); digitalWrite(led3,HIGH); lcd.clear(); lcd.print("Tims's up!"); delay(2000);
地鼠 void loop() { for(i = 0;i < 20;i++) { …… randnum = random(6); switch(randnum) case 1: digitalWrite(led1,LOW); digitalWrite(led2,HIGH); digitalWrite(led3,HIGH); for(j = 0;j < 300;j++) ScanKey1(); ScanKey2(); ScanKey3();
地鼠 if(keynum1 == 1) { m++; buzzerdi(); digitalWrite(led1,HIGH); lcd.clear(); lcd.setCursor(0,0); lcd.print(m); lcd.setCursor(0,1); lcd.print("hits"); delay(5); }
地鼠 if(keynum1 == 0) { delay(5); } if(keynum2 + keynum3 > 0) lcd.clear(); lcd.print("miss"); delay(500); lcd.setCursor(0,0); lcd.print(m); lcd.setCursor(0,1); lcd.print("hits");
间隔 for(j = 0;j < 300;j++) { ScanKey1(); …… if(keynum1 + keynum2 + keynum3 > 0) lcd.clear(); lcd.print("miss"); delay(500); lcd.setCursor(0,0); lcd.print(m); lcd.setCursor(0,1); lcd.print("hits"); } if(keynum1 + keynum2 + keynum3 == 0) delay(5); 间隔
? Whac-A-Mole 2.1 最终展示的版本 器材与图示与2.0相同 代码与功能实现 特点: 在2.0的基础上修改了代码,可以实现两只地鼠同时存在的情况。 ?
特别感谢: 俞熹老师、张远波老师、乐永康老师、姚红英老师、 谭砚文老师等老师在此期间对我们的指导和帮助。 感谢: 同一轮的王效天、曾昊天、钱瑞杰三位学长的帮助和交流。 最后互相感谢: 本学期一起解决问题,分析数据,共同讨论的搭档周逸卢(金宵)同学。
谢谢观看!!