版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
曾FFF安F摘要:本項目設(shè)計實現(xiàn)基于安卓平臺藍(lán)牙通信的小車控制??刂葡到y(tǒng)由車載設(shè)備和設(shè)備組成,小車以STC系列的STC11L02系列51單片機與藍(lán)牙模塊為,使用以Eclipse搭建的安卓應(yīng)用程序,: 開發(fā)背 項目任 2.1控制 2.2小車改 小車的選擇與改 小車本身的缺 檢測與改 的改 安卓平臺部 編譯與調(diào)試環(huán) 安卓平臺搭 單片機平臺部 編譯環(huán)境與功能實 程序燒 基本功能說 附加功能的實 多方位控 自由路 數(shù)次性的改變,從有線到無線,從一對一到一對多,從簡單繁多。而到如今,平臺也已成為一項十分熱門的開發(fā)目標(biāo),在眾多的平臺中,安卓憑借其不斷成系統(tǒng)構(gòu)架和方便強大多元編譯環(huán)境功能獨樹一幟。安卓是以Linux為的手再是以前只能使用Java開發(fā)安卓應(yīng)用程序的單一局面,因而受到眾多開發(fā)者的歡迎,成為真正意義上的開放式操作系統(tǒng)。在安,開發(fā)者可以使用Java
1.1.1以通過NDK使用C/C++作為編程語言來開發(fā)應(yīng)用程序,也可使用SL4A來使用其他語言行編程(如:python、lua、tcl、php等等),還有其他諸如:Qt、Mono等一些著名編程框架也開始支持安卓編程,甚至通過MonoDroidC#作為編程語言來開發(fā)應(yīng)用程序。另外,2009年特別發(fā)布了針對初學(xué)者的安卓SimpleBasic語言。而在網(wǎng)頁編程語言方面,JavaScript、ajax、HTML5、jquery、sencha、dojo、mobl、PhoneGap等等都已經(jīng)支持安卓開發(fā)。因此,以安卓平臺作為控制媒介的開發(fā)具有相當(dāng)大的潛在價值與意義。本次項目的任務(wù)為,造(或改造)一輛小車,用戶能夠在遠(yuǎn)處對它進行控制,可通過、嵌入式開發(fā)板(9B96)、開發(fā)板、開發(fā)軟件的模擬器等作為控制媒介,優(yōu)先考慮無線模式。為了達到控制小車的目的,需要對所用小車的工作方式進行確定,可以考慮在簡單小車上加裝控制系統(tǒng),以確定控制小車的具體方式(如通過端口電平的高低進行控制,通過改變電機兩端電壓極性進行控制等),然后再通過平臺將上述的指令方式通過合適的傳輸方法使小車正確接收,即可達到控制效果。此方案缺點在于控制設(shè)備的難度過大,且不能夠很好地保證自行在市面上可以很輕松地買到簡單的無線玩具小車,其小車結(jié)構(gòu)較為簡單,控制方法也相當(dāng)簡易,屬于現(xiàn)有的比較好的可用資源,如果考慮使用控制,再通過控制小車,則圖2.2.1小車與小車的控制一般是通過一定頻率的無線發(fā)射控制信號到車體上,并對相應(yīng)的控制對象的電信號進行控制,比如置高電平或置低電,使得相應(yīng)的接口形成通路,電機達到規(guī)定的動作標(biāo)準(zhǔn),如前進、后退、左轉(zhuǎn)或右轉(zhuǎn)等,下圖為控制端的舉例示意。根據(jù)以上的已有信息,我們可以確定,只要能夠做到用控制相應(yīng)控制端口的信號輸出,即可實現(xiàn)對小車的控制。一般情況下,對于利用高低電平控制端口信號的控制器來說,可集成屬性,因此在與控制器之間可通過單片機作為媒介,發(fā)送控制信號到單片機,單片機做出相應(yīng)的響應(yīng),即對對應(yīng)端口置高或低電平,完成對小車的控制,于是我們選定此思路為2.2.3無線,充電器與充電電池3.1.1玩具小車與我們對小車本身的性能進行了檢測,發(fā)現(xiàn)了一系列的問題,可能會影響到后續(xù)的控制小車問題一:小車電池使用短,單次充電時間超過8h,單次充電有效使用時間約5min。解決方法:將直接與小車固定。451.2所用單片機是ATMEL公司的STC系列的STC11L02系列51單片機,主要性能參數(shù)如下8CPU8KFlashROM;1000次可擦寫周期;3級加密程序器3.2.2RS232PCB版上,使得單片機能夠通過藍(lán)牙獲取外界指令(來自手3.2.3軟件部分主要為兩部分程序的編寫,其一為安卓平臺上用戶操作界面和指令發(fā)送系統(tǒng)的搭安卓平臺部由于安卓平臺軟件開發(fā)多以JAVA語言編程為主,因此我們采用Eclipse軟件進行用戶界面的編OracleVMVirtualBoxX86Android2.2IP地址EclipseEclipse1控制小車動作一共需要五個按鈕,即:前進、后退、左轉(zhuǎn)、右轉(zhuǎn)和停止。于是我們在2安卓平臺的信息傳輸依靠的是藍(lán)牙通信方式,因此,我們調(diào)用了藍(lán)牙配置器類,并且設(shè)定將用于通信的變量存放于緩存區(qū)message中。五個按鈕按下后發(fā)送到緩存區(qū)的字符分別為:‘1’-與此同時要注意對控制目標(biāo)藍(lán)牙MAC地址的錄入,保證控制對象唯一且有效,需要事先通過MAC地址,然后直接輸入到編寫的程序中去。對于按鈕動作,簡單的按動動作分為兩個部分,其一為按下,其二為松開,具體配置為:當(dāng)按下某一特定按鈕時,向緩存區(qū)寫入字符‘X’(X為上文事先規(guī)定的字符),當(dāng)松開時,自動mButtonF.setOnTouchListener(newButton.OnTouchListener(){publicbooleanonTouch(Viewv,MotionEventevent)//TODOAuto-generatedmethodstubStringmessage;byte[]intaction={casetryoutStream=//Toast.makeText(SchoolFlower2Activity.this,String.format("%d",a),}catch(IOExceptione){Toast.makeText(SchoolFlower2Activity.this,e.getMessage(),Log.e(TAG,"ONRESUME:Outputstreamcreationfailed.",}message=msgBuffer=try{Toast.makeText(SchoolFlower2Activity.this,message,}catch(IOExceptione){Toast.makeText(SchoolFlower2Activity.this,e.getMessage(),Log.e(TAG,"ONRESUME:Exceptionduringwrite.",}casetryoutStream=}catch(IOExceptione){Toast.makeText(SchoolFlower2Activity.this,e.getMessage(),Log.e(TAG,"ONRESUME:Outputstreamcreationfailed.",}message=msgBuffer=try{Toast.makeText(SchoolFlower2Activity.this,message,}catch(IOExceptione){Toast.makeText(SchoolFlower2Activity.this,e.getMessage(),Log.e(TAG,"ONRESUME:Exceptionduringwrite.",}}return}限于計算機本身兼容性原因,我們選擇的單片機編譯環(huán)境為KeiluVision2,通過單片機對引腳P3^2、P3^3、P3^4、P3^5,分別對應(yīng)前進、后退、左轉(zhuǎn)、右轉(zhuǎn)(由焊接時的實際連接決定),由于在安卓平臺部分已對指令信號作出了規(guī)定,因此我們運用了多重語句,對不同的獲得信息作出不同的反應(yīng),即對要求的寬口賦“0”(等效為置低電平),對不需”()單片機的程序燒錄是基于RS232通信線以及燒錄進行的,USB端接電腦,TxD接無線發(fā)送模塊的數(shù)據(jù)端VccVcc相連GNDGND連接。電腦端需使用USBRS232驅(qū)動。燒錄軟件我們選用了宏晶科技的STC-ISP進行單片機握手與程序燒錄。STC-ISP電腦型號:聯(lián)想lenovo昭陽E-43操作系統(tǒng)為WIN7旗艦版 單片機程序編寫環(huán)境:KeilμVision2i.MCU3點擊”USBSTCEclipseAPK,在安卓上安裝成功,然后開啟藍(lán)牙,與小車藍(lán)牙模塊成功配對。這樣,即可通過按下界面5.1.15個控制按鈕的基礎(chǔ)上,考慮到小車實際操作時用戶對靈活性的要求,我們按照原按JAVA對圖形化界面的強大編輯能力,可以通過窗體架構(gòu)下已有的坐標(biāo)體系編程實現(xiàn)用戶基礎(chǔ)部分能夠完整地實現(xiàn)控制小車動作的任務(wù),但由于受到小車本身質(zhì)量的影響,在運行1、自由路徑控制通過控制轉(zhuǎn)彎作用時長對小車動作進行調(diào)整,但時長的確定不僅受到小車本身轉(zhuǎn)彎能力的限制,還受到小車行駛場地和車輪材料的限制,不適宜的場合會造成打滑,直接影響2、小車方向會隨路徑點選取而發(fā)生改變,并未將方向隨時還原為正北,操控時需要另外注意。對于像本文中的玩具小車那樣的類型,在日后更加充沛的時間與經(jīng)費支持下,可以做出的3c,一個新的科創(chuàng),沒有學(xué)長的報告,沒有固定的思維模式,沒有具體的方法步驟,對我們來說是一個,但的是對我們對于只是理解和融會貫通的要求。助下,我們用萬用表對板子進量檢查,最終找出了問題的根源將其解決。雖然在發(fā)現(xiàn)我們的硬——通過無線通信控制小車,更重要的是,拓展功能設(shè)定一條多邊形封閉路徑,讓其自動循首先,因為有了科創(chuàng)2B的基礎(chǔ),開始的時候覺得這些任務(wù)不是很難,后來慢慢到利用安卓系統(tǒng)進行無線是一項新的技術(shù),需要完成基于Eclipse的Android開發(fā)環(huán)境搭建、在VirtualBox虛擬環(huán)境下的Android調(diào)試與開發(fā)等諸多的軟件任務(wù)。此次科創(chuàng)中,我主要負(fù)責(zé)了硬件我們要更加注重對基礎(chǔ)知識的了解,很多問題并不是很大,都是出自于我們的粗心以及對基起初被科創(chuàng)3的題目吸引,最后決定選修此門課程。那時我已經(jīng)做好了迎接的心理準(zhǔn)備。第三周聽完老師的講座我對科創(chuàng)3有了基本的了解。隨后我們小組便投入到“藍(lán)牙控制小車行333結(jié)束了,但是它帶給我們的意義遠(yuǎn)不止一次實踐活——是真正想要或多或少地學(xué)到一些東西。作為新開設(shè)的科創(chuàng)項目,在沒有任何前屆學(xué)長經(jīng)驗支持了許許多多的:編寫好的用戶界面無法在上正常運行,連打開都無法打開;小車本身的遙控性能不如人意,更不用說再用控制;單片機的程序燒錄與握手連接一直不成功;小車的藍(lán)牙模塊和無法正確配對傳輸指令……雖然有過一定的思想準(zhǔn)備,可遇到這么多讓我們措手不及的問題還是不免讓人絕望,好在我們并沒有放棄,在助教、老師的指導(dǎo)和身邊的鼓勵下,一次6debug下,4個小時幾十次地調(diào)整嘗試后,恐中,只要我們邁出腳步,一路走過,回首的時候,我們會收獲意想不到的美麗。——曾謝開設(shè)這門課程并負(fù)責(zé)最終檢驗的的老師,是他給我們寬松的氛圍、齊備的材料,才使我們有信心和實力去做這個科創(chuàng)實驗。其次要感謝的是輪流在給予我們悉心指導(dǎo)的各位助教,是受益匪淺,也是我們能順利做完課程實驗不可缺少的因一。還要感謝教授在小車固件改造在和我們一起做實驗,給我們幫助指導(dǎo)的其他組同學(xué),與他們在一起做科創(chuàng)實驗我們互相學(xué)III-C《JAVABruce程序: <?xmlversion="1.0"encoding="utf- >>>>>>>>>SchoolFlower2Activity.java//主程序1packagecom.Android.SchoolFlower2;importandroid.app.Activity;importandroid.os.Bundle;importandroid.os.Handler;importimportjava.io.OutputStream;importjava.util.UUID;importjava.util.concurrent.Semaphore;importandroid.app.Activity;importimportimportandroid.bluetooth.BluetoothSocket;importandroid.content.DialogInterface;importandroid.content.DialogInterface.OnClickListener;importandroid.graphics.Canvas;importandroid.graphics.Color;importandroid.graphics.Paint;importimportimport importimportandroid.view.MotionEvent;importandroid.view.SurfaceHolder;importandroid.view.SurfaceView;importandroid.view.View;importandroid.widget.Button;importandroid.widget.Toast;publicclassSchoolFlower2ActivityextendsActivity{privateinta=0;privatestaticfinalStringTAG="THINBT privatestaticfinalbooleanD=true;privateBluetoothAdaptermBluetoothAdapter=null;privateBluetoothSocketbtSocket=null;privateOutputStreamoutStream=null;ButtonmButtonF;ButtonButtonButtonButtonButtonButtonSurfaceViewSurfaceHolderSemaphoresurface_ready=newSemaphore(0);PathManagerpm=newPathManager();privatestaticfinalUUIDMY_UUID=UUID.fromString(" privatestaticStringaddress"00:10:04:08:00:30"要連接的藍(lán)牙/**Calledwhentheactivityisfirstcreated.*/publicvoidonCreate(BundlesavedInstanceState)publicbooleanonTouch(Viewv,MotionEventevent)//TODOAuto-generatedmethodstubStringmessage;byte[]intaction=event.getAction();{casetryoutStream=//Toast.makeText(SchoolFlower2Activity.this,String.format("%d",a),}catch(IOExceptione){Toast.makeText(SchoolFlower2Activity.this,e.getMessage(),Log.e(TAG,"ONRESUME:Outputstreamcreationfailed.",}message=msgBuffer=try{Toast.makeText(SchoolFlower2Activity.this,message,}catch(IOExceptione){Toast.makeText(SchoolFlower2Activity.this,e.getMessage(),Log.e(TAG,"ONRESUME:Exceptionduringwrite.",}casetryoutStream=}catch(IOExceptione){Toast.makeText(SchoolFlower2Activity.this,e.getMessage(),Log.e(TAG,"ONRESUME:Outputstreamcreationfailed.",}message=msgBuffer=try{Toast.makeText(SchoolFlower2Activity.this,message,}catch(IOExceptione){Toast.makeText(SchoolFlower2Activity.this,e.getMessage(),Log.e(TAG,"ONRESUME:Exceptionduringwrite.",}}return}publicbooleanonTouch(Viewv,MotionEventevent)//TODOAuto-generatedmethodstubStringmessage;byte[]intaction=event.getAction();{casetryoutStream=//Toast.makeText(SchoolFlower2Activity.this,String.format("%d",a),}catch(IOExceptione){Toast.makeText(SchoolFlower2Activity.this,e.getMessage(),Log.e(TAG,"ONRESUME:Outputstreamcreationfailed.",}message=msgBuffer=try{Toast.makeText(SchoolFlower2Activity.this,message,}catch(IOExceptione){Toast.makeText(SchoolFlower2Activity.this,e.getMessage(),Log.e(TAG,"ONRESUME:Exceptionduringwrite.",}casetryoutStream=}catch(IOExceptione){Toast.makeText(SchoolFlower2Activity.this,e.getMessage(),Log.e(TAG,"ONRESUME:Outputstreamcreationfailed.",}message=msgBuffer=try{Toast.makeText(SchoolFlower2Activity.this,message,}catch(IOExceptione){Toast.makeText(SchoolFlower2Activity.this,e.getMessage(),Log.e(TAG,"ONRESUME:Exceptionduringwrite.",}}return}publicbooleanonTouch(Viewv,MotionEventevent)//TODOAuto-generatedmethodstubStringmessage;byte[]intaction=event.getAction();{casetryoutStream=//Toast.makeText(SchoolFlower2Activity.this,String.format("%d",a),}catch(IOExceptione){Toast.makeText(SchoolFlower2Activity.this,e.getMessage(),Log.e(TAG,"ONRESUME:Outputstreamcreationfailed.",}message=msgBuffer=try{Toast.makeText(SchoolFlower2Activity.this,message,}catch(IOExceptione){Toast.makeText(SchoolFlower2Activity.this,e.getMessage(),Log.e(TAG,"ONRESUME:Exceptionduringwrite.",}casetryoutStream=}catch(IOExceptione){Toast.makeText(SchoolFlower2Activity.this,e.getMessage(),Log.e(TAG,"ONRESUME:Outputstreamcreationfailed.",}message=msgBuffer=try{Toast.makeText(SchoolFlower2Activity.this,message,}catch(IOExceptione){Toast.makeText(SchoolFlower2Activity.this,e.getMessage(),Log.e(TAG,"ONRESUME:Exceptionduringwrite.",}}return}publicbooleanonTouch(Viewv,MotionEventevent)//TODOAuto-generatedmethodstubStringmessage;byte[]intaction=event.getAction();{casetryoutStream=}catch(IOExceptione)Log.e(TAG,"ONRESUME:Outputstreamcreationfailed.",}message=msgBuffer=message.getBytes();try{}catch(IOExceptione)Log.e(TAG,"ONRESUME:Exceptionduringwrite.",}casetryoutStream=}catch(IOExceptione)Log.e(TAG,"ONRESUME:Outputstreamcreationfailed.",}message=msgBuffer=try{}catch(IOExceptione)Log.e(TAG,"ONRESUME:Exceptionduringwrite.",}}return}publicbooleanonTouch(Viewv,MotionEventevent)//TODOAuto-generatedmethodstubStringmessage;byte[]intaction=event.getAction();{casetryoutStream=}catch(IOExceptione)Log.e(TAG,"ONRESUME:Outputstreamcreationfailed.",}message=msgBuffer=try{}catch(IOExceptione)Log.e(TAG,"ONRESUME:Exceptionduringwrite.",}casetryoutStream=}catch(IOExceptione)Log.e(TAG,"ONRESUME:Outputstreamcreationfailed.",}message=msgBuffer=try{}catch(IOExceptione)Log.e(TAG,"ONRESUME:Exceptionduringwrite.",}}return}publicbooleanonTouch(Viewv,MotionEventevent)//TODOAuto-generatedmethodstubStringmessage;byte[]intaction=event.getAction();{casetryoutStream=}catch(IOExceptione)Log.e(TAG,"ONRESUME:Outputstreamcreationfailed.",}message=msgBuffer=try{}catch(IOExceptione)Log.e(TAG,"ONRESUME:Exceptionduringwrite.",}casetryoutStream=}catch(IOExceptione)Log.e(TAG,"ONRESUME:Outputstreamcreationfailed.",}message=msgBuffer=try{}catch(IOExceptione)Log.e(TAG,"ONRESUME:Exceptionduringwrite.",}}return}publicbooleanonTouch(Viewv,MotionEventevent)//TODOAuto-generatedmethodstubtry{outStream=}catch(IOExceptione)Log.e(TAG,"ONRESUME:Outputstreamcreationfailed.",}Stringmessage=byte[]msgBuffer=message.getBytes();try{}catch(IOExceptione)Log.e(TAG,"ONRESUME:Exceptionduringwrite.",}return}mSV=(SurfaceView)findViewById(R.id.viewDraw);mSH=(SurfaceHolder)mSV.getHolder();mSH.addCallback(newSurfaceHolder.Callback(){publicvoidsurfaceDestroyed(SurfaceHolderholder)//TODOAuto-generatedmethod}publicvoidsurfaceCreated(SurfaceHolderholder)//TODOAuto-generatedmethodint
publicvoidsurfaceChanged(SurfaceHolderholder,intintheight)//TODOAuto-generatedmethodstub}mSV.setOnTouchListener(newView.OnTouchListener()publicbooleanonTouch(Viewv,MotionEventevent)//TODOAuto-generatedmethodstubpm.addPoint(newPoint((int)event.getX(),(int)}
return//RedrawingfinalHandlerhandler=newHandler();newThread(newRunnable(){publicvoidrun()//TODOAuto-generatedmethodstubsynchronized(mSH){while(true)try}catch(InterruptedExceptione1)//TODOAuto-generatedcatchblock}handler.post(newRunnable()publicvoidrun()
//TODOAuto-generatedmethodtry{}catch(Exceptione)Toast.makeText(SchoolFlower2Activity.this,e.toString()+e.getMessage(),Toast.LENGTH_SHORT).show();}try
}catch(InterruptedExceptione)//TODOAuto-generatedcatchblock}}}}ifLog.e(TAG,"+++ONCREATEmBluetoothAdapter=if(mBluetoothAdapter==null){Toast.makeText(this,"Bluetoothisnotavailable.",}if(!mBluetoothAdapter.isEnabled())Toast.makeText(this,"PleaseenableyourBluetoothandre-runthisprogram.",Toast.LENGTH_LONG).show();}ifLog.e(TAG,"+++DONEINONCREATE,GOTLOCALBTADAPTER}publicvoidonStart(){if(D)Log.e(TAG,"++ONSTART}publicvoidonResume(){if(D)Log.e(TAG,"+ONRESUMELog.e(TAG,"+ABOUTTO CONNECT}Toast.makeText(SchoolFlower2Activity.this,"Resume:Connecting",BluetoothDevicedevice=mBluetoothAdapter.getRemoteDevice(address);try{btSocket= pm.btSocket=this.btSocket;}catch(IOExceptione)Log.e(TAG,"ONRESUME:Socketcreationfailed.",}try{Log.e(TAG,"ONRESUME:BTconnectionestablished,datatransferlink}catch(IOExceptione){try{}catch(IOExceptione2)Log.e(TAG,"ONRESUME:Unabletoclosesocketduringconnectionfailure",e2);}}//Createadatastreamsowecantalktoserver.if(D)Log.e(TAG,"+ABOUTTOSAYSOMETHINGTOSERVERtryoutStream=}catch(IOExceptione)Log.e(TAG,"ONRESUME:Outputstreamcreationfailed.",}Stringmessage=byte[]msgBuffer=message.getBytes();try{}catch(IOExceptione)Log.e(TAG,"ONRESUME:Exceptionduringwrite.",}}publicvoidonPause(){ifLog.e(TAG,"-ONPAUSE-if(outStream!=null){try{}catch(IOExceptione)Log.e(TAG,"ONPAUSE:Couldn'tflushoutputstream.",}}try{}catch(IOExceptione2)Log.e(TAG,"ONPAUSE:Unabletoclosesocket.",}}publicvoidonStop(){if(D)Log.e(TAG,"--ONSTOP--}publicvoidonDestroy(){if(D)Log.e(TAG,"---ONDESTROY---}publicvoidonDraw()throwsException{Canvascanvas=if(canvas==null)thrownewException("Canvasisnull");Paintpaint=newPaint();paint.setARGB(255,230,230,Point[]path=newPoint[0];synchronized(pm.path){path=}PathManager.unit_vectordir=pm.curDir;for(inti=1;i<path.length;i++){canvas.drawLine(path[i-1].x,path[i-1].y,path[i].y,}canvas.drawCircle(path[0].x,path[0].y,10,canvas.drawLine(path[0].x,path[0].y,path[0].x+dir.x*15.0f,path[0].y+dir.y*15.0f,paint);}}PathManager.java//主程序packagecom.Android.SchoolFlower2;importjava.io.IOException;importjava.util.ArrayList;importjava.util.List;importimportandroid.bluetooth.BluetoothSocket;importandroid.graphics.Point;publicclassPathManager{publicclassunit_vector{floatpublicunit_vector(Pointst,Pointed){x=ed.x-st.x;y=ed.y-floatmod=(float)Math.sqrt(x*x+y*y);x/=mod;y/=}publicfloatangleTo(unit_vectorvec) inradian,positivevaluemeansclockwisefloatangle=(float)Math.acos(x*vec.x+y*vec.y);if(x*vec.y>y*vec.x){return}elsereturn-}}}floatdistance(Pointa,Pointb){floatx=a.x-b.x;floaty=a.y-return(float)}publicList<Point>path=newpublicunit_vectorcurDir=newunit_vector(newPoint(0,0),newpublicBluetoothSocketbtSocket=privateSemaphorepoints=newSemaphore(0);publicPathManager(){path.add(newnewThread(newRunnable()publicfinalfloatrot_speed=45.54f;publicfinalfloatmov_speed=10.0f;publicvoidrun()//TODOAuto-generatedmethodstubtry{while(true)Pointst,ed;synchronized(path){st=path.get(0);ed=
unit_vectordir=floatrot=curDir.angleTo(dir);if(rot>0.1f||rot<-0.1f){try
if(rot>0.1f Turn Turn}catch(Exceptione)}Thread.sleep(Math.round(Math.abs(rot)*rot_speed)}curDir=floatdist=distance(st,ed);try{}catch(IOExceptione)//TODOAuto-generatedmov_speed)
Thread.sleep(Math.round(dist
try}catch(IOExceptione)//TODOAuto-generated}synchronized(path)}}}catch(InterruptedExceptione)//TODOAuto-generatedcatch}}}publicvoidaddPoint(Pointp){synchronized(path){}}}#include<reg51.h>#include<absacc.h>unsignedchardatacmd=0x00;unsignedcharcnt=0;//Enablebit,setto0torunthemotorsbitup=P3^2;sbitdown=P3^3;sbitright=P3^4;sbitleft=P3^5;sfrA
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2030年中國大型三機一體除濕干燥機境外融資報告
- 2024-2030年中國型鋼行業(yè)產(chǎn)量預(yù)測及投資規(guī)模分析報告
- 2024-2030年中國地質(zhì)錘行業(yè)應(yīng)用動態(tài)與前景趨勢預(yù)測報告
- 2024-2030年中國呼吸麻醉機行業(yè)發(fā)展形勢及投資潛力研究報告
- 2024-2030年中國雙桿掛燙機行業(yè)銷售狀況及營銷渠道策略報告
- 集團公司危險作業(yè)指導(dǎo)手冊 第15項-高輻射作業(yè)安全指導(dǎo)手冊
- 2024年度企業(yè)勞動合同勞動合同續(xù)簽及變更管理規(guī)范6篇
- 2024年環(huán)保設(shè)備與鋼材交易之居間委托合同
- 2024年房地產(chǎn)開發(fā)項目投資入股合同范本3篇
- 2024年度教育產(chǎn)業(yè)聯(lián)營合作協(xié)議書3篇
- 圖文轉(zhuǎn)換-圖表(小題訓(xùn)練)(解析版)-2025年部編版中考語文一輪復(fù)習(xí)
- 七上語文期末考試復(fù)習(xí)計劃表
- 2024兒童青少年抑郁治療與康復(fù)痛點調(diào)研報告 -基于患者家長群體的調(diào)研
- 大數(shù)據(jù)+治理智慧樹知到期末考試答案章節(jié)答案2024年廣州大學(xué)
- 江蘇省建筑與裝飾工程計價定額(2014)電子表格版
- 山東省煙臺市2023-2024學(xué)年高二上學(xué)期期末考試數(shù)學(xué)試卷(含答案)
- 2024年中國鐵路南寧局集團招聘筆試參考題庫含答案解析
- 國家開放大學(xué)化工節(jié)能課程-復(fù)習(xí)資料期末復(fù)習(xí)題
- GB 18613-2020 電動機能效限定值及能效等級
- 小學(xué)寫字閱讀考核實施方案
- 起重機傳動裝置的設(shè)計
評論
0/150
提交評論