求arduino避障小车程序,急!(高额悬赏)

求arduino避障小车程序,急!(高额悬赏),第1张

//舵机和超声波调试代码

#include <Servoh>

#include <Metroh>

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 串行初始化

myservoattach(9); //舵机串口为9

Serialbegin(9600); // Sets the baud rate to 9600

SensorSetup();

}

void loop(){

if(measureDistancecheck() == 1){

actualDistance = MeasureDistance();

// Serialprintln(actualDistance);

// delay(100);

}

if(sweepServocheck() == 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++){

Serialwrite(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阅读无效

Serialprint("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度角度的转动

myservowrite(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;

myservowrite(pos);

}

if(pos<61) sweepFlag = true;

}

}

////////////////////////////////////////////////////////////

需要加载一个Metroh的库,这只是调试机器,余下的完全看你的发挥了,加上电机

使用digitalRead()函数读取数字引脚的高低电平,循迹模块检测到黑线为高电平HIGH(1),白线为低电平LOW(0),如果循迹模块的指示灯不灵敏或者一闪一闪的,就需要用螺丝刀调节蓝色的电位器,将循迹模块放在黑线上,把灯调亮,然后再回调一些,把灯调灭,这样循迹模块的阈值就刚好在临界点了。

Sensor [0] = digitalRead(10);

Sensor [1] = digitalRead(11);

Sensor [2] = digitalRead(12);

Sensor [3] = digitalRead(13;

2打印循迹模块的高低电平

使用Serialprint();函数打印循迹的值,在Arduino的右上角有个放大镜,可以打开串口监视器,电脑连接Arduino就可以看到串口的值了

有以下疑问:

1 SoftPWMSet 这是什么鬼? arduino的pwm输出,可以直接使用analogwrite函数。若是你自己写的,;源文件丢出来给人看看是啥。

2 还有"pins_arduinoh"也是,如果是自己写的,都把它贴出来。

3 arduino的中断,不是这样用的。直接使用<avr/interrupth>,会造成冲突

4 对你这个程序,你遇到的困难是?想跟网友求助那个问题?看了10多分钟,还是一头雾水。你这个我大概看了下,目测你的程序是这样的:3,5,10,9,这四个引脚来控制两个直流电机,直接扩流来驱动电机,引脚8接的是一个LeD,用于显示状态,还有个11引脚,从注释的字面上理解,应该是超声波的相关引脚,但是一个引脚,超声波,我愚钝,看不出来的是干嘛。

看了10多分钟,还没搞懂你想要干嘛,根据超声波测得的距离,来控制小车前进后退?还是前进过程中,超声波检测到障碍来做避障?

根据前面的分析,你这段代码,肯定是不通过编译的,错误提示呢?

你要网友帮你修正程序,但是又不知道你的需求,怎么改?

总之,分给我吧~~~

arduino巡线小车左右两个灰度传感器巡线直角弯道是需要考验调试算法的,因为直角弯道转向比较大,如果速度过快就容易飞出去,所以要想快速巡线直角弯道,那么需要调整转向修正速度,建议修改一下转向,最好使用左右轮正反转加大转向半径,从而提高转向速度,只有提高转向速度,巡线小车在直角巡线就能够完成快速转向,从而不至于冲出弯道。

以上就是关于求arduino避障小车程序,急!(高额悬赏)全部的内容,包括:求arduino避障小车程序,急!(高额悬赏)、循迹小车不循迹代码怎么调试、arduino 程序解析, 求真正理解单片机的牛人等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9273639.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存