#include <Wireh>
#include "MPU6050h"
#include <Ultrasonich>
#include "I2Cdevh"
#define LED_PIN 13 //指示灯
//MPU6050陀螺仪
//MPU6050 my_gyro(3);
//使用ax, rx来获取二轮车姿态
//x轴加速度 & 偏转角
short ax,rx;
//short = int16_t
//HC-SRO4超声波传感器
//TRIG_PIN & ECHO_PIN
Ultrasonic my_hcsr(5,6);
float distance;
int startTime;
void setup() {
pinMode(LED_PIN,LOW);
//加入I2C总线
Wirebegin();
//初始化串口通信频道
Serialbegin(9600);
//初始化模块
//my_gyroinitialize();
my_hcsrmeasure();
startTime = millis();
//初始化完成后指示灯常亮
pinMode(LED_PIN,HIGH);
}
void loop() {
//获取车身姿态
//ax=my_gyrogetAccelerationX();
//rx=my_gyrogetRotationX();
//获取前方障碍物距离
my_hcsrmeasure();
distance=millis()-startTime;
distance/=1000;
distance=my_hcsrget_cm();
Serialprint(distance,3);
Serialprintln("cm");
delay(50);
}
首先你这没有注释以及毫无含义的变量名的程序 看起来很令人头疼
然后看你这程序 应该是每65ms扫描一次ex也就是P21的状态 tx我猜应该是用来触发模块的吧 触发后你停在ex==0这个状态直到ex==1 这个时候开了定时器 t=6也就是 顶多400ms半秒不到的样子 如果这个时候恰好有个状态满足了 flag置了1 那么你的程序就会执行右转 但是执行后 你没有执行将flag清零 也就是不会出现前进这个状态了
问题应该出在:实际接线时开关并了104电容,这会产生延迟的。
当程序读按键时,因延时按键还没有接触上。
解决方法,换成小一些电容,在调用读键盘子程序时,加延时。
因为仿真是没有延迟的,就算是加了电容,仿真时也不起作用。所以,仿真可以通过。但实物,电容就起作用了。
或者,先拿掉电容,执行一下程序,看能不能通过,就知道,是不是因为电容的原因了。
以上就是关于这是我在arduino上用hc-sr04超声波测距的代码,但是结果一直都是0.00,不知道哪里错了,求大神解答全部的内容,包括:这是我在arduino上用hc-sr04超声波测距的代码,但是结果一直都是0.00,不知道哪里错了,求大神解答、我用hc-sr04模块测距,当左右两个模块中某一个检测到10cm处有障碍时,电机相应转动,我写了程序但就是不对、超声波模块HC-SR04用Proteus怎么模拟,初学者求助等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)