You are on page 1of 3

#define threshold 40 //定義光敏電阻的閥值

#define duration_th 1000 //定義低電位時間隔時間的閥值

int state=0;
int y=0;
long x;
long Alltime;
long during_time;
long n;
long m;
void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
}

void loop() {

//感測光敏電阻數值,當光敏電阻數值小於閥值 threshold 就開始計時,然

後計算低電位時的間隔時間 during_time。

int sensorValue1 = analogRead(A0);


int sensorValue2 = analogRead(A1);
if(analogRead(A0) < threshold){
n = millis();
while(analogRead(A0) < threshold){}
during_time = millis() - n;
Serial.print("sensor1 =");

Serial.println(sensorValue1);//輸出光敏電阻偵測到的數值

}
if(analogRead(A1) < threshold){
n = millis();
while(analogRead(A1) < threshold){}
during_time = millis() - n;
Serial.print("sensor2 =");

Serial.println(sensorValue2);//輸出光敏電阻偵測到的數值
}

//(state=0 為在隧道外;state=1 為在隧道內)

//當低電位間隔時間大於閥值 duration_th,做狀態轉換並輸出目前的狀

態。最後將時間差 during_time 調成 0 以逃脫迴圈

if(during_time > duration_th){


state=(state+1)%2;
Serial.print("state =");
Serial.println(state);
during_time=0;
}

//當時間差大於 0 且小於 1000 毫秒時,輸出時間差的值。最後將時間差

during_time 調成 0 以逃脫迴圈

if(during_time>0&& during_time<1000){
Serial.print("during_time =");
Serial.println(during_time);
during_time=0;
}

//當 state=1 時,記錄一個時間的數值做為時間 1。

//用一個 if 語法包住計時程式防止一直重複更新數值。當 y=0 時開始計時

並輸出時間 1,最後將 y 調成 5(非 0 的數值)以逃脫迴圈

if(state==1){
if(y==0){
m = millis();
Serial.print("at state1 time =");
Serial.println(m);
y=5;
}
}

//當 state=0 時,記錄一個時間的數值做為時間 2。


//用一個 if 語法包住計時程式防止一直重複更新數值。

//當在 state=1 實記錄的數值 m=0 時開始計時並輸出時間 2,並計算在

state=1 內的總時間 Alltime

//最後將 m 調成 0 以逃脫迴圈並且將 y 調成 0 使得 state=1 時可以計時

//用 state=1 時記錄的數值 m 來做為開關可以避免一開始就有時間 2 的數

值產生

if(state==0){
if(m>0){
x=millis();
Serial.print("at state0 time =");
Serial.println(x);
Alltime =x-m;
m=0;
y=0;
}

//假如 Alltime 大於 0 時,輸出 Alltime 的數值。最後將 Alltime 調

成 0 以逃脫迴圈

if(Alltime>0){
Serial.print("Alltime =");
Serial.println(Alltime);
Alltime=0;
}
}
}

You might also like