查看: 99|回复: 5

为什么下面的语句不是按顺序执行?求大佬解惑

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

    [LV.1]初来乍到

    发表于 2019-1-11 14:30 | 显示全部楼层 |阅读模式
    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-7-17 17:38
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    发表于 2019-1-11 19:13 | 显示全部楼层
    实现的结果是循环执行shear(),后面的程不执行


    首先你要搞清楚你这个判断是否正确,凭感觉是不行的。
    参考4楼说的,在每个子函数里加上print()一些标志信息,判断具体是否有执行到某些函数。
  • TA的每日心情
    开心
    2019-1-18 11:50
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2019-1-11 16:22 | 显示全部楼层
    贴个完整点的代码吧,这谁都帮不了你哦
  • TA的每日心情
    奋斗
    2019-1-11 14:32
  • 签到天数: 1 天

    [LV.1]初来乍到

     楼主| 发表于 2019-1-11 18:01 | 显示全部楼层
    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:02 | 显示全部楼层
    ghzhao 发表于 2019-1-11 16:22
    贴个完整点的代码吧,这谁都帮不了你哦

    楼下完整代码,大佬帮我看下
  • TA的每日心情
    开心
    2019-1-18 11:50
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2019-1-11 19:01 | 显示全部楼层
    建议在你的代码里插入一些串口打印,Serial.print,确认一下程序到底跑哪儿了。
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    KittenBot杯第六届开源硬件开发大赛启动啦
    KittenBot杯第六届开源硬
    大赛简介: 第六届开源硬件开发大赛由Arduino中文社区发起 由KittenBot冠名赞助
    游戏机和开发板脑洞一下;这个本来就是开源的。
    游戏机和开发板脑洞一下;
    这个开发板和标准UNO是1;1的;通用。做在一起是因为可以不用游戏机时可以切换回来做开
    新人求助,关于舵机和限位开关。
    新人求助,关于舵机和限位
    新人求助社区各位哥哥姐姐,具体需要用航模遥控器的3段开关控制Arduino nano控制一个3
    基于MWC开源飞控DIY关键总结分享:
    基于MWC开源飞控DIY关键总
    很早就已经很想写这么一个帖,但总是由于各种原因没能落实,但最后还是找了时
    有关函数返回值的问题
    有关函数返回值的问题
    求助大神们,这个程序中有return返回值,但为什么有这个“ warning: return-statement
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表