#include <Wire.h> // I2C程式庫
#include <LiquidCrystal_I2C.h> // LCD_I2C模組程式庫
LiquidCrystal_I2C lcd(0x27, 16, 2);
int led1 = 2;
int led2= 3;
int led3= 4;
int led4= 5;
int led5= 6;
int button1 = 8;
int button2 = 9;
int button3 = 10;
int button4 = 11;
int button5 = 12;
static int score=0;
char difficulty;
int num=0;
unsigned long playtime=0;
#define t 1000
void print_time(unsigned long time_millis);
void setup() {
Serial.begin(9600);
pinMode(led1,OUTPUT);
pinMode(led2,OUTPUT);
pinMode(led3,OUTPUT);
pinMode(led4 ,OUTPUT);
pinMode(led5 ,OUTPUT);
pinMode(button1, INPUT);
pinMode(button2, INPUT);
pinMode(button3, INPUT);
pinMode(button4, INPUT);
pinMode(button5, INPUT);
initial();
lcd.init();
lcd.backlight();
}
void initial(){
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
digitalWrite(led4,LOW);
digitalWrite(led5,LOW);
}
void loop() {
Serial.println("你要選什麼難度? ");
while(1) {
difficulty = Serial.read();
if(difficulty == '1'){
delay(100);
Serial.println("低等難度");
for(int i=1;i>0;i++){
play();
timer();
}
}
if(difficulty == '2'){
delay(100);
Serial.println("中等難度");
for(int i=1;i>0;i++){
play();
}
}
if(difficulty == '3'){
delay(100);
Serial.println("高等難度");
for(int i=1;i>0;i++){
play();
}
}
if(difficulty == '4'){
delay(100);
Serial.println("漸進模式");
for(int i=1;i>0;i++){
play();
}
}
}
}
void play(){
int a = random(2,7); //隨機選取五個LED之一發亮
digitalWrite(a, HIGH);
unsigned long time = millis();
while( millis()-time < 3000){ // 三秒換一次LED發亮
num = digitalRead(a+6);
if(num){
break;
}
delay(10);
}
if(num){
score++;
}else{
score--;
}
digitalWrite(a, LOW);
lcd.setCursor(4, 0); // (colum, row)從第一排的第三個位置開始顯示
lcd.print("Score: ");
lcd.setCursor(10, 0); // (colum,row)從第一排第三格位置開始顯示
lcd.print(score);
}
void timer(){
if(millis() > playtime + t){
playtime = millis();
print_time(playtime);
Serial.println();
}
}
void print_time(unsigned long time_millis){
lcd.setCursor(4, 1); // (colum, row)從第二排的第五個位置開始顯示
lcd.print("Time: ");
lcd.setCursor(9, 1); // (colum, row)從第二排的第十個位置開始顯示
lcd.print(60-time_millis/1000);
lcd.setCursor(11, 1); // (colum, row)從第二排的第十二個位置開始顯示
lcd.print("s");
}