多元選修機器人專題-期末報告

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