查看: 495|回复: 5

[未解决] 为什么我下面的程序不按顺序执行,求大佬解惑

[复制链接]
  • TA的每日心情
    奋斗
    2019-1-11 14:32
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2019-1-11 14:28 | 显示全部楼层 |阅读模式
    if (fsrReading>500){
    shear();
    delay(2000);
    motorreset();
    delay(time);
    shearreset();
    delay(2000);
    motorstop();
    shearstop();
    }
    想实现在满足if条件的时候,先执行shear();两秒后再执行motorreset();按顺序执行,可是为什么实现的结果是循环执行shear(),后面的程不执行?
    我在想是不是因为在执行shear()语句时,if条件一直没有变,只有在执行motorreset()后if条件才会变化,所以导致循环执行shear?
    想问一下大佬如果想在满足if条件后,想先执行shear,再执行motorreset()以及后面的内容,应该怎么写呢?
  • TA的每日心情
    奋斗
    2018-12-6 11:03
  • 签到天数: 29 天

    [LV.4]偶尔看看III

    发表于 2019-1-11 17:51 | 显示全部楼层
    既然怀疑了,你首先得把shear()代码贴出来。
  • TA的每日心情
    奋斗
    2019-1-11 14:32
  • 签到天数: 1 天

    [LV.1]初来乍到

     楼主| 发表于 2019-1-11 18:04 | 显示全部楼层
    int fsrPin = 0;     
    float fsrReading;          // pressure=A0 接口
    #define CLK 11           
    #define CW 8  
    #define EN 7             //Motor
    const int TrigPin = 19;
    const int EchoPin = 18;
    float cm;
    int motor1 = 5;
    int motor2 = 9;
    int motor1reset = 6;
    int motor2reset = 10;
    unsigned long start;
    unsigned long whole;
    unsigned long time;
    int pina;

    void setup() {
      // put your setup code here, to run once:
    pinMode(CLK,OUTPUT);  
    pinMode(CW,OUTPUT);  
    pinMode(EN,OUTPUT);  
    pinMode(TrigPin, OUTPUT);
    pinMode(EchoPin, INPUT);
    pinMode(motor1, OUTPUT);
    pinMode(motor2, OUTPUT);
    pinMode(motor1reset, OUTPUT);
    pinMode(motor2reset, OUTPUT);
    Serial.begin(9600);
    }

    void loop() {
      // put your main code here, to run repeatedly:
    distance(cm);
    pressure(fsrReading);
    start = millis();
    if (cm>=3&cm<=4)
    if(fsrReading<500){  
      digitalWrite(CW,HIGH);              //Motor forward-rotating
      for(int i=0;i<200;++i)  
    {  
    digitalWrite(CLK,HIGH);//逆时针(正转),无细分,半流,200脉冲/转,步距角1.8度,500KHZ  
    delayMicroseconds(500);  
    digitalWrite(CLK,LOW);  
    delayMicroseconds(500);
    }
    }
    else{
    digitalWrite(EN,LOW);
    digitalWrite(CLK,LOW);
    }
    whole = millis();
    time=whole - start;
    if (fsrReading>500&cm>=3&cm<=4){
    shear();
    motorreset();
    shearreset();
    delay(2000);
    }
    else{
    motorstop();
    shearstop();
    }
    }



    float distance(float &a){
      digitalWrite(TrigPin, LOW); //低高低电平发一个短时间脉冲去TrigPin
      delayMicroseconds(2);
      digitalWrite(TrigPin, HIGH);
      delayMicroseconds(10);
      digitalWrite(TrigPin, LOW);
    a = pulseIn(EchoPin, HIGH) / 58; //将回波时间换算成cm
    Serial.print(cm);
    Serial.print("cm");//串口输出
    Serial.println();
    return a;
    }

    float pressure(float &b){
       b = analogRead(fsrPin);
    //   Serial.print("pressure = ");
    //   Serial.println(fsrReading);            //printf pressure
       return b;
    }
    void shear(){
    digitalWrite(5,HIGH);
    digitalWrite(6,LOW);
    digitalWrite(9,HIGH);
    digitalWrite(10,LOW);
    delay(2000);
    }
    void motorreset(){
    digitalWrite(CW,LOW);
      for(int i=0;i<200;++i)  
    {  
    digitalWrite(CLK,HIGH);//逆时针(正转),无细分,半流,200脉冲/转,步距角1.8度,500KHZ  
    delayMicroseconds(500);  
    digitalWrite(CLK,LOW);  
    delayMicroseconds(500);
    }
    delay(time);
    }
    void shearreset(){
    digitalWrite(5,LOW);
    digitalWrite(6,HIGH);
    digitalWrite(9,LOW);
    digitalWrite(10,HIGH);
    delay(2000);
    }
    void motorstop(){
    digitalWrite(EN,LOW);
    digitalWrite(CLK,LOW);
    }
    void shearstop(){
    digitalWrite(5,LOW);
    digitalWrite(6,LOW);
    digitalWrite(9,LOW);
    digitalWrite(10,LOW);
    }
  • TA的每日心情
    奋斗
    2019-1-11 14:32
  • 签到天数: 1 天

    [LV.1]初来乍到

     楼主| 发表于 2019-1-11 18:07 | 显示全部楼层
    _北国 发表于 2019-1-11 18:04
    int fsrPin = 0;     
    float fsrReading;          // pressure=A0 接口
    #define CLK 11           

    完整代码,大佬们帮我看下,前面一部分没有问题,就是贴出来的if语句里出问题了,想先执行shear();结束执行motorreset,
    void shear(){
    digitalWrite(5,HIGH);
    digitalWrite(6,LOW);
    digitalWrite(9,HIGH);
    digitalWrite(10,LOW);
    delay(2000);
    }
  • TA的每日心情
    奋斗
    2019-1-11 14:32
  • 签到天数: 1 天

    [LV.1]初来乍到

     楼主| 发表于 2019-1-11 18:09 | 显示全部楼层
    lxw1997 发表于 2019-1-11 17:51
    既然怀疑了,你首先得把shear()代码贴出来。

    楼下完整代码,大佬帮我看下,shear程序里是两个直流电机转动2秒,两秒后motorreset(另一个步进电机转动)执行,

    该用户从未签到

    发表于 2019-1-11 20:52 | 显示全部楼层
    float distance(float &a)
    这么牛逼的写法。。。。。
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    关于Open Nul问题,
    关于Open Nul问题,
    如图所示,驱动安装的时候,没有出现错误(比如安装过程中没有出现系统找不到指定文件
    Arduino模拟USB键盘
    Arduino模拟USB键盘
    [md] ### 模拟键盘输入信息 本示例将演示使用Arduino Leonardo模拟USB键盘输出信息。
    小白求助
    小白求助
    小白刚接触arduino编程基础较差,发现可以使用图形编程软件,想问一下图片上的是什么
    光敏电阻检测环境光实验
    光敏电阻检测环境光实验
    本文节选自《Arduino程序设计基础》 一些简单的电子元件就可以做传感器使用,例如我
    打砖块游戏
    打砖块游戏
    **** 本内容被作者隐藏 ****
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表