关于超声波测距控制电机转动时间的问题-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 511|回复: 2

[未解决] 关于超声波测距控制电机转动时间的问题

[复制链接]
发表于 2022-5-7 22:48 | 显示全部楼层 |阅读模式
大家好,有个问题请教一下大家,我现在用的是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();
}
发表于 2022-5-8 07:08 | 显示全部楼层
程序初始加 int k=1;
void jc()  {
           if ((cm>100)&&(K==1)){
      fanzhuan();
      delay(2000);
      STOP();
      k=0;
    }
    else if ((cm<100)&&(K==0)){
      zhengzhuan();
      delay(2000);
      STOP();
      K=1;
    }
  }
 楼主| 发表于 2022-5-8 12:16 | 显示全部楼层
lwq1947 发表于 2022-5-8 07:08
程序初始加 int k=1;
void jc()  {
           if ((cm>100)&&(K==1)){

非常感谢你的帮助,谢谢你
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-12-1 05:07 , Processed in 0.124481 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表