小车避障编程
A. 求避障小车的程序
#include<reg52.h> //或核添加函数库敏团携
#define uint unsigned int //宏定义
#define uchar unsigned char //宏定义
sbit s=P3^5; //定义红外避障检测端口
sbit m1=P3^4; //定义电机M1电平输出端口
sbit m2=P3^6; //定义电桥伏机M2电平输出端口
void delay_ms(uint z); //声明延时函数
main() //主函数
{
uint i=0; //初始值设定
m1=1;
m2=1;
while(1) //无限循环
{
if(s==0) //S=0表示前方有障碍物 进行转向
{
for(i=0;i<5;i++)
{
m1=0;
m2=1;
delay_ms(15);//状态保持15ms
m1=1;
m2=1;
delay_ms(5);//状态保持5ms
}
}
if(s==1) //S=1表示前方无障碍物 直线行驶
{
m1=1;
m2=1;
delay_ms(10);//状态保持10ms
}
}
}
void delay_ms(uint z) //延时函数 循环嵌套原理
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
B. 求arino避障小车程序,急!(高额悬赏)
//舵机和超声波调试代码
#include <Servo.h>
#include <Metro.h>
Metro measureDistance = Metro(50);
Metro sweepServo = Metro(20);
unsigned long actualDistance = 0;
Servo myservo; //创建舵机
int pos = 60;
int sweepFlag = 1;
int URPWM = 3; //PWM输出0-25000us,每50us代表1cm
int URTRIG= 10; // PWM trigger pin PWM串口为10
uint8_t EnPwmCmd[4]={0x44,0x02,0xbb,0x01}; // distance measure command 距离测量命令
void setup(){ // Serial initialization 串行初始化
myservo.attach(9); //舵机串口为9
Serial.begin(9600); // Sets the baud rate to 9600
SensorSetup();
}
void loop(){
if(measureDistance.check() == 1){
actualDistance = MeasureDistance();
// Serial.println(actualDistance);
// delay(100);
}
if(sweepServo.check() == 1){
servoSweep();
}
}
void SensorSetup(){
pinMode(URTRIG,OUTPUT); // A low pull on pin COMP/TRIG
digitalWrite(URTRIG,HIGH); // Set to HIGH
pinMode(URPWM, INPUT); // Sending Enable PWM mode command 发送使能控制模式命令
for(int i=0;i<4;i++){
Serial.write(EnPwmCmd[i]);
}
}
int MeasureDistance(){ // a low pull on pin COMP/TRIG triggering a sensor reading 触发传感器读数
digitalWrite(URTRIG, LOW);
digitalWrite(URTRIG, HIGH); // reading Pin PWM will output pulses 读引脚脉宽调制将输出脉冲
unsigned long distance=pulseIn(URPWM,LOW);
if(distance==50000){ // the reading is invalid.阅读无效
Serial.print("Invalid");
}else{
distance=distance/50; // every 50us low level stands for 1cm
}
return distance;
}
void servoSweep(){
if(sweepFlag ){
if(pos>=60 && pos<=120){
pos=pos+1; // in steps of 1 degree 1度角度的转动
myservo.write(pos); // tell servo to go to position in variable 'pos' 告诉舵机转动的角度
}
if(pos>119) sweepFlag = false; // assign the variable again 重新分配变量
}else {
if(pos>=60 && pos<=120){
pos=pos-1;
myservo.write(pos);
}
if(pos<61) sweepFlag = true;
}
}
////////////////////////////////////////////////////////////
需要加载一个Metro.h的库,这只是调试机器,余下的完全看你的发挥了,加上电机
C. 基于模糊控制的智能小车避障C语言程序
这个模糊控制的需求真是很模糊啊。呵呵。。。
模糊控制需要有输入,而不是闷着头随便乱想。输出倒是很简单,一个三态的值。输入都输出写啥啊?
D. STC89C52单片机避障小车程序编写
void Avoid()
{
while(S<400)//小于避障距离就停车同时报警
{
beep=0;//使能蜂鸣器
stop();//停车
}
beep=1;//一直到移除障碍,则关闭蜂鸣器报警回到主程序。
}