|
大家好,有个问题请教一下大家,我现在用的是esp8266开发板,想利用超声波测距和ln298控制直流电机。要求:比如当我距离小于1m时,电机正转两秒之后停止,之后不再旋转,除非等到距离大于1m时再进行反转两秒,之后不再旋转。如果再检测到小于1m,再进行前面的操作
现在的发现的问题:当检测到距离小于1m时,电机正转两秒,如果距离一直小于1m就会一直循环正转两秒,大于1m也是如此一直循环反转两秒
麻烦大家帮我看看要添加什么条件才能满足,谢谢大家
以下是程序:
#include <HCSR04.h> //超声波测距库
#define IN1 D0
#define IN2 D1
#define IN3 D2
#define IN4 D3
#define IN5 D4
float cm;
int TrigPin = D5;//定义Trig为D5
int EchoPin = D6;//定义Echo接口D6
int i=0;
void LEDUP(){
digitalWrite(IN5, HIGH);
}
void LEDDOWN(){
digitalWrite(IN5, LOW);
}
void zhengzhuan(){ //电机正转
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
}
void fanzhuan(){ //电机反转
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
}
void STOP(){ //电机停止
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
delay(1000);
}
void CSBCJ(){ //超声波测距
digitalWrite(TrigPin,LOW);//将D5置为低电平
delay(2); //延时
digitalWrite(TrigPin,HIGH);//将D5置为高电平
delay(10); //延时
digitalWrite(TrigPin,LOW);//将D5置为低电平
cm = pulseIn(EchoPin,HIGH) / 58.0;//计算距离
cm = (int(cm * 100.0)) / 100.0;//保留两位
Serial.print(cm);//输出数据
Serial.println();
delay(1000);
}
void jc() {
if (cm>100){
fanzhuan();
delay(2000);
STOP();
}
else if (cm<100){
zhengzhuan();
delay(2000);
STOP();
}
}
void setup()
{
// 初始化串口
Serial.begin(115200);
// 初始化引脚为输出模式
pinMode(IN1,OUTPUT);
pinMode(IN2,OUTPUT);
pinMode(IN3,OUTPUT);
pinMode(IN4,OUTPUT);
pinMode(IN5,OUTPUT);
pinMode(TrigPin,OUTPUT);//设置D5为输出接口
pinMode(EchoPin,INPUT);//设置D6为输入接口
}
void loop() {
CSBCJ();
LEDDOWN();
jc();
}
|
|