




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
ArduinoLWZ一、Arduino編程語 2、常量 while語句和do…while語 運算 函 數(shù)字I/O函 模擬I/O函 6、庫文件 二、Sabertooth電機驅(qū)動模塊應用實 1、工作模 Mode1:og Mode2:R/C Mode4:Packetized 2、應用實 PC軟件的編程思 、程序串 2同時控制小 三、TN901_TEST非接觸測溫模塊應用實 1、TN901工作原 2、應用實 (2)溫度函 3、多個TN模塊的應用實 四、氣體傳感器模塊應用實 1、應用實 五、火焰?zhèn)鞲衅髂K應用實 1、應用實 PC軟件的編程思 七、舵機模塊應用實 2、應用實 八、綜合實 1、驅(qū)動2臺舵機和電機的應用實 2、測3個測溫度、驅(qū)動電機的應用實 3、測3個測溫度、驅(qū)動2臺舵機和電機的應用實 4、測2個氣體、2個火焰、3個測溫度、驅(qū)動2臺舵機和電機的應用實 5、尋線、測2個氣體、2個火焰、3個測溫度、驅(qū)動2臺舵機和電機的應用實 一、ArduinoArduino語言是建立在C/C++unsigned 或 :表示引腳的電平,HIGH=1表示高電平,LOW=0表示低電平INPUTOUTPUT:INPUT表示引腳輸入電平,OUTPUT 或false :true表示真、對、1,false表示假、錯、0。注意:C語言區(qū)別大小寫字母。格式:if(條件為真 }if(a==2)b=4;if(a==2)注意:C語言用一個分號; 例:if(a==1){ //當變量a的值與1相等時,執(zhí)行b=2,c=3 }if(a==2)b=2; //當變量a的值與2相等時,執(zhí)行b=2 //當變量a的值與2不相等時,執(zhí)行格式:for(初始值;循環(huán)條件;步進語句){ for(i=1,b=0;i<=8;i++b++;初始化8b1i1循環(huán)內(nèi)容:{b++;}9i=9i<=8b++for(i=1,b=0;i<=5;i++)b++;初始化6i=6i<=5b++退出循環(huán)后,再執(zhí)行一次b++,因此最終b=6break continue語句:退出本次循環(huán),還會繼續(xù)后面的循環(huán)if(i=2) //i=2}if(i=2) //i=2}switchcase格式:switch(變量casecase2:}例:switch(a){ //當變量a有多種情況時使用switchcase1: //當a=1時,執(zhí)行以下代碼 //switch語case //a=2時,執(zhí)行以下 //switch語}格式:while(條件為真){ do }while(條件為真 } }while(i<1) 循環(huán)1次,結果i=1,b=1。=%自增 累積除+--與*<或-/>!非}例:void函數(shù)類型:void表示函數(shù)沒有返回值,intdigitalRead(pin):void void 例 //設置數(shù)字0號引腳為輸入模式 //1例 //設置數(shù)字0號引腳為高電平 intdigitalRead(pin):數(shù)字引腳的電平,函數(shù)結果為電平值,pin表示引腳號。例:a=digitalRead(0); //數(shù)字0號引腳電平,賦給變量a;b= intogRead(pin):模擬引腳的ADC值,函數(shù)結果為ADC值,pin表示引腳號。例:a=ogRead(0); //模擬0號引腳的ADC值,賦給變量a;b= ogRead(1); :延時函數(shù),單位是ms。2)delayMicroseconds(us):延時函數(shù),單位是us。min(x,y):求最小值。2)max(x,y):求最大值。3) 之間和fromHightoHigh之間。6)pow(base,exponent):開方函數(shù),baseexponent次方。7)sq(x):平方。int()sin(rad):正弦運算,rad單位是弧度。2)cos(rad):余弦運算,rad單位是弧度。3)tan(rad):正切運算,rad單位是弧度。2)longrandom(max):隨機數(shù)函數(shù),返回數(shù)據(jù)大于等于0,小于max。attachInterrupt(interrupt,mode)IO23,interrupt表示中斷口01,表示一個功能函數(shù),mode:LOW低電平中斷,CHANGE有變化就中斷,RISING上升沿中斷,F(xiàn)ALLING下降沿中斷。detachInterrupt(interrupt):中斷開關,interrupt=1開,interrupt=0 noInterrupts():中斷Serialn.begin(speed):設置串口的波特率,speed9600,115200intSerialn.available():判斷串口的緩沖器是否收到數(shù)據(jù)。3)intSerialn.read() :串口收到的數(shù)據(jù)。4) :清空緩沖器。6)Serialn.println(data):串口輸出數(shù)注意:Serialn寫成Serial表示程序的串口,Serialn的n取值為電子積木的串口序號。 //設置程序的串口的波特率為9600 //設置COM1串口的波特率為9600 //設置COM2串口的波特率為:庫名 說 EEPROM讀寫程 LCD IO TWI/I2C LED LED二、Sabertooth2.1Sabertooth og轉(zhuǎn)。撥碼開關5處于DOWN則對模擬電壓的響應是指數(shù)形式,處于UP則為線性形式。一般撥碼開關5處于UP,電機轉(zhuǎn)速比較容易控制。撥碼開關6處于UP則模擬電壓值輸入范圍為0-5V2.5V2.5V是正轉(zhuǎn),并且電壓越大轉(zhuǎn)速越快;小于2.5V6DOWN1.875V-3.125V。對于5V的單片機,撥碼開關6建議處于UP。對于3.3V的單片機,撥碼開關6只能處于DOWN。2.2Mode1單片機輸出經(jīng)過RC濾波器變成一個模擬電壓值傳給Sabertooth。建議頻率高于1000HZ。輸出連接到Sabertooth的S1接口則控制Motor1,連接到S2接口則控制2.3SabertoothMode2:R/CMode3:Simplified12UPDOWNMode345設置串2.4Mode36UP則單機模式,只2.4Mode38位數(shù)據(jù)位、無校驗、1位停止位。SabertoothMode3是單字節(jié)串口通信模式,S1接口是串口接收端,S2接口是模塊片選端。單字節(jié)Motor2,128是全速反轉(zhuǎn),192是停止,255是全速正轉(zhuǎn);0Motor1和Motor2都停止。2.5SabertoothMode4:Packetized12DOWNMode44、56設置多機通信中從機的地址,具體看圖2.6Mode4的撥碼開關設置。2.6Mode49600波特率、8位數(shù)據(jù)位、無校驗、1位停止位。Sabertooth的串口是TTL電平,對于連接到電腦需要外接RS-232。命令,參數(shù),校驗。第二字節(jié)是地址,就是撥碼開關的對應的Address值。15表示波特率設置:參數(shù)=1,波特率為參數(shù)=2,波特率為9600;參數(shù)=3,波特率為19200;2.6SabertoothCOMPC軟件傳過來的的控制小車運動命令。Sabertooth模塊連接到電子積木的COM1接口,處于工作模式Mode4:Packetizedserial,地址為130。Motor1連接小車前進方向左側的兩臺電機,Motor2Motor1Motor22.7Sabertooth{//控制電機1Serial1.print(130,BYTE);地址=130 //命令=0,Motor1 //效驗=(130+0+0)&0x7F=130&0x7F=2delay(5);//延時5ms//控制電機2Serial1.print(130,BYTE);地址=130 //命令=4,Motor2 //效驗=(130+4+0)&0x7F=134&0x7F=6}{char //控制電機1Serial1.print(130,BYTE);地址=130 //命令=0,Motor1 i=i&0x7F; //控制電機2Serial1.print(130,BYTE);地址=130 //命令=4,Motor2 i=i&0x7F; }{char //控制電機1Serial1.print(130,BYTE);地址=130 //命令=1,Motor1 i=i&0x7F; //控制電機2Serial1.print(130,BYTE);地址=130 //命令=5,Motor2 i=i&0x7F; },Motor2{char //控制電機1Serial1.print(130,BYTE);地址=130 //命令=0,Motor1正轉(zhuǎn) //參數(shù)=s,速度=s i=i&0x7F; //控制電機2Serial1.print(130,BYTE);地址=130 //命令=5,Motor2 i=i&0x7F; },Motor2voidturn_Lcharsvoidturn_L,參數(shù)chars{char //控制電機1Serial1.print(130,BYTE);地址=130 //命令=1,Motor1 i=i& delay(5);//延時5ms//控制電機2Serial1.print(130,BYTE);地址=130 //命令=4,Motor2 i=i&0x7F; }的調(diào)用。因此,上面定義了六個控制小車運動的函數(shù)(停止motor_stop、前進advance、后退back_off、右轉(zhuǎn)turn_R、左轉(zhuǎn)turn_L。下面再講如何調(diào)用這些函數(shù)實現(xiàn)控制小車的運動。Sabertooth模塊。電子積木的初始化內(nèi)容只能放在函數(shù)setup()。由于用到串口COM連接PC、串口COM1連接Sabertooth模塊,所以需要對它void{ //連接Sabertooth模塊的串口COM1的波特率為9600 //程序的串口COM的波特率為9600 //延時1000msSerial1.print(170,BYTE);//Sabertooth模塊的初始化,其第一個字節(jié)必須是170 }【2】串口的確有接收到數(shù)據(jù)時,再使用Serial.read(),并保存于變量val中,第1個字節(jié)是控制小車運動令。Serial.availableSerial.read()讀取數(shù)據(jù),并更新速度值(變量speed。①②③④void{charspeed; intval; //速度默認值為 if(Serial.available())//①Serial.available()表示判斷串口COM是否接收到 //ifval=Serial.read();//②串行COM的數(shù)據(jù),控制小車運動 //命令有多種情況,因而使用switch switchcase'W': advance(speed); //前進,速度為speed case'S': back_off(speed); //后退,速度為speed //控制后退的時間200ms case'A': //左轉(zhuǎn),速度為speed case'D': //右轉(zhuǎn),速度為speed case'L': case while(Serial.available()==0){}//③while循環(huán),強制要求接收第二個數(shù)據(jù),此數(shù)據(jù)為speed= switch //if }控制小車運動的鍵盤按鍵:前進T、后退G、左轉(zhuǎn)F、右轉(zhuǎn)H、停止K、速度+、速度-這必須與電子積木程序的switch語句各種情況一一對應。鍵盤按下T,則向串口發(fā)送字符W,電子積木在switch判斷出第一種情況,令小車前進一下。GSswitch判斷出第二種情況,令小車后退一下。鍵FAswitch判斷出第三種情況,令小車左轉(zhuǎn)一下。鍵盤按下H,則向串口發(fā)送字符D,電子積木在switch判斷出第四種情況,令小車右轉(zhuǎn)一下。鍵盤按下K,則向串口發(fā)送字符L,電子積木在switch判斷出第五種情況,令小車停止。+(speed增加)-(speed減?。㎝speed,電子積木在switch判斷出第六種情況,設置小車速度。延時200ms的函數(shù),最后執(zhí)行停止函數(shù)。advance(speed); //前進,速度為speed 將loop函數(shù)中黃色底紋的語句或刪除。的方法很簡單,在語句最前加“//”。voidloop(){charspeed; intval; //速度默認值為 if(Serial.available())//①Serial.available()表示判斷串口COM是否接收到 //ifval=Serial.read();//②串行COM的數(shù)據(jù),控制小車運動 //命令有多種情況,因而使用switch switchcase'W': advance(speed); //前進,速度為speed case'S': back_off(speed); //后退,速度為speed case'A': //左轉(zhuǎn),速度為speed case'D': //右轉(zhuǎn),速度為speed case'L': case while(Serial.available()==0){}//③while循環(huán),強制要求接收第二個數(shù)據(jù),此數(shù)據(jù)為speed=Serial.read(); switch //if }無線數(shù)傳模塊的通信協(xié)議:9600,N,8,1。PC程序通過無線數(shù)傳模塊控制小車??蓞⒖磳嵗鼳rduino2_3.pde。Arduino2_1.pde基礎上,添加無線數(shù)傳模塊,并連接到電子積木的串口COM2。注意選用足夠大功率的供電電源。因此,只需將實例Arduino2_1.pdeSerialSerial25處。void{ //連接Sabertooth模塊的串口COM1的波特率為9600 //連接無線數(shù)傳模塊的串口COM2的波特率為9600 Serial1.print(170,BYTE);//Sabertooth模塊的初始化,其第一個字節(jié)必須是170 }void{charspeed; intval; ))// //ifval=Serial2.read();//②串行COM的數(shù)據(jù),控制小車運動 switchcase'W': advance(speed); //前進,速度為speed case'S': back_off(speed); //后退,速度為speed //控制后退的時間200ms case'A': //左轉(zhuǎn),速度為speed case'D': //右轉(zhuǎn),速度為speed case'L': case while(Serial2.available()==0){}//③while循環(huán),強制要求接收第二個數(shù)據(jù),此數(shù)據(jù)為speed=Serial2.read(); switch //if }實例Arduino2_1.pde是使用程序的串口COM通信控制小車的運動;實例Arduino2_3.pdeCOM2通信控制小車的運動?,F(xiàn)在只需合并兩個由于COM和COM2的作用在本實例中是一樣的。它們是關系,因此,一個一個地執(zhí)行——這里先執(zhí)行COM程序的if(Serial.available()){},再執(zhí)行COM2程序if(Serial2.available()){}。由于它們作用一樣,所以這兩個大括號里面的內(nèi)容是一樣的,只是Serial與Serial2有區(qū)別??蓞⒖磳嵗鼳rduino2_4.pde。程序的流程圖如下:COMCOM2void{ //程序的串口COM的波特率為9600 //連接Sabertooth模塊的串口COM1的波特率為9600 //連接無線數(shù)傳模塊的串口COM2的波特率為9600 Serial1.print(170,BYTE);//Sabertooth模塊的初始化,其第一個字節(jié)必須是170 }void{charspeed; intval; if(Serial.available())//①Serial.available()表示判斷串口COM是否接收到 //ifval=Serial.read();//②串行COM的數(shù)據(jù),控制小車運動 switchcase'W': advance(speed); //前進,速度為speed case'S': back_off(speed); //后退,速度為speed //控制后退的時間200ms case'A': //左轉(zhuǎn),速度為speed case'D': //右轉(zhuǎn),速度為speed case'L': case speed=Serial.read(); switch //if))// //ifval=Serial2.read();//②串行COM的數(shù)據(jù),控制小車運動 switchcase'W': advance(speed); //前進,速度為speed case'S': back_off(speed); //后退,速度為speed //控制后退的時間200ms case'A': //左轉(zhuǎn),速度為speed case'D': //右轉(zhuǎn),速度為speed case'L': case while(Serial2.available()==0){}//③while循環(huán),強制要求接收第二個數(shù)據(jù),此數(shù)據(jù)為speed=Serial2.read(); switch //if }三、TN901_TEST3.1TN引腳:D是數(shù)據(jù)引腳,C是時鐘引腳(TN輸出時鐘A是模塊片選引腳(低電平為選中,高電平為不選中第1字節(jié)Item:Item=0x4C,表示物體溫度;Item=0x66,表示Ambiamt第2字節(jié)MSB:溫度字節(jié);4Sum:Sum=(Item+MSB+LSB)&0xFF;第5字節(jié)CR:CR=0x0D1:物體溫度Item=0x4C,MSB=0x14,LSB=0x2A,Sum=(0x4C+0x14+0x2A)&0xFF=0x8A&0xFF=0x8A,溫度值=0x142A/16-273.15=49.475例2:Ambiamt溫度Item=0x66,MSB=0x12,LSB=0xC3Sum=(0x66+0x12+0xC3)&0xFF=0x13B&0xFF=0x3B,CR=0x0D。溫度值=0x12C3/16-273.15=27.03#defineClockPin16//TN_C引腳#defineDataPin17//TN_D引腳#defineTestPin18//TN_A引腳首先TN_A=0,模塊處于被選狀態(tài)。此時,TN_C引腳才輸出,TN_D引腳才輸出值。電子積木需要讀出這兩根引腳的電平來溫度值。以下是根據(jù)圖3.2TN模塊SPI時序編非選中狀態(tài),TN_C停止輸出時鐘。voiddata_read(int*p)//void表示函數(shù)無結果,函數(shù)名稱data_read,int*p保存的5個字{intdigitalWrite(TestPin1,LOW); { //每個字節(jié)占8位,即8個時{PinState= //延時100usPinState=digitalRead(DataPin1); if(1== tempData(tempData<<1&0xfe)+1;當TN_D=高電平,左移1位并+1tempData=(tempData<<1&0xfe); PinState= }while(PinState!= //如果TN_C=低電平,繼}*p } //TN_A=1,不選中模塊,模塊停止輸出時}void{ //TN_A引腳輸入狀態(tài)digitalWrite(TestPin1,HIGH); //TN_A=1,非選中TN模塊 }void{intdata_buf[5 //保存讀出TN模塊的5inttempData //while的循環(huán)條件為1,即都循環(huán){}里的內(nèi) //while循環(huán) tempData=data_buf[1]<<8+data_buf[2]; //tempData=MSB<<8+LSB=MSB*256+LSBfloatrealTemp=(float)tempData/16-273.15;//轉(zhuǎn)換成溫度值,單位是攝氏度 通過串口 //while循環(huán)}TNC、DA678TNC、DA9、10116789void{ //TN1號模 digitalWrite(TestPin1,HIGH); //TN2號模 digitalWrite(TestPin2,HIGH); //TN3號模 digitalWrite(TestPin3,HIGH); }Arduino3_1.pdeTN模塊,可以為每個模塊寫一個獨kiinti可參看實例Arduino3_2.pde。//int*p保存的5個字節(jié),ClockPin是TN_C,DataPin是TN_D,TestPin是voiddata_read(int*p,intClockPin,intDataPin,int{intdigitalWrite(TestPin,LOW); { //每個字節(jié)占8位,即8個時{PinState= PinState=digitalRead(DataPin); if(1== tempData(tempData<<1&0xfe)+1;當TN_D=高電平,左移1位并+1tempData=(tempData<<1&0xfe); PinState= }while(PinState!= //如果TN_C=低電平,繼}*p } //TN_A=1,不選中模塊,模塊停止輸出時}void{intdata_buf[5 //保存讀出TN模塊的5inttempData=0; floatrealTemp; //while的循環(huán)條件為1,即都循環(huán){}里的內(nèi) //while循環(huán)//TN1號模data_read(data_buf,ClockPin1,DataPin1,TestPin1);//溫度值,并保存于數(shù)組data_buf中tempData=data_buf[1]<<8+data_buf[2]; //tempData=MSB<<8+LSB=MSB*256+LSBrealTemp=(float)tempData/16-273.15; //TN2號模data_read(data_buf,ClockPin2,DataPin2,TestPin2);//溫度值,并保存于數(shù)組data_buf中tempData=data_buf[1]<<8+data_buf[2]; //tempData=MSB<<8+LSB=MSB*256+LSBrealTemp=(float)tempData/16-273.15; //TN3號模data_read(data_buf,ClockPin3,DataPin3,TestPin3);//溫度值,并保存于數(shù)組data_buf中tempData=data_buf[1]<<8+data_buf[2]; //tempData=MSB<<8+LSB=MSB*256+LSBrealTemp=(float)tempData/16-273.15; //while循環(huán)}與實例Arduino3_2.pde相比,此實例中每個TN模塊擁有一個獨立溫度的函數(shù)。可參看實例Arduino3_3.pde。//TN1模voiddata_read1(int*p)//void表示函數(shù)無結果,函數(shù)名稱data_read1,int*p保存的5個字{intdigitalWrite(TestPin1,LOW); { //每個字節(jié)占8位,即8個時{PinState= //延時100usPinState=digitalRead(DataPin1); if(1== tempData(tempData<<1&0xfe)+1;當TN_D=高電平,左移1位并+1tempData=(tempData<<1&0xfe); PinState= }while(PinState!= //如果TN_C=低電平,繼}*p } //TN_A=1,不選中模塊,模塊停止輸出時}//TN2號模voiddata_read2(int*p)//void表示函數(shù)無結果,函數(shù)名稱data_read1,int*p保存的5個字{intdigitalWrite(TestPin2,LOW); { //每個字節(jié)占8位,即8個時{PinState= //延時100usPinState=digitalRead(DataPin2); if(1== tempData(tempData<<1&0xfe)+1;當TN_D=高電平,左移1位并+1tempData=(tempData<<1&0xfe); PinState= }while(PinState!= //如果TN_C=低電平,繼}*p } //TN_A=1,不選中模塊,模塊停止輸出時}//TN3號模voiddata_read3(int*p)//void表示函數(shù)無結果,函數(shù)名稱data_read1,int*p保存的5個字{intdigitalWrite(TestPin3,LOW); { //每個字節(jié)占8位,即8個時{PinState= //延時100usPinState=digitalRead(DataPin3); if(1== tempData(tempData<<1&0xfe)+1;當TN_D=高電平,左移1位并tempData=(tempData<<1&0xfe); PinState= }while(PinState!= //如果TN_C=低電平,繼}*p } //TN_A=1,不選中模塊,模塊停止輸出時}void{intdata_buf[5 //保存讀出TN模塊的5inttempData=0; floatrealTemp; //while的循環(huán)條件為1,即都循環(huán){}里的內(nèi) //while循環(huán)//TN1號模 tempData=data_buf[1]<<8+data_buf[2]; //tempData=MSB<<8+LSB=MSB*256+LSBrealTemp=(float)tempData/16-273.15; //TN2號模 tempData=data_buf[1]<<8+data_buf[2]; //tempData=MSB<<8+LSB=MSB*256+LSBrealTemp=(float)tempData/16-273.15; //TN3號模 tempData=data_buf[1]<<8+data_buf[2]; //tempData=MSB<<8+LSB=MSB*256+LSBrealTemp=(float)tempData/16-273.15; //while循環(huán)}void{ 串 的波特率為}void{intval;{ 以十進制形式發(fā)送模擬值,并發(fā)送回車換 //延時}}void{ 串 的波特率為}void{intval;{ 以十進制DEC形式發(fā)送模擬值,并發(fā)送回車換 以十進制DEC形式發(fā)送模擬值,并發(fā)送回車換 //延時}}5.1void{ //串口COM的波特率為pinMode(1 //數(shù)字引腳1輸}void{intval;{ //火焰?zhèn)鞲衅鬏敵瞿M //通過串口COM發(fā)送回PC if(val<600)digitalWrite(1,HIGH);//如果模擬值<600,則數(shù)字引腳1輸出高電平elsedigitalWrite(1,LOW); //否則數(shù)字引腳1輸出低電平 //}}void{ //串口COM的波特率為}void{intval;{ //1號火焰?zhèn)鞲衅鬏敵瞿M //通過串口COM發(fā)送回 //以十進制形式發(fā)送模擬值,并發(fā)送回車換 //2號火焰?zhèn)鞲衅鬏敵瞿M信 //通過串口COM發(fā)送回 //以十進制形式發(fā)送模擬值,并發(fā)送回車換 //}}六、DF-miniLTV3DF-miniLTV3尋線模塊工作電源+5V,是根據(jù)紅外線對反射原理(深色反射弱,淺色反射強)1cm1電機。尋線傳感器連接到電子積木的數(shù)字引腳3、4和5??蓞⒖磳嵗鼳rduino6_1.pde。intIRR=3;//定義右側尋線傳感器接口intIRM=4;//定義中間尋線傳感器接口intIRL=5;//定義左側尋線傳感器接口void{ //連接Sabertooth模塊的串口COM1的波特率為9600 //延時1000msSerial1.print(170,BYTE);//Sabertooth模塊的初始化,其第一個字節(jié)必須是170 pinMode(IRR,INPUT);//設置右側尋線傳感器接口輸入pinMode(IRM,INPUT);//設置中間尋線傳感器接口輸入pinMode(IRL,INPUT);//設置左側尋線傳感器接口輸入}void{intchar { //右側尋線傳感器接口電平 if(l==HIGH&&m==LOW&&r==HIGH) advance elseif(l==LOW&&m==HIGH&&r==HIGH) //左轉(zhuǎn),速度為speedelseif(l==HIGH&&m==HIGH&&r==LOW) //右轉(zhuǎn),速度為speed }}【4】 ,三個尋線模塊安裝太近,能同時對著黑線【5】l=m=LOW,r=HIGH,左中尋線模塊安裝太近,能同時對著黑【6】l=r=LOW,m=HIGH,左右尋線模塊安裝太近,能同時對著黑【7】m=r=LOW,l=HIGH,右中尋線模塊安裝太近,能同時對著黑 Arduino6_1.pde的(1(2)一樣。void{ //程序的串口COM的波特率為9600 //連接Sabertooth模塊的串口COM1的波特率為9600 //延時1000msSerial1.print(170,BYTE);//Sabertooth模塊的初始化,其第一個字節(jié)必須是170 pinMode(IRR,INPUT);設置右側尋線傳感器接口輸入pinMode(IRM,INPUT);//設置中間尋線傳感器接口輸入pinMode(IRL,INPUT);//設置左側尋線傳感器接口輸入}void{intval;char //isIR=1啟動尋線,isIR=0charspeed;//小車的運動速度speed=64;//速度默認值為64{ if(l==HIGH&&m==LOW&&r==HIGH) advance elseif(l==LOW&&m==HIGH&& //符合情況【3 elseif(l==HIGH&&m==HIGH&& if(Serial.available())//Serial.available()COM //if //串行COM的數(shù)據(jù),控制小車運動 //switch switchcase val= if(val=='1') //如果第二個數(shù)據(jù)為1 switch //if //while}ZP1(=0x31,電子積木在switch判斷出第七種情況,0(=0x30位置是靠控制(脈沖寬度調(diào)制)信號的占空比來實現(xiàn)的。標準信號的周期固定20ms0.5~2.5ms的正脈沖寬度和舵機的轉(zhuǎn)角-90度~+90度相對應。舵機轉(zhuǎn)動時電要接到外部供電。USB供電已經(jīng)不足夠了。舵機根據(jù)控制信號腳上不同占空比的,會旋轉(zhuǎn)到固定角度。如果這個的占空比存在微小變化,舵機在固定角度左右微小抖動;如果這個存在較大變化(周期不固定或者占空比不固定7.1Arduino提供了一個很好的舵機調(diào)用函數(shù)庫,可以讓Arduino任意IO口控制舵機。可參看實例Arduino7_1.pde。最后用sevon.write(w)控制轉(zhuǎn)動角度w。#include<Servo.h>//舵機庫頭文件Servoservo1; //1號舵機Servo Servo void{ servo2.attach(16);//2號舵機使用16號引servo3.attach(17);//3號舵機使用17號引}void{staticintcharch=Serial.read();//COM的數(shù)據(jù)case //ASCII碼轉(zhuǎn)成數(shù)字,再case //數(shù)據(jù)后帶a1 case //數(shù)據(jù)后帶b2 case //數(shù)據(jù)后帶c3 }例如:電子積木收到串口數(shù)據(jù):85a18590b2900~180-90~+90非庫形式產(chǎn)生周期為20ms的,主要放在loop函數(shù),利用循環(huán)改變引腳電平來實現(xiàn)的。可參看實例Arduino7_2.pde。如果loop函數(shù)還有其它地方消耗時間,這非常影響到的周期和占空比,特別是這種消耗時間還是不固定的。這樣對舵機產(chǎn)生影響了。1:loop(){servopulse(sp1,sa1,sp2,sa2);}servopulse20ms的方波。特別注意,串口命令會消耗一些時間,令程序產(chǎn)生周期大于20ms的。因此,1、2、3、4號舵機分別連接到電子積木的數(shù)字引腳、、、。注意選用足夠大功servopin1=15;//定義舵機接口數(shù)字servopin2=16;//定義舵機接口數(shù)字servopin3=17;//定義舵機接口數(shù)字servopin4=18;//定義舵機接口數(shù)字sp1、sa11號舵機的數(shù)字引腳、角度級別。sp2、sa22號舵機的數(shù)字引腳、角度級別。sp3、sa33號舵機的數(shù)字引腳、角度級別。sp4、sa44號舵機的數(shù)字引腳、角度級別。這里將角度180度劃分為10級,級別分別為0-9。首先,引腳spn輸出高電平delayMicroseconds(220)spndigitalWrite(spn,LOW)。驅(qū)動2臺舵機的函數(shù):voidservopulse(intsp1,intsa1,intsp2,intsa2)//定義一個脈沖函{char //1號舵機接口電平至 //2號舵機接口電平至 // //1.98ms的脈 if(j==sa1)digitalWrite(sp1,LOW);//1號舵機接口電平至if(j==sa2)digitalWrite(sp2,LOW);//2號舵機接口電平至} // //}voidservopulse(intsp1,intsa1,intsp2,intsa2,intsp3,int{char //1號舵機接口電平至 //2號舵機接口電平至 //3號舵機接口電平至 // //1.98ms的脈 if(j==sa1)digitalWrite(sp1,LOW);//1號舵機接口電平至if(j==sa2)digitalWrite(sp2,LOW);//2號舵機接口電平至if(j==sa3)if(j==sa3)digitalWrite(sp3,LOW);//3號舵機接口電平至} // //}voidservopulse(intsp1,intsa1,intsp2,intsa2,intsp3,intsa3,intsp4,int{char //1號舵機接口電平至 //2號舵機接口電平至 // //1.98ms
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 玫瑰歌唱比賽活動方案
- 理發(fā)店創(chuàng)意活動方案
- 愛國朗讀活動方案
- 愛琴海購跨年活動方案
- 烘焙店創(chuàng)意活動方案
- 物業(yè)公司開學活動方案
- 物業(yè)母親活動方案
- 物業(yè)崗位比武活動方案
- 愛心志愿接力活動方案
- 理想端午活動策劃方案
- 部編版小學五年級下冊語文《15.自相矛盾》教案
- 高清視頻編碼器中文說明書H265
- 建筑采光分析報告書
- 先張法預應力空心板梁監(jiān)理實施細則
- 貴州省銅仁市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名明細居民村民委員會
- 統(tǒng)編部編版小學四年級上冊語文詞語表(帶拼音)
- 2022更新國家開放大學電大本科《運輸管理》2023-2024期末試題及答案(試卷代號:1448)
- 北京市西城區(qū)2021-2022學年八年級下學期期末考試語文試題(WORD版無答案)
- 會計師事務所工程財務決算審核報告
- 上海小學語文四年級上冊詞語表(共3頁)
- 超聲回彈綜合法計算表(帶公式)
評論
0/150
提交評論