本帖最后由 血陽(yáng) 于 2015-8-21 14:29 編輯
在寫這篇帖子之前,先感謝前段時(shí)間,在論壇里,為我耐心解答的大神朋友們,無(wú)論我問(wèn)出什么奇葩的問(wèn)題,都能為我耐心解答,真心感謝你們。 先上視頻吧,雖然拍的不是很好;
小車照片:
基礎(chǔ)篇 首先,我們先來(lái)看看我們需要的哪些工具: 1、 arduino控制板 x1 2、 L298N電機(jī)驅(qū)動(dòng)模塊 x1 3、 Arduino Bluetooth Bee藍(lán)牙模塊 x1 4、 Arduino Bluetooth藍(lán)牙擴(kuò)展板 x1 5、 小車底盤 x1 6、 電源(7~9V)x1 7、 導(dǎo)線 若干 說(shuō)明: 1、我的教程是二輪驅(qū)動(dòng)的,所以用L298N電機(jī)驅(qū)動(dòng)模塊,這個(gè)模塊簡(jiǎn)單易懂,要做二輪的話,推薦這個(gè)模塊。 2、藍(lán)牙模塊選用這個(gè),比較方便,直接把藍(lán)牙插到擴(kuò)展板,再把擴(kuò)展板插到arduino控制板上,連上藍(lán)牙就可以直接用了。 3、電源,選擇7~9V才能更好的驅(qū)動(dòng)兩個(gè)電機(jī),我沒(méi)買電源,就將就著用我的移動(dòng)電源的高輸出接口(就是充平板的那個(gè)口)給供電了。
接下來(lái),我們先介紹一下這個(gè)L298N電機(jī)驅(qū)動(dòng)板模塊吧,它直接影響到我們后面的編程。
相關(guān)接口,已經(jīng)標(biāo)注好在圖中了。電機(jī)接口,就是接電機(jī)引出兩條線的地方,如果發(fā)現(xiàn)電機(jī)轉(zhuǎn)動(dòng)方向相反了,可以把兩條線互換一下方向。就ok了。 L298N GND 接 arduino GND; L298N VCC 外接另一個(gè)電源; arduino自己也接一個(gè)電源。 L298N 5V 這里可以不用接 arduino 5V了; 接著說(shuō)與程序相關(guān)的6個(gè)腳。首先說(shuō)ENA和ENB吧,他們分別是控制電機(jī)1和電機(jī)2的速度的,即是控制PWM的,如果你不想改變這個(gè)電機(jī)轉(zhuǎn)速的話,就不用動(dòng)了,它短路帽子不要?jiǎng)泳托?,如果你要改變速度,就可以把那個(gè)小帽子去掉,然后引出來(lái)接在arduino的模擬引腳上輸出PWM信號(hào)。 至于In1~In4,前面的In1和In2是控制電機(jī)1的,In3和In4是控制電機(jī)2的。好了,這里有張表,通過(guò)表格,你就可以清楚的知道他們的機(jī)理了。(這個(gè)是對(duì)于電機(jī)1的,電機(jī)2同理)
最后,我們來(lái)簡(jiǎn)單講藍(lán)牙的連接吧,很簡(jiǎn)單,供電好以后,我們用手機(jī)連上藍(lán)牙后,配對(duì),密碼一般是“1234”或者“0000”,輸入好密碼,就配對(duì)成功了。 Ok,現(xiàn)在講完該講的部分,我們就該開(kāi)始制作我們期待已久的藍(lán)牙小車了~ 還有一點(diǎn)要說(shuō)的是,先制作不帶控制速度的,這樣寫程序比較簡(jiǎn)單。
第1步:簡(jiǎn)單地運(yùn)行電機(jī) 首先,來(lái)看看連線吧,我決定,用arduino的4、5、6、7引腳來(lái)控制我的小車。4、5控制左輪。6、7控制右輪。 所以驅(qū)動(dòng)模塊的In1接arduino的4引腳,In2接5引腳,然后電機(jī)的兩條線分別接驅(qū)動(dòng)模塊中電機(jī)1的OUT1和OUT2;“供電正極”接5V引腳,“接地”接 GND。 根據(jù)上面給出的表格,我們先來(lái)簡(jiǎn)單地設(shè)計(jì)一個(gè)程序,來(lái)實(shí)現(xiàn):左輪正轉(zhuǎn)2s,停止2s,反轉(zhuǎn)2s,停止2s。循環(huán)。 代碼如下:
/***************************************** 二輪藍(lán)牙小車——左輪測(cè)試 運(yùn)動(dòng)過(guò)程:左輪正轉(zhuǎn)2s,停止2s,反轉(zhuǎn)2s,停止2s。循環(huán) 占用4、5引腳 2015.05.01 ——by 極客工坊 血陽(yáng) ——王小豐 *****************************************/ #define IN1 4 #define IN2 5 //定義In1接arduino的4引腳,In2接5引腳 void setup() { pinMode(IN1,OUTPUT); pinMode(IN2,OUTPUT); } void loop() { digitalWrite(IN1,HIGH); digitalWrite(IN2,LOW); //左輪前進(jìn) delay(2000); digitalWrite(IN1,LOW); digitalWrite(IN2,LOW); //左輪靜止不動(dòng) delay(2000); digitalWrite(IN1,LOW); digitalWrite(IN2,HIGH); //左輪后退 delay(2000); digitalWrite(IN1,LOW); digitalWrite(IN2,LOW); //左輪靜止不動(dòng) delay(2000); }
連好線,我們下載好程序,就試試吧。實(shí)驗(yàn)結(jié)果很成功,果然按照預(yù)想的運(yùn)動(dòng)了。 注意,運(yùn)行時(shí)候按下復(fù)位鍵開(kāi)始檢測(cè)。假如這個(gè)運(yùn)動(dòng)方向與你所設(shè)的程序方向不同,那么,你可以把電機(jī)中的OUT1的線和OUT2的線互換一下就行了。(不按復(fù)位鍵你不知道你的程序開(kāi)始是從正轉(zhuǎn)開(kāi)始還是反轉(zhuǎn)開(kāi)始) 接著,我們以同理來(lái)驅(qū)動(dòng)一下右輪試試,同理驅(qū)動(dòng)模塊的In3接arduino的6引腳,In4接7引腳,然后電機(jī)的兩條線分別接驅(qū)動(dòng)模塊中電機(jī)2的OUT3和OUT4。運(yùn)動(dòng)過(guò)程:右輪正轉(zhuǎn)2s,停止2s,反轉(zhuǎn)2s,停止2s。循環(huán)。
/***************************************** 二輪藍(lán)牙小車——右輪測(cè)試 運(yùn)動(dòng)過(guò)程:右輪正轉(zhuǎn)2s,停止2s,反轉(zhuǎn)2s,停止2s。循環(huán) 占用4、5引腳 2015.05.01 ——by 極客工坊 血陽(yáng) ——王小豐 *****************************************/ #define IN3 6 #define IN4 7 //定義IN3接arduino的6引腳,IN4接7引腳 void setup() { pinMode(IN3,OUTPUT); pinMode(IN4,OUTPUT); } void loop() { digitalWrite(IN3,HIGH); digitalWrite(IN4,LOW); //右輪前進(jìn) delay(2000); digitalWrite(IN3,LOW); digitalWrite(IN4,LOW); //右輪靜止不動(dòng) delay(2000); digitalWrite(IN3,LOW); digitalWrite(IN4,HIGH); //右輪后退 delay(2000); digitalWrite(IN3,LOW); digitalWrite(IN4,LOW); //右輪靜止不動(dòng) delay(2000); } 這里我發(fā)現(xiàn)了,我連線運(yùn)行與我設(shè)定的方向相反,于是我把電機(jī)的兩條線在OUT那里互換,然后就ok了。
第二步:小車的簡(jiǎn)單運(yùn)動(dòng) 接著。最基本的弄完以后,我們來(lái)分析一下小車的運(yùn)動(dòng)方式,就可以編寫程序讓小車運(yùn)動(dòng)了。 下面是小車運(yùn)動(dòng)方式:
有了這個(gè),我們進(jìn)行編程的時(shí)候,就簡(jiǎn)單多了。 下面,我們來(lái)寫寫簡(jiǎn)單的前進(jìn)2s然后停止1s,接著后退2s停止3s的程序吧。
/***************************************** 二輪藍(lán)牙小車 運(yùn)動(dòng)過(guò)程:前進(jìn)2s,停止1s,接著后退2s停止3s 占用4、5引腳 2015.05.01 ——by 極客工坊 血陽(yáng) ——王小豐 *****************************************/ #define IN1 4 #define IN2 5 //定義In1接arduino的4引腳,In2接5引腳 #define IN3 6 #define IN4 7 //定義IN3接arduino的6引腳,IN4接7引腳 void setup() { pinMode(IN1,OUTPUT); pinMode(IN2,OUTPUT); pinMode(IN3,OUTPUT); pinMode(IN4,OUTPUT);
} void loop() { digitalWrite(IN1,HIGH); digitalWrite(IN2,LOW); //左輪前進(jìn) digitalWrite(IN3,HIGH); digitalWrite(IN4,LOW); //右輪前進(jìn) delay(2000); digitalWrite(IN1,LOW); digitalWrite(IN2,LOW); //左輪靜止不動(dòng) digitalWrite(IN3,LOW); digitalWrite(IN4,LOW); //右輪靜止不動(dòng) delay(1000); digitalWrite(IN1,LOW); digitalWrite(IN2,HIGH); //左輪后退 digitalWrite(IN3,LOW); digitalWrite(IN4,HIGH); //右輪后退 delay(2000); digitalWrite(IN1,LOW); digitalWrite(IN2,LOW); //左輪靜止不動(dòng) digitalWrite(IN3,LOW); digitalWrite(IN4,LOW); //右輪靜止不動(dòng) delay(3000); } 下載程序。供電,實(shí)驗(yàn)結(jié)果如預(yù)料一樣,很成功
第三步:函數(shù)的編寫 考慮到,假如把說(shuō)有程序都寫在loop循環(huán)里,會(huì)很復(fù)雜,所以,我們以函數(shù)形式,寫下每個(gè)運(yùn)動(dòng)狀態(tài),然后再進(jìn)行函數(shù)調(diào)用的話,程序會(huì)顯得比較簡(jiǎn)單。如果這步你看前幾個(gè)就懂了,就可以跳到第四步去了。 下面,我們開(kāi)始編寫這些運(yùn)動(dòng)狀態(tài)的程序:
/************************************************** forward子函數(shù)——前進(jìn)子函數(shù) 函數(shù)功能:控制車前進(jìn) **************************************************/ void forward( ) { digitalWrite(IN1,HIGH); digitalWrite(IN2,LOW); //左輪前進(jìn) digitalWrite(IN3,HIGH); digitalWrite(IN4,LOW); //右輪前進(jìn) }
/************************************************** back子函數(shù)——后退子函數(shù) 函數(shù)功能:控制車后退 **************************************************/ void back( ) { digitalWrite(IN1,LOW); digitalWrite(IN2,HIGH); //左輪后退 digitalWrite(IN3,LOW); digitalWrite(IN4,HIGH); //右輪后退 }
/************************************************** turnLeft子函數(shù)——左轉(zhuǎn)子函數(shù) 函數(shù)功能:控制車左轉(zhuǎn)
**************************************************/ void turnLeft( ) { digitalWrite(IN1,LOW); digitalWrite(IN2,LOW); //左輪靜止不動(dòng) digitalWrite(IN3,HIGH); digitalWrite(IN4,LOW); //右輪前進(jìn) }
/************************************************** turnbackLeft子函數(shù)——左后轉(zhuǎn)彎子函數(shù) 函數(shù)功能:控制車左后轉(zhuǎn)彎
**************************************************/ void turnbackLeft( ) { digitalWrite(IN1,LOW); digitalWrite(IN2,LOW); //左輪靜止不動(dòng) digitalWrite(IN3,LOW); digitalWrite(IN4,HIGH); //右輪后退 }
/************************************************** turnRight子函數(shù)——右后轉(zhuǎn)彎轉(zhuǎn)子函數(shù) 函數(shù)功能:控制車右后轉(zhuǎn)彎
**************************************************/ void turnRight( ) { digitalWrite(IN1,HIGH); digitalWrite(IN2,LOW); //左輪前進(jìn) digitalWrite(IN3,LOW); digitalWrite(IN4,LOW); //右輪靜止不動(dòng) }
/************************************************** turnbackRight子函數(shù)——右轉(zhuǎn)子函數(shù) 函數(shù)功能:控制車右轉(zhuǎn)
**************************************************/ void turnbackRight( ) { digitalWrite(IN1,LOW); digitalWrite(IN2,HIGH); //左輪后退 digitalWrite(IN3,LOW); digitalWrite(IN4,LOW); //右輪靜止不動(dòng) }
/************************************************** turnLeftOrigin子函數(shù)——原地左轉(zhuǎn)子函數(shù) 函數(shù)功能:控制車原地左轉(zhuǎn)
**************************************************/ void turnLeftOrigin( ) { digitalWrite(IN1,LOW); digitalWrite(IN2,HIGH); //左輪后退 digitalWrite(IN3,HIGH); digitalWrite(IN4,LOW); //右輪前進(jìn) }
/************************************************** turnRightOrigin子函數(shù)——原地右轉(zhuǎn)子函數(shù) 函數(shù)功能:控制車原地右轉(zhuǎn)
**************************************************/ void turnRightOrigin( ) { digitalWrite(IN1,HIGH); digitalWrite(IN2,LOW); //左輪前進(jìn) digitalWrite(IN3,LOW); digitalWrite(IN4,HIGH); //右輪后退 }
/************************************************** stop子函數(shù)—停止子函數(shù) 函數(shù)功能:控制車停止
**************************************************/ void _stop() { digitalWrite(IN1,LOW); digitalWrite(IN2,LOW); //左輪靜止不動(dòng) digitalWrite(IN3,LOW); digitalWrite(IN4,LOW); //右輪靜止不動(dòng) }
第四步:函數(shù)的運(yùn)用 麻煩的函數(shù)編寫完以后,我們就可以嘗試著興高采烈地運(yùn)用他們吧。 我們來(lái)寫一段程序來(lái),簡(jiǎn)單地控制小車讓小車運(yùn)動(dòng):前進(jìn)2s—后退2s—前左轉(zhuǎn)2s—后左轉(zhuǎn)2s—前右轉(zhuǎn)2s—后右轉(zhuǎn)2s—原地左轉(zhuǎn)2s—原地右轉(zhuǎn)2s—停止3s。 看起來(lái)運(yùn)動(dòng)好復(fù)雜,其實(shí)有了上面的函數(shù)以后,我們編寫起來(lái)級(jí)很簡(jiǎn)單了,注意的是,在調(diào)用函數(shù)之前,我們要先在前面聲明好函數(shù)哦。 下面是我們的控制程序:
/***************************************** 二輪藍(lán)牙小車 運(yùn)動(dòng)過(guò)程:利用函數(shù):前進(jìn)2s—后退2s—前左轉(zhuǎn)2s—后左轉(zhuǎn)2s —前右轉(zhuǎn)2s—后右轉(zhuǎn)2s—原地左轉(zhuǎn)2s—原地右轉(zhuǎn)2s—停止3s。 2015.05.01 ——by 極客工坊 血陽(yáng) ——王小豐 *****************************************/ #define IN1 4 #define IN2 5 //定義In1接arduino的4引腳,In2接5引腳 #define IN3 6 #define IN4 7 //定義IN3接arduino的6引腳,IN4接7引腳
void forward( ); void back( ); void turnLeft( ); void turnRight( ); void turnbackLeft( ); void turnbackRight( ); void turnLeftOrigin( ); void turnRightOrigin( ); void _stop(); //這里是把我們用到的函數(shù)都聲明一遍
void setup() { pinMode(IN1,OUTPUT); pinMode(IN2,OUTPUT); pinMode(IN3,OUTPUT); pinMode(IN4,OUTPUT); }
void loop() { forward( ); delay(2000); back( ); delay(2000); turnLeft( ); delay(2000); turnbackLeft( ); delay(2000); turnRight( ); delay(2000); turnbackRight( ); delay(2000); turnLeftOrigin( ); delay(2000); turnRightOrigin( ); delay(2000); _stop(); delay(3000); }
/************************************************** forward子函數(shù)——前進(jìn)子函數(shù) 函數(shù)功能:控制車前進(jìn) **************************************************/ void forward( ) { digitalWrite(IN1,HIGH); digitalWrite(IN2,LOW); //左輪前進(jìn) digitalWrite(IN3,HIGH); digitalWrite(IN4,LOW); //右輪前進(jìn) }
/************************************************** back子函數(shù)——后退子函數(shù) 函數(shù)功能:控制車后退 **************************************************/ void back( ) { digitalWrite(IN1,LOW); digitalWrite(IN2,HIGH); //左輪后退 digitalWrite(IN3,LOW); digitalWrite(IN4,HIGH); //右輪后退 }
/************************************************** turnLeft子函數(shù)——左轉(zhuǎn)子函數(shù) 函數(shù)功能:控制車左轉(zhuǎn) **************************************************/ void turnLeft( ) { digitalWrite(IN1,LOW); digitalWrite(IN2,LOW); //左輪靜止不動(dòng) digitalWrite(IN3,HIGH); digitalWrite(IN4,LOW); //右輪前進(jìn) }
/************************************************** turnbackLeft子函數(shù)——左后轉(zhuǎn)彎子函數(shù) 函數(shù)功能:控制車左后轉(zhuǎn)彎 **************************************************/ void turnbackLeft( ) { digitalWrite(IN1,LOW); digitalWrite(IN2,LOW); //左輪靜止不動(dòng) digitalWrite(IN3,LOW); digitalWrite(IN4,HIGH); //右輪后退 }
/************************************************** turnRight子函數(shù)——右后轉(zhuǎn)彎轉(zhuǎn)子函數(shù) 函數(shù)功能:控制車右后轉(zhuǎn)彎 **************************************************/ void turnRight( ) { digitalWrite(IN1,HIGH); digitalWrite(IN2,LOW); //左輪前進(jìn) digitalWrite(IN3,LOW); digitalWrite(IN4,LOW); //右輪靜止不動(dòng) }
/************************************************** turnbackRight子函數(shù)——右轉(zhuǎn)子函數(shù) 函數(shù)功能:控制車右轉(zhuǎn) **************************************************/ void turnbackRight( ) { digitalWrite(IN1,LOW); digitalWrite(IN2,HIGH); //左輪后退 digitalWrite(IN3,LOW); digitalWrite(IN4,LOW); //右輪靜止不動(dòng) }
/************************************************** turnLeftOrigin子函數(shù)——原地左轉(zhuǎn)子函數(shù) 函數(shù)功能:控制車原地左轉(zhuǎn) **************************************************/ void turnLeftOrigin( ) { digitalWrite(IN1,LOW); digitalWrite(IN2,HIGH); //左輪后退 digitalWrite(IN3,HIGH); digitalWrite(IN4,LOW); //右輪前進(jìn) }
/************************************************** turnRightOrigin子函數(shù)——原地右轉(zhuǎn)子函數(shù) 函數(shù)功能:控制車原地右轉(zhuǎn) **************************************************/ void turnRightOrigin( ) { digitalWrite(IN1,HIGH); digitalWrite(IN2,LOW); //左輪前進(jìn) digitalWrite(IN3,LOW); digitalWrite(IN4,HIGH); //右輪后退 }
/************************************************** stop子函數(shù)—停止子函數(shù) 函數(shù)功能:控制車停止 **************************************************/ void _stop() { digitalWrite(IN1,LOW); digitalWrite(IN2,LOW); //左輪靜止不動(dòng) digitalWrite(IN3,LOW); digitalWrite(IN4,LOW); //右輪靜止不動(dòng) } 這樣,我們就很成功地驅(qū)動(dòng)了小車,做了簡(jiǎn)單的運(yùn)動(dòng)啦~
第五步:藍(lán)牙模塊的功能檢測(cè) 這一步就是我們的關(guān)鍵了,連接好藍(lán)牙,那么我們就能通過(guò)藍(lán)牙來(lái)很好的控制小車,如果藍(lán)牙部分沒(méi)做好,那么我們前面的辛苦就白費(fèi)啦~好啦,話不多說(shuō),我們開(kāi)始吧。 首先我們要知道怎么讓arduino接收命令,他用的是Serial.read()語(yǔ)句來(lái)實(shí)現(xiàn)的,具體我就不多講了,在論壇里關(guān)于這一塊的多的是,大家去找找就能找到的。 其次注意的是這個(gè)命令的接受和發(fā)送,都會(huì)轉(zhuǎn)化為ASCII碼,所以在接收的時(shí)候,我們的命令以ASCII碼來(lái)判斷,或者用單引號(hào)來(lái) 幫助我們接收。例如:手機(jī)端如果發(fā)送了“1“,那么我們這邊接收到的是1的ASCII碼,所以我們?cè)谂袛嗍墙邮諑椎臅r(shí)候,我們要用case‘1’或者case49來(lái)判斷(注:1的ASCII碼是49)。 電腦的發(fā)送很簡(jiǎn)單,就是打開(kāi)“工具“中的”串口監(jiān)視器“。就可以發(fā)送命令了,藍(lán)牙的話,只要連接成功,通過(guò)小軟件也可以發(fā)送啦。 Ok,下面我們來(lái)一個(gè)簡(jiǎn)簡(jiǎn)單單的例子來(lái)練習(xí)發(fā)送和接收命令,然后再嘗試用藍(lán)牙來(lái)無(wú)線發(fā)送和接收。 小實(shí)驗(yàn):當(dāng)接收到1這個(gè)數(shù)字的時(shí)候,arduino的13號(hào)燈就亮起。收到2這個(gè)數(shù)的時(shí)候,就滅。(這里13號(hào)燈就是我們板子上的L燈,觀察它就行。) 我們首先先通過(guò)數(shù)據(jù)線連接電腦,讓電腦通過(guò)串口監(jiān)視器來(lái)給板子發(fā)送命令,看看是否達(dá)到我們要求。如果達(dá)到要求了,再把數(shù)據(jù)線退掉,加上藍(lán)牙模塊,通過(guò)手機(jī)連接好藍(lán)牙以后,設(shè)置好參數(shù),再給板子發(fā)送命令,來(lái)證明我們藍(lán)牙能夠正常工作。為我們后面的藍(lán)牙控小車檢測(cè)好藍(lán)牙。
注意:在下載程序的時(shí)候,不要連接藍(lán)牙設(shè)備,否則會(huì)下載失敗。 代碼:
void setup() { pinMode(13,OUTPUT); Serial.begin(9600); } int i; void loop() { if(Serial.available()>0) { i=Serial.read(); switch(i) { case'1': {digitalWrite(13,HIGH);break;} case'2': {digitalWrite(13,LOW);break;} } } }
終結(jié)篇:期待已久的激動(dòng)人心的藍(lán)牙操控小車車 我這里用的是九鍵控制小車,前后分別是2、8。1379是前后左右轉(zhuǎn),46是原地左右轉(zhuǎn)。 到了這里,我覺(jué)得已經(jīng)不用說(shuō)了,上程序,然后你就懂了。
/***************************************** 二輪藍(lán)牙小車 2015.05.01 ——by 極客工坊 血陽(yáng) ——王小豐 *****************************************/ #define IN1 4 #define IN2 5 //定義In1接arduino的4引腳,In2接5引腳 #define IN3 6 #define IN4 7 //定義IN3接arduino的6引腳,IN4接7引腳
void forward( ); void back( ); void turnLeft( ); void turnRight( ); void turnbackLeft( ); void turnbackRight( ); void turnLeftOrigin( ); void turnRightOrigin( ); void _stop(); //這里是把我們用到的函數(shù)都聲明一遍
void setup() { pinMode(IN1,OUTPUT); pinMode(IN2,OUTPUT); pinMode(IN3,OUTPUT); pinMode(IN4,OUTPUT); Serial.begin(9600); } int i; void loop() { if(Serial.available()) { i=Serial.read(); switch(i) { case'1': {turnLeft( ); break; } case'2': {forward( ); break;} case'3': {turnRight( ); break;} case'4': {turnLeftOrigin( ); break;} case'5': {_stop(); break;} case'6': {turnRightOrigin( ); break;} case'7': {turnbackLeft( ); break;} case'8': {back( ); break;} case'9': {turnbackRight( ); break;} } } }
/************************************************** forward子函數(shù)——前進(jìn)子函數(shù) 函數(shù)功能:控制車前進(jìn) **************************************************/ void forward( ) { digitalWrite(IN1,HIGH); digitalWrite(IN2,LOW); //左輪前進(jìn) digitalWrite(IN3,HIGH); digitalWrite(IN4,LOW); //右輪前進(jìn) }
/************************************************** back子函數(shù)——后退子函數(shù) 函數(shù)功能:控制車后退 **************************************************/ void back( ) { digitalWrite(IN1,LOW); digitalWrite(IN2,HIGH); //左輪后退 digitalWrite(IN3,LOW); digitalWrite(IN4,HIGH); //右輪后退 }
/************************************************** turnLeft子函數(shù)——左轉(zhuǎn)子函數(shù) 函數(shù)功能:控制車左轉(zhuǎn) **************************************************/ void turnLeft( ) { digitalWrite(IN1,LOW); digitalWrite(IN2,LOW); //左輪靜止不動(dòng) digitalWrite(IN3,HIGH); digitalWrite(IN4,LOW); //右輪前進(jìn) }
/************************************************** turnbackLeft子函數(shù)——左后轉(zhuǎn)彎子函數(shù) 函數(shù)功能:控制車左后轉(zhuǎn)彎 **************************************************/ void turnbackLeft( ) { digitalWrite(IN1,LOW); digitalWrite(IN2,LOW); //左輪靜止不動(dòng) digitalWrite(IN3,LOW); digitalWrite(IN4,HIGH); //右輪后退 }
/************************************************** turnRight子函數(shù)——右后轉(zhuǎn)彎轉(zhuǎn)子函數(shù) 函數(shù)功能:控制車右后轉(zhuǎn)彎 **************************************************/ void turnRight( ) { digitalWrite(IN1,HIGH); digitalWrite(IN2,LOW); //左輪前進(jìn) digitalWrite(IN3,LOW); digitalWrite(IN4,LOW); //右輪靜止不動(dòng) }
/************************************************** turnbackRight子函數(shù)——右轉(zhuǎn)子函數(shù) 函數(shù)功能:控制車右轉(zhuǎn) **************************************************/ void turnbackRight( ) { digitalWrite(IN1,LOW); digitalWrite(IN2,HIGH); //左輪后退 digitalWrite(IN3,LOW); digitalWrite(IN4,LOW); //右輪靜止不動(dòng) }
/************************************************** turnLeftOrigin子函數(shù)——原地左轉(zhuǎn)子函數(shù) 函數(shù)功能:控制車原地左轉(zhuǎn) **************************************************/ void turnLeftOrigin( ) { digitalWrite(IN1,LOW); digitalWrite(IN2,HIGH); //左輪后退 digitalWrite(IN3,HIGH); digitalWrite(IN4,LOW); //右輪前進(jìn) }
/************************************************** turnRightOrigin子函數(shù)——原地右轉(zhuǎn)子函數(shù) 函數(shù)功能:控制車原地右轉(zhuǎn) **************************************************/ void turnRightOrigin( ) { digitalWrite(IN1,HIGH); digitalWrite(IN2,LOW); //左輪前進(jìn) digitalWrite(IN3,LOW); digitalWrite(IN4,HIGH); //右輪后退 }
/************************************************** stop子函數(shù)—停止子函數(shù) 函數(shù)功能:控制車停止 **************************************************/ void _stop() { digitalWrite(IN1,LOW); digitalWrite(IN2,LOW); //左輪靜止不動(dòng) digitalWrite(IN3,LOW); digitalWrite(IN4,LOW); //右輪靜止不動(dòng) }
ok到這里就結(jié)束了,當(dāng)然,如果你想加入控制速度的代碼,也可以,就是在每個(gè)函數(shù)里面加入ENA和ENB的部分,然后讓他們接模擬引腳,再讓函數(shù)有個(gè)形參,就差不多了,看完這個(gè)之后,加上速度,應(yīng)該很簡(jiǎn)單的~~~最后,祝你好運(yùn),早日讓自己的小車跑起來(lái)哦~~
最后,若想要控制小車速度的話,這里有一個(gè)簡(jiǎn)單的例子,根據(jù)例子,稍微改一下程序,就可以輕松控制速度了。 http://www./for ... 14831&pid=98199
下面是附帶的整個(gè),教程pdf 和 手機(jī)藍(lán)牙串口。想下載的話可以在這下載哦~ 教程PDF: 手機(jī)藍(lán)牙串口app:
|