日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ZYAR20A 亚克力2驱 蓝牙 298寻迹避障机器人 —— 小车超声波避障实验(无舵机)

發布時間:2024/4/30 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ZYAR20A 亚克力2驱 蓝牙 298寻迹避障机器人 —— 小车超声波避障实验(无舵机) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在下載到開發板之前要選擇好板和端口,具體參見:

ZYAR20A 亞克力2驅 藍牙 298尋跡避障機器人 —— Arduino相關設置

代碼

// 智能小車超聲波避障實驗(無舵機) //=============================================================== //#include <Servo.h> #include <LiquidCrystal.h> //申明1602液晶的函數庫 //申明1602液晶的引腳所連接的Arduino數字端口,8線或4線數據模式,任選其一 //LiquidCrystal lcd(12,11,10,9,8,7,6,5,4,3,2); //8數據口模式連線聲明 LiquidCrystal lcd(13,12,7,6,5,4,3); //4數據口模式連線聲明 P13--LCD 4腳 P12--LCD 5腳 //P7--LCD 6腳 P6--LCD 11腳 P5--LCD 12腳 P4--LCD 13腳 P3--LCD 14腳 int Echo = A1; // Echo回聲腳(P2.0) int Trig =A0; // Trig 觸發腳(P2.1)int Distance = 0;int Left_motor_go=8; //左電機前進(IN1) int Left_motor_back=9; //左電機后退(IN2)int Right_motor_go=10; // 右電機前進(IN3) int Right_motor_back=11; // 右電機后退(IN4)int key=A2;//定義按鍵 A2 接口 int beep=A3;//定義蜂鳴器 A3 接口void setup() {Serial.begin(9600); // 初始化串口//初始化電機驅動IO為輸出方式pinMode(Left_motor_go,OUTPUT); // PIN 8 (PWM)pinMode(Left_motor_back,OUTPUT); // PIN 9 (PWM)pinMode(Right_motor_go,OUTPUT);// PIN 10 (PWM) pinMode(Right_motor_back,OUTPUT);// PIN 11 (PWM)pinMode(key,INPUT);//定義按鍵接口為輸入接口pinMode(beep,OUTPUT);// pinMode(SensorRight, INPUT); //定義右循跡紅外傳感器為輸入// pinMode(SensorLeft, INPUT); //定義左循跡紅外傳感器為輸入//pinMode(SensorRight_2, INPUT); //定義右紅外傳感器為輸入//pinMode(SensorLeft_2, INPUT); //定義左紅外傳感器為輸入//初始化超聲波引腳pinMode(Echo, INPUT); // 定義超聲波輸入腳pinMode(Trig, OUTPUT); // 定義超聲波輸出腳lcd.begin(16,2); //初始化1602液晶工作 模式//定義1602液晶顯示范圍為2行16列字符 } //=======================智能小車的基本動作========================= //void run(int time) // 前進 void run() // 前進 {digitalWrite(Right_motor_go,HIGH); // 右電機前進digitalWrite(Right_motor_back,LOW); analogWrite(Right_motor_go,150);//0~255調速,左右輪差異略增減analogWrite(Right_motor_back,0);digitalWrite(Left_motor_go,LOW); // 左電機前進digitalWrite(Left_motor_back,HIGH);analogWrite(Left_motor_go,0);//PWM比例0~255調速,左右輪差異略增減analogWrite(Left_motor_back,150);//delay(time * 100); //執行時間,可以調整 }void brake(int time) //剎車,停車 {digitalWrite(Right_motor_go,LOW);digitalWrite(Right_motor_back,LOW);digitalWrite(Left_motor_go,LOW);digitalWrite(Left_motor_back,LOW);delay(time * 100);//執行時間,可以調整 }//void left(int time) //左轉(左輪不動,右輪前進) void left() //左轉(左輪不動,右輪前進) {digitalWrite(Right_motor_go,HIGH); // 右電機前進digitalWrite(Right_motor_back,LOW);analogWrite(Right_motor_go,150); analogWrite(Right_motor_back,0);//PWM比例0~255調速digitalWrite(Left_motor_go,LOW); //左輪后退digitalWrite(Left_motor_back,LOW);analogWrite(Left_motor_go,0); analogWrite(Left_motor_back,0);//PWM比例0~255調速//delay(time * 100); //執行時間,可以調整 }void spin_left(int time) //左轉(左輪后退,右輪前進) {digitalWrite(Right_motor_go,HIGH); // 右電機前進digitalWrite(Right_motor_back,LOW);analogWrite(Right_motor_go,150); analogWrite(Right_motor_back,0);//PWM比例0~255調速digitalWrite(Left_motor_go,HIGH); //左輪后退digitalWrite(Left_motor_back,LOW);analogWrite(Left_motor_go,150); analogWrite(Left_motor_back,0);//PWM比例0~255調速delay(time * 100); //執行時間,可以調整 }void right(int time) //void right() //右轉(右輪不動,左輪前進) {digitalWrite(Right_motor_go,LOW); //右電機后退digitalWrite(Right_motor_back,LOW);analogWrite(Right_motor_go,0); analogWrite(Right_motor_back,0);//PWM比例0~255調速digitalWrite(Left_motor_go,LOW);//左電機前進digitalWrite(Left_motor_back,HIGH);analogWrite(Left_motor_go,0); analogWrite(Left_motor_back,150);//PWM比例0~255調速delay(time * 100); //執行時間,可以調整 }void spin_right(int time) //右轉(右輪后退,左輪前進) {digitalWrite(Right_motor_go,LOW); //右電機后退digitalWrite(Right_motor_back,HIGH);analogWrite(Right_motor_go,0); analogWrite(Right_motor_back,150);//PWM比例0~255調速digitalWrite(Left_motor_go,LOW);//左電機前進digitalWrite(Left_motor_back,HIGH);analogWrite(Left_motor_go,0); analogWrite(Left_motor_back,150);//PWM比例0~255調速delay(time * 100); //執行時間,可以調整 }void back(int time) //后退 {digitalWrite(Right_motor_go,LOW); //右輪后退digitalWrite(Right_motor_back,HIGH);analogWrite(Right_motor_go,0);analogWrite(Right_motor_back,150);//PWM比例0~255調速digitalWrite(Left_motor_go,HIGH); //左輪后退digitalWrite(Left_motor_back,LOW);analogWrite(Left_motor_go,150);analogWrite(Left_motor_back,0);//PWM比例0~255調速delay(time * 100); //執行時間,可以調整 } //==========================================================void keysacn()//按鍵掃描 {int val;val=digitalRead(key);//讀取數字7 口電平值賦給valwhile(!digitalRead(key))//當按鍵沒被按下時,一直循環{val=digitalRead(key);//此句可省略,可讓循環跑空}while(digitalRead(key))//當按鍵被按下時{delay(10); //延時10msval=digitalRead(key);//讀取數字7 口電平值賦給valif(val==HIGH) //第二次判斷按鍵是否被按下{digitalWrite(beep,HIGH); //蜂鳴器響while(!digitalRead(key)) //判斷按鍵是否被松開digitalWrite(beep,LOW); //蜂鳴器停止}elsedigitalWrite(beep,LOW); //蜂鳴器停止} }void Distance_test() // 量出前方距離 {digitalWrite(Trig, LOW); // 給觸發腳低電平2μsdelayMicroseconds(2);digitalWrite(Trig, HIGH); // 給觸發腳高電平10μs,這里至少是10μsdelayMicroseconds(10);digitalWrite(Trig, LOW); // 持續給觸發腳低電float Fdistance = pulseIn(Echo, HIGH); // 讀取高電平時間(單位:微秒)Fdistance= Fdistance/58; //為什么除以58等于厘米, Y米=(X秒*344)/2// X秒=( 2*Y米)/344 ==》X秒=0.0058*Y米 ==》厘米=微秒/58Serial.print("Distance:"); //輸出距離(單位:厘米)Serial.println(Fdistance); //顯示距離Distance = Fdistance; } void Distance_display()//顯示距離 {if((2<Distance)&(Distance<400)){lcd.home(); //把光標移回左上角,即從頭開始輸出 lcd.print(" Distance: "); //顯示lcd.setCursor(6,2); //把光標定位在第2行,第6列lcd.print(Distance); //顯示距離lcd.print("cm"); //顯示}else{lcd.home(); //把光標移回左上角,即從頭開始輸出 lcd.print("!!! Out of range"); //顯示超出距離}delay(250);lcd.clear(); }void loop() {keysacn(); //調用按鍵掃描函數while(1){Distance_test();//測量前方距離Distance_display();//液晶屏顯示距離if(Distance < 40)//數值為碰到障礙物的距離,可以按實際情況設置while(Distance < 40)//再次判斷是否有障礙物,若有則轉動方向后,繼續判斷{back(2); right(1);//右轉digitalWrite(beep,HIGH); //蜂鳴器停止// brake(1);//停車Distance_test();//測量前方距離Distance_display();//液晶屏顯示距離}else{run();//無障礙物,直行digitalWrite(beep,LOW); }} }

總結

以上是生活随笔為你收集整理的ZYAR20A 亚克力2驱 蓝牙 298寻迹避障机器人 —— 小车超声波避障实验(无舵机)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。