// Reaction Timer.ino
// 反應計時電路
//宣告變數名稱-----------------
/*int timeCounter=0;
int value=0;
boolean val=0;
const byte Button = 11;
const byte SP_PIN = 8;
const byte LED = 13;
boolean over = true; //宣告一個 over 變數來記錄 timeCounter 是否大於 10 的狀態。
//—---------------
void setup() {
Serial.begin(9600);
pinMode(Button, INPUT);
pinMode(SP_PIN,OUTPUT);
pinMode(LED,OUTPUT);
Serial.println("When the ringtone is over, press the button");//顯示提示字串 Serial.println("go as fast as you can.");
}
//—------------------
void loop() {
tone(SP_PIN, 1500); delay(500); noTone(SP_PIN); delay(500);
tone(SP_PIN, 1500); delay(500); noTone(SP_PIN); delay(500);
tone(SP_PIN, 1500); delay(500); noTone(SP_PIN); delay(500);
value = random(300);
Serial.print( "Delay time= ");
Serial.println(1000 + value, DEC);
delay(1000 + value); // 延遲隨機時間
timeCounter = 0; // 重置計時器,確保從 0 開始計時
tone(SP_PIN, 3000); delay(1000 + value); noTone(SP_PIN); // 隨機延遲時間
val = 0;
//計時
do{
over = true;
delay(1);
timeCounter++;
val = digitalRead(Button);
// 偵測計時是否超過 10 秒
if (timeCounter > 10000) { // 判斷是否計數到 10s
Serial.println("Too slow!!!");
over = false; // 記錄超時
break;// 結束迴圈
}
} while(!val);//按下按鈕,脫離迴圈
digitalWrite(LED,HIGH);//LED亮,計時結束
delay(1000); //延遲 1 秒
// 判斷是否作弊或超時
if(over == false){ //若超出 10s
Serial.println("Please try again.");
}
else { //反應時間只有1毫秒,代表使用此次測驗玩家沒放開過或者用預測的
if(timeCounter >=1){
Serial.println("Don't cheating!!");//直接呈現 >10s 結果
}
else { //否則就呈現實際結果
Serial.print("\n Your time was "); //顯示計時結果
Serial.println(timeCounter,DEC);// 正常情況下顯示時間
Serial.println(" ms .\n"); //"\n"為換行指令,顯示單位
}
}
Serial.println("\n To play again, press the button down again after 2 sec."); //提示重新開始遊戲
// 等待按鈕被再次按下重啟遊戲
val = 0;
delay(2000);
while(!val){
val = digitalRead(Button);
}
// 重置變數和 LED 狀態
timeCounter = 0;
digitalWrite(LED,LOW);delay(1000);
}*/
// Reaction Timer.ino
// 反應計時電路
//宣告變數名稱-----------------
int timeCounter=0;
int value=0;
int counter=0;
boolean val=0;
const byte Button = 11;
const byte SP_PIN = 8;
const byte LED = 13;
boolean over = 0; //宣告一個 over 變數來記錄 timeCounter 是否大於 10 的狀態。
//—---------------
void setup() {
Serial.begin(9600);
pinMode(Button, INPUT);
pinMode(SP_PIN,OUTPUT);
pinMode(LED,OUTPUT);
Serial.println("When the ringtone is over, press the button");//顯示提示字串 Serial.println("go as fast as you can.");
}
//—------------------
void loop() {
tone(SP_PIN, 1500); delay(500); noTone(SP_PIN); delay(500);
tone(SP_PIN, 1500); delay(500); noTone(SP_PIN); delay(500);
tone(SP_PIN, 1500); delay(500); noTone(SP_PIN); delay(500);
value = random(300);
Serial.print( "Delay time= ");
Serial.println(1000 + value, DEC);
delay(1000 + value); // 延遲隨機時間
timeCounter = 0; // 重置計時器,確保從 0 開始計時
tone(SP_PIN, 3000); delay(1000 + value); noTone(SP_PIN); // 根據隨機延遲時間設置
val=0;
//計時
do{
delay(1);
timeCounter++;
val = digitalRead(Button);
// 偵測計時是否超過 10 秒
if (timeCounter >= 10000) { // 判斷是否計數到 10s
val = 1; // 結束迴圈
over = 1; // 記錄超時
}
} while(!val);//按下按鈕,脫離迴圈
digitalWrite(LED,HIGH);//LED亮,計時結束
delay(2500); //延遲 1 秒
// 判斷是否作弊或超時
if(timeCounter <= 1){ // timeCounter 等於或小於 1 ,顯示作弊
Serial.println("Don't cheating! Your reaction time is too fast.");
Serial.println("Please try again.");
}else if ( over ) {//若超出 10s 則
Serial.print("\n Too slow!! "); //顯示計時結果
}else { //否則就呈現實際結果*/
Serial.print("\n Your time was "); //顯示計時結果
Serial.println(timeCounter,DEC);// 正常情況下顯示時間
Serial.println(" ms .\n"); //"\n"為換行指令,顯示單位
}
Serial.println("\n To play again, press the button down again."); //提示重新開始遊戲
delay(1000);
// 等待按鈕被再次按下重啟遊戲
val = 0;
while(!val){
val = digitalRead(Button);
digitalWrite(LED,HIGH);
}
// 重置變數和 LED 狀態
val=0;
timeCounter = 0;
over = 0;
digitalWrite(LED,LOW);delay(1000);
}