《基于Arduino的超声波壁障小车源程序.docx》由会员分享,可在线阅读,更多相关《基于Arduino的超声波壁障小车源程序.docx(7页珍藏版)》请在三一办公上搜索。
1、基于Arduino的超声波壁障小车源程序基于Arduino的超声波壁障小车源程序 河南大学 王艺 / L = 左 / R = 右 / F = 前 / B = 後 #include 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
2、Lspeedd = 0; / 左速 int directionn = 0; Servo myservo; /myservo int 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(inp
3、utPin, INPUT); 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
4、); delay(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); digita
5、lWrite(pinRB,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); digi
6、talWrite(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); an
7、alogWrite(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); digital
8、Write(pinLF,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 Rspeedd) directionn = Rgo; /向右走 if(Lspeedd = Rspeedd) directionn = Lgo;
9、/向左走 if (Lspeedd 10 & Rspeedd 10) directionn = Bgo; else directionn = Fgo; /向前走 void ask_pin_F / 量出前方距离 myservo.write(90); digitalWrite(outputPin, LOW); delayMicroseconds(2); digitalWrite(outputPin, HIGH); delayMicroseconds(10); digitalWrite(outputPin, LOW); float Fdistance = pulseIn(inputPin, HIGH)
10、; Fdistance= Fdistance/5.8/10; Serial.print(F distance:); /输出距离 单位公分 Serial.println(Fdistance); Fspeedd = Fdistance; void ask_pin_L /测出左边距离 myservo.write(5); delay(delay_time); digitalWrite(outputPin, LOW); delayMicroseconds(2); digitalWrite(outputPin, HIGH); delayMicroseconds(10); digitalWrite(outp
11、utPin, LOW); float Ldistance = pulseIn(inputPin, HIGH); Ldistance= Ldistance/5.8/10; / 将时间转化为距离 Serial.print(L distance:); Serial.println(Ldistance); Lspeedd = Ldistance; void ask_pin_R / 量出右边距离 myservo.write(177); delay(delay_time); digitalWrite(outputPin, LOW); delayMicroseconds(2); digitalWrite(o
12、utputPin, HIGH); delayMicroseconds(10); digitalWrite(outputPin, LOW); float Rdistance = pulseIn(inputPin, HIGH); Rdistance= Rdistance/5.8/10; Serial.print(R distance:); Serial.println(Rdistance); Rspeedd = Rdistance; void loop myservo.write(90); /舵机初次位置 detection; /测量角度,判断往哪边转动 if(directionn = 2) /假
13、如directionn(方向) = 2(倒车) back(8); / 倒退 turnL(2); / Serial.print( Reverse ); if(directionn = 6) /假如directionn(方向) = 6(右) back(1); turnR(6); / 右 Serial.print( Right ); if(directionn = 4) /假如directionn(方向) = 4(左) back(1); turnL(6); Serial.print( Left ); if(directionn = 8) advance(1); Serial.print( Advance ); Serial.print( ); / 左 /假如directionn(方向) = 8(前) / 正常前