void setup ()
{
Serial.begin(9600);
attachInterrupt(0,RCount, FALLING);
attachInterrupt(1,LCount, FALLING);
}
void loop()
{
r_wheel = 0;
l_wheel = 0;
delay(1000);
Serial.println(r_wheel);
delay(50);
Serial.println(l_wheel);
}
void LCount()
{
l_wheel++;
}
void RCount()
{
r_wheel++;
}
以上的代碼實作的是1s之類計算碼盤經過的孔的數量,利用這個和輪子的半徑,碼盤上的孔的數量,就可以計算每秒經過的路程,就可以得到速度。
實作這個有幾個要注意的地方:
調用中斷函數的說明:
attachInterrupt(0,RCount, FALLING);
裡面的0代表的是中斷源0,arduino裡面有兩個中斷源,連的是digital的2和3。RCount是中斷執行函數,每次中斷發生就執行RCount函數,中斷的捕捉就是闆上digital的2或者3的條件是FALLING的時候。一般使用的是FALLING,不用CHANGE,FALLING更準确,是下降沿捕捉。本來要在setup裡面再使用定時器的,用于一秒時間内計算count,中斷函數執行的就是初始化RCount和LCount為0。但在loop的做法其實效果一樣。
順便補上别人的做法,覺得也不錯!
http://www.geek-workshop.com/forum.php?mod=viewthread&tid=595
參考文檔:
http://www.geek-workshop.com/thread-1983-1-1.html 中斷源介紹
http://www.arduino.cn/thread-2890-1-1.html 中斷源
http://book.2cto.com/201209/4368.html
http://www.geek-workshop.com/forum.php?mod=viewthread&tid=595 中斷
http://blog.csdn.net/chn89/article/details/17199171 看門狗
http://www.geek-workshop.com/thread-2103-1-1.html 光電碼測速
http://www.cnblogs.com/xiaowuyi/p/3448394.html 時鐘,定時器
http://www.geek-workshop.com/thread-3041-1-1.html 定時器中斷,m2times的庫