# 第十二週週記 ###### tags: `張凱鈞` `第十二週` ## 紅外線搖控馬達 > 程式碼: ``` #include<IRromote.h> const int input_pin = 2; IRrecv receiver(input_pin); decode_result result; const int motor = 8; const int control_speed = 9; const int _speed = 200; void setup{ pinMode(motor, OUTPUT); pinMode(speed_control, OUTPUT); irrecv_irPin.enableIRIN(); Serial.begin(9600); } void forward(){ digitalWrite(motor, LOW); analogWrite(control_speed, _speed); } void backward(){ digitalWrite(motor, HIGH); analogWrite(control_speed, _speed); } void stop(){ digitalWrite(motor, LOW); analogWrite(control_speed, 0); } void loop(){ if(irrecv_irPin.decode(&result)){ Serial.println(result.value); switch(IR.decodedIRData.decodedRawData){ case FF30CF forward(); break; case FF18E7 backward(); break; case FF7A85 stop(); break; delay(1000); IR.resume(); } } ``` 事情是這樣的,我們一開始因為上課教的馬達控制還沒完成,所以就搭算先完成馬達控制的內容,再加上紅外線遙控。沒想到在測試馬達控制時,馬達一直都沒有轉動,我也不知道為什麼QQ,於是試著debug看看,我將每個腳位都用digitalWrite並輸出HIGH,並接出LED燈(有先將LED燈接5V和GND是會亮的),結果每一個腳位接出LED燈都不會亮!這不禁讓我開始懷疑是不是板子壞掉了?又或是程式根本沒有正確輸入給Arduino? {%youtube pGVwCBrnfe8 %} 在仔細檢查之後,發現在裝置管理員有看到port,傳完程式下面也顯示finish,我就先把傳輸的問題排除,看來是控制板的問題了... 有趣的是,在測試的過程中,我發現有個綠色的LED燈一直在閃爍,不知道是甚麼意思,上網找RTL 8195的datasheet也找不到,只好果斷放棄了... 我們最終寫好了程式碼,但沒辦法run看看,只能換了塊板子再試試看囉! ![](https://i.imgur.com/bangJlo.jpg) ## 為什麼使用digitalRead得到的值會是0-1023之間 原因是因為這邊用10bits去儲存,每1個bit有0和1兩種可能,所以數值會是從0~2^10-1也就是0~1023。 ## 本週實做心得 這週是介紹控制直流馬達的轉速以及正反轉,搭配直流馬達控制模組。控制這個模組的方式很簡單,總共有4個腳位,一個接GND,一個接5V,另外兩個接PIN腳,分別控制轉速和方向。 ![](https://i.imgur.com/WVMiJmw.png) 看起來很容易,但實做的時候卻是問題一堆QQ,不知道從哪邊下手debug。當時遇到的情況如下: 1.馬達控制模組根本不會亮(最好解決,當時換一條杜邦線就搞定了) 2.馬達旋轉方式沒有依照程式執行(這我們就不懂了,馬達應該反轉的時候卻持續正轉) 3.馬達控制模組會亮,但馬達沒有反應(完全不知道該如何是好) 當時換了一顆馬達,也換了一個控制板,還是沒有正常運作(當時應該拿我們的硬體燒綠別組成功的程式看看,如果能正常執行就是我們軟體的問題了)再debug看看吧!