//舵机和超声波调试代码
#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 程序解析, 求真正理解单片机的牛人等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)