多元選修機器人專題-期末報告
205 05何威廷 15莊貴淳 35顏殷
大綱
動機與目的
1.
2.
過程及方法
3.
心得與反思
# CHAPTER 2
動機
# MOTIVATION
以前看過有人在用arduino做簡單的小遊戲
如果我們自己刻出遊戲來一定很酷
聽到可以把arduino順回家
目的
# TARGET
想在這個選修帶一點成品回去
不要被當
獲得做arduino成品的經驗
更了解arduino的運作模式及語法
過程
# PROCESS
1
隨機亮燈表示啟動
2
停止閃燈,進入準備
3
RGB燈將一秒閃爍一個顏色,總共7個
5
將顏色透過按鈕輸入
4
記憶下閃爍的顏色
6
比對題目,計算得分
過程
# PROCESS
arduino
麵包板
過程
arduino
麵包板
# PROCESS
過程
arduino
麵包板
# PROCESS
過程
arduino
麵包板
# PROCESS
過程
arduino
麵包板
# PROCESS
過程
arduino
麵包板
# PROCESS
過程
arduino
麵包板
# PROCESS
過程
arduino
麵包板
# PROCESS
過程
arduino
麵包板
# PROCESS
過程
arduino
麵包板
# PROCESS
過程
arduino
麵包板
# PROCESS
過程
arduino
麵包板
# PROCESS
lcd1602
方法
# METHOD
const int button1Pin = 2; // 按鈕 1 的引腳
const int button2Pin = 3; // 按鈕 2 的引腳
const int button3Pin = 4; // 按鈕 3 的引腳
const int bluePin = 9; // RGB 燈的紅色引腳
const int greenPin = 10; // RGB 燈的綠色引腳
const int redPin = 11; // RGB 燈的藍色引腳
int red; // 紅色的亮度值
int green; // 綠色的亮度值
int blue; // 藍色的亮度值
int score = 0; // 玩家的得分
int topic[6];
int input[6];
void setup() {
// 設定腳位為輸入模式
pinMode(button1Pin, INPUT);
pinMode(button2Pin, INPUT);
pinMode(button3Pin, INPUT);
// 設定腳位為輸出模式
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
Serial.begin(9600);
}
void loop() {
getTopic();
delay(3000);
calculateScore();
}
void getTopic(){
for (int i = 0; i < 7; i++) {
// 隨機生成顏色
int color = random(3);
// 設定 RGB 燈的顏色
if (color == 0) {
// 設定為紅色
analogWrite(redPin, 255);
analogWrite(greenPin, 0);
analogWrite(bluePin, 0);
delay(500);
resetRGB();
} else if (color == 1) {
// 設定為綠色
analogWrite(redPin, 0);
analogWrite(greenPin, 255);
analogWrite(bluePin, 0);
delay(500);
resetRGB();
} else if (color == 2) {
// 設定為藍色
analogWrite(redPin, 0);
analogWrite(greenPin, 0);
analogWrite(bluePin, 255);
delay(500);
resetRGB();
}
topic[i] = color;
delay(1000);
}
}
void calculateScore() {
for(int i=0; i<7; i++){
while(readColor() == -1){
input[i] = readColor();
if(input[i] == topic[i]){
score++;
}
}
}
Serial.println(score);
}
int readColor() {
// 讀取按鈕 1 的狀態
int button1State = digitalRead(button1Pin);
// 如果按鈕 1 被按下,則返回紅色
if (button1State == HIGH) {
return 0;
}
// 讀取按鈕 2 的狀態
int button2State = digitalRead(button2Pin);
// 如果按鈕 2 被按下,則返回綠色
if (button2State == HIGH) {
return 2;
}
// 讀取按鈕 3 的狀態
int button3State = digitalRead(button3Pin);
// 如果按鈕 3 被按下,則返回藍色
if (button3State == HIGH) {
return 1;
}
// 否則返回 -1
return -1;
}
void resetRGB() {
analogWrite(redPin, 0);
analogWrite(greenPin, 0);
analogWrite(bluePin, 0);
delay(500);
}
遇到的問題
# PROBLEM
一開始的隨機閃燈不隨機
LCD1602模組燒雞
delay不能用
遇到的問題
# PROBLEM
一開始的隨機閃燈不隨機
LCD1602模組燒雞
delay不能用
解決辦法
修改了參數,突然就好了
意識到功能不必要,砍了
改用millis
心得及省思
# REFLECTION
將一個專案從無到有
就算是小專案也是要專心致志地投入才會有好成果
跟組員的磨合跟合作分工也很重要
Code出大包要提早找人幫忙
Code
By sbincer32
Code
- 32