小車避障編程
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;//一直到移除障礙,則關閉蜂鳴器報警回到主程序。
}