查看: 196|回复: 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,确认一下程序到底跑哪儿了。
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    今晚闲来无事搞了下STM32 Ardunio 的SPI2 SD卡的通讯
    今晚闲来无事搞了下STM32
    看到Ardunio很火,就想用STM32F103RBT6的板子试一下。之前移植网上带系统的,竟然说超
    arduino之串口通讯
    arduino之串口通讯
    总操流程: 1、写入程序 2、测试[hr][/backcolor] 写程序[/backcolor] [*]void s
    四位数码管动态显示
    四位数码管动态显示
    代码如下;从9990到9999,然后再从9898开始 代码撸起; const unsigned char dofly_Du
    求助!GM65二维码扫描模块怎么用?
    求助!GM65二维码扫描模块
    求助!GM65二维码扫描模块怎么用? 卖家给的资料真的看不懂该怎么弄。。( ̄▽ ̄)~*
    Arduino Pro Micro 打造USB音频转 3.5mm音频转接板
    Arduino Pro Micro 打造US
    3.5mm耳机接口是PC上最常见的音频接口,因为它工艺简单、价格低廉在涉及到声音输入输
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表