基于Arduino的超声波壁障小车源程序_第1页
基于Arduino的超声波壁障小车源程序_第2页
基于Arduino的超声波壁障小车源程序_第3页
基于Arduino的超声波壁障小车源程序_第4页
基于Arduino的超声波壁障小车源程序_第5页
已阅读5页,还剩1页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上 基于Arduino的超声波壁障小车源程序 河南大学 王艺/ L = 左/ R = 右/ F = 前/ B = 後#include <Servo.h> int pinLF=14; / 定义6脚位 左后int pinLB=15; / 定义9脚位 左前int pinRF=16; / 定义10脚位 右前int pinRB=17; / 定义11脚位 右后int inputPin = 9; / 定义超音波接受脚位int outputPin =8; / 定义超音波发送脚位int Fspeedd = 0; / 前速int Rspeedd = 0; / 右速int Lsp

2、eedd = 0; / 左速int directionn = 0; Servo myservo; /myservoint delay_time = 250; / 舵机的稳定时间int Fgo = 8; / 前进int Rgo = 6; / 右转int Lgo = 4; / 左转int Bgo = 2; / 倒车void setup() Serial.begin(9600); pinMode(pinLB,OUTPUT); pinMode(pinLF,OUTPUT); pinMode(pinRB,OUTPUT); pinMode(pinRF,OUTPUT); pinMode(inputPin, I

3、NPUT); pinMode(outputPin, OUTPUT); myservo.attach(10); / 定义舵机第5脚位(PWM) void advance(int a) / 前进 digitalWrite(pinRF,HIGH); digitalWrite(pinRB,LOW); /analogWrite(pinRF,100); /analogWrite(pinRB, 0); digitalWrite(pinLF,HIGH); digitalWrite(pinLB,LOW); /analogWrite(pinLF,100); /analogWrite(pinLB,0); delay

4、(a * 100); void right(int b) digitalWrite(pinRF,LOW); digitalWrite(pinRB,LOW); /analogWrite(pinRF,0); / analogWrite(pinRB, 0); digitalWrite(pinLF,HIGH); digitalWrite(pinLB,LOW); /analogWrite(pinLF,100); / analogWrite(pinLB,0); delay(b * 100); void left(int c) digitalWrite(pinRF,HIGH); digitalWrite(p

5、inRB,LOW); /analogWrite(pinRF,100); /analogWrite(pinRB, 0); digitalWrite(pinLF,LOW); digitalWrite(pinLB,LOW); /analogWrite(pinLF,0); /analogWrite(pinLB,0); delay(c * 100); void turnR(int d) digitalWrite(pinRF,LOW); digitalWrite(pinRB,HIGH); analogWrite(pinRF,0); analogWrite(pinRB, 100); digitalWrite

6、(pinLF,HIGH); digitalWrite(pinLB,LOW); analogWrite(pinLF,100); analogWrite(pinLB,0); delay(d * 100); void turnL(int e) digitalWrite(pinRF,HIGH); digitalWrite(pinRB,LOW); analogWrite(pinRF,100); analogWrite(pinRB, 0); digitalWrite(pinLF,LOW); digitalWrite(pinLB,HIGH); analogWrite(pinLF,0); analogWrit

7、e(pinLB,100); delay(e * 100); void stopp(int f) /停止 digitalWrite(pinRB,LOW); digitalWrite(pinRF,LOW); digitalWrite(pinLB,LOW); digitalWrite(pinLF,LOW); delay(f * 100); void back(int g) digitalWrite(pinRF,LOW); digitalWrite(pinRB,HIGH); /analogWrite(pinRF,0); /analogWrite(pinRB, 150); digitalWrite(pi

8、nLF,LOW); digitalWrite(pinLB,HIGH); /analogWrite(pinLF,0); /analogWrite(pinLB,150); delay(g * 100); void detection() /测量三个角度(0.90.179) int delay_time = 250; / 舵机稳定时间 ask_pin_F(); if(Fspeedd < 10) stopp(1); back(2); if(Fspeedd < 25) stopp(1); ask_pin_L(); delay(delay_time); ask_pin_R(); delay(d

9、elay_time); if(Lspeedd > Rspeedd) directionn = Rgo; /向右走 if(Lspeedd <= Rspeedd) directionn = Lgo; /向左走 if (Lspeedd < 10 && Rspeedd < 10) directionn = Bgo; else directionn = Fgo; /向前走 void ask_pin_F() / 量出前方距离 myservo.write(90); digitalWrite(outputPin, LOW); delayMicroseconds(2);

10、digitalWrite(outputPin, HIGH); delayMicroseconds(10); digitalWrite(outputPin, LOW); float Fdistance = pulseIn(inputPin, HIGH); Fdistance= Fdistance/5.8/10; Serial.print("F distance:"); /输出距离 单位公分 Serial.println(Fdistance); Fspeedd = Fdistance; void ask_pin_L() /测出左边距离 myservo.write(5); del

11、ay(delay_time); digitalWrite(outputPin, LOW); delayMicroseconds(2); digitalWrite(outputPin, HIGH); delayMicroseconds(10); digitalWrite(outputPin, LOW); float Ldistance = pulseIn(inputPin, HIGH); Ldistance= Ldistance/5.8/10; / 将时间转化为距离 Serial.print("L distance:"); Serial.println(Ldistance);

12、 Lspeedd = Ldistance; void ask_pin_R() / 量出右边距离 myservo.write(177); delay(delay_time); digitalWrite(outputPin, LOW); delayMicroseconds(2); digitalWrite(outputPin, HIGH); delayMicroseconds(10); digitalWrite(outputPin, LOW); float Rdistance = pulseIn(inputPin, HIGH); Rdistance= Rdistance/5.8/10; Seria

13、l.print("R distance:"); Serial.println(Rdistance); Rspeedd = Rdistance; void loop() myservo.write(90); /舵机初次位置 detection(); /测量角度,判断往哪边转动 if(directionn = 2) /假如directionn(方向) = 2(倒车) back(8); / 倒退 turnL(2); / Serial.print(" Reverse "); if(directionn = 6) /假如directionn(方向) = 6(右) back(1); turnR(6); / 右 Serial.print(" Right "); if(directionn = 4) /假如direct

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论