一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

從菜鳥(niǎo)到完美掌控arduino藍(lán)牙小車

 ID被吃 2016-03-15
本帖最后由 血陽(yáng) 于 2015-8-21 14:29 編輯

在寫這篇帖子之前,先感謝前段時(shí)間,在論壇里,為我耐心解答的大神朋友們,無(wú)論我問(wèn)出什么奇葩的問(wèn)題,都能為我耐心解答,真心感謝你們。
先上視頻吧,雖然拍的不是很好;

小車照片:
小車1.jpg小車2.jpg小車3.jpg









基礎(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è)口)給供電了。

arduino板子.jpgL298N電機(jī)驅(qū)動(dòng)模塊.jpg
arduino Bluetooth.jpg
Bluetooth 擴(kuò)展板.jpg小車底盤.jpg


接下來(lái),我們先介紹一下這個(gè)L298N電機(jī)驅(qū)動(dòng)板模塊吧,它直接影響到我們后面的編程。
L298N電機(jī)驅(qū)動(dòng)模塊說(shuō)明.jpg
      相關(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同理)

輸出表.jpg


      最后,我們來(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)方式:

運(yùn)動(dòng)狀況.jpg

     有了這個(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:
我的arduino教程.pdf(749.25 KB)
(下載次數(shù): 364, 2015-5-1 23:49 上傳)

手機(jī)藍(lán)牙串口app:
藍(lán)牙串口助手 v1.97.rar(51.53 KB)
(下載次數(shù): 344, 2015-5-2 00:01 上傳)

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    国产精品伦一区二区三区四季| 黑人粗大一区二区三区| 久久人人爽人人爽大片av| 三级理论午夜福利在线看| 国产成人在线一区二区三区| 麻豆视传媒短视频免费观看| 日韩不卡一区二区视频| 99福利一区二区视频| 免费一级欧美大片免费看| 欧美一区二区三区在线播放| 少妇高潮呻吟浪语91| 国产精品激情对白一区二区| 国产精品一级香蕉一区| 亚洲深夜精品福利一区| 精品国模一区二区三区欧美| 日韩中文无线码在线视频| 久久本道综合色狠狠五月| 二区久久久国产av色| 日韩成人高清免费在线| 91日韩在线视频观看| 日韩精品视频一二三区| 国产精品熟女乱色一区二区 | 婷婷基地五月激情五月| 少妇人妻无一区二区三区| 亚洲精品伦理熟女国产一区二区| 国产黑人一区二区三区| 国产成人精品国产成人亚洲| 精品一区二区三区乱码中文| 国产传媒高清视频在线| 日韩欧美国产精品中文字幕| 国产永久免费高清在线精品| 日本午夜精品视频在线观看| 91欧美亚洲精品在线观看| 一区二区三区免费公开| 日本欧美一区二区三区高清| 在线观看中文字幕91| 欧美一区二区三区视频区| 国产一区欧美午夜福利| 亚洲最新av在线观看| 91亚洲国产日韩在线| 亚洲欧美日韩综合在线成成|