Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- 拍一下開,拍一下關
- 範例3
- 使用麥克風感測拍手的聲音控制led亮滅,拍一下手led則亮,再拍一下手led則滅,依此循環。
- */
- int LED=13; //設定LED腳位
- void setup() {
- Serial.begin(9600);
- pinMode(LED,OUTPUT);
- }
- void loop() {
- //若要看A0值請加入這句,一般來說是不用變 Serial.println(analogRead(A0));
- if (analogRead(A0)>500) //設定A0達成條件值500
- {
- if (digitalRead(LED)==1) //讀取LED目前狀況(亮=1)
- {
- digitalWrite(LED,0); //如果亮著,讓他滅掉
- }
- else //如果沒亮
- {
- digitalWrite(LED,1); //讓他亮
- }
- delay(100); //避免誤動作,加延遲時間
- }
- }
- ----------------------------我是分隔線------------------------------
- /*
- 拍兩下開關
- 範例4
- 使用麥克風感測拍手的聲音控制led亮滅,拍兩下手led則亮,再拍兩下手led則滅,依此循環。
- 我寫得有點亂 但我自己覺得比較好理解
- 如果無法理解的請自己參閱課本
- */
- int LED = 13;
- void setup()
- {
- Serial.begin(9600);
- pinMode(LED,OUTPUT);
- }
- double first=0,second=0,clap=0,aaa; //預設宣告第一次=0 第二次=0 拍的數量=0 以及aaa
- void loop()
- {
- double time = millis(); //time = Arduino 執行到的秒數
- if (analogRead(A0)>500) //如果讀到>500
- {
- clap++; //拍的次數+1
- if (clap == 1) //如果拍的次數是1
- {
- first = time; //那第一次拍的時間=Arduino目前執行到的時間
- }
- else if (clap == 2) //如果拍的次數是2
- {
- second = time; //那第二次的時間=Arduino目前執行到的時間
- aaa = second - first; //aaa=第二次-第一次的時間差
- if ((aaa>300)&&(aaa<1500)) //如果300<aaa<1500(毫秒)
- {
- if (digitalRead(LED)==0) //如果目前LED是滅的
- {
- digitalWrite(LED,1); //把LED點亮
- delay(100); //避免錯誤 自己延遲100ms
- }
- else //如果目前LED是亮的
- {
- digitalWrite(LED,0); //把LED關掉
- delay(100); //避免誤判 自己延遲100ms
- }
- clap = 0; //做完一次完整流程了,把所有記數給歸0
- first = 0;
- second = 0;
- }
- else //如果300<aaa<1500不成立
- {
- clap = 1; //把拍的次數2改1
- first = second; //把第二次拍的時間存到第一次
- second = 0; //把第二次歸0
- delay(100); //避免誤判延遲100ms
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement