查看: 329|回复: 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-2-14 16:35
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    发表于 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-2-14 16:35
  • 签到天数: 7 天

    [LV.3]偶尔看看II

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

    本版积分规则

    热门推荐

    开贴讲讲NRF24L01P,让你彻底搞懂它的工作原理,持续更...
    开贴讲讲NRF24L01P,让你
    *****************************************
    小白求助arduino源码如何使用
    小白求助arduino源码如何
    淘宝买了个六足机器人的源码 但是一打开就蒙了 完全看不懂啊,以前没接触过过arduino
    设计了一款智能加湿器,出现了一些控制上的问题
    设计了一款智能加湿器,出
    最近在学习blinker,就想着把手头的加湿器改装成智能加湿器,用了一块WiFiduino、一个
    有偿解答!!求大神带《指纹解锁杯》项目
    有偿解答!!求大神带《指
    想做一个职位解锁的杯子,通过指纹模块控制继电器锁头,从而控制杯子的锁死和开放的装
    【Arduino】37种传感器模块系列实验(29)---实时时钟模块
    【Arduino】37种传感器模
    37款传感器模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表