arduino中的问题,如果运行系统如何修复

问题描述

你好,我有问题:

状态传感器=传感器步进“如果”,任何人都“立即执行” =冲动“ =所有代码都运行”完美的工作,我很开心”,但是如果传感器LOW a在加载代码时未检测到任何运动,则=中断全部停止,即使它在结束或中途结束时,将在没有交通“”(stage_sensor == HIGH)“”时停止,我不知道如何解决此问题///

请帮助或建议

编辑:可能存在语法错误(不一致),但只是想提出一个问题,系统仅在“ if”下工作,这是问题,我不知道如何解决


#include <AccelStepper.h> //accelstepper library
// #define light
// #define move_sensor
// #define pump_water
// #define fan_blowing
// #define fan_extractor
// #define blue
// #define red
// #define green

const byte limitSwitch_1 = 26;
const byte limitSwitch_2 = 25;
bool switchFlipped = false;
bool prevIoUsFlip = true;
int switchCounter;
int newSpeed;
int state_sensor      = 0;  // <--- stage sensor //
int light              = 2;
int blue          = 3;
int red           = 4;
int green            = 5;
int fan_blowing = 6;
int water_pump         = 8;
int move_sensor      = 9;
int fan_extractor  = 10;

AccelStepper stepper(1,22,23);

void setup()
{

        pinMode(water_pump,OUTPUT);

        pinMode(light,OUTPUT);

        pinMode(fan_blowing,OUTPUT);

        pinMode(fan_extractor,OUTPUT);  

        pinMode(blue,OUTPUT);

        pinMode(red,OUTPUT);

        pinMode(green,OUTPUT);

        pinMode(move_sensor,INPUT);

        pinMode(limitSwitch_1,INPUT_PULLUP);  //pin 1 engine (IF touch)

        pinMode(limitSwitch_2,INPUT_PULLUP);  //pin 2 engine (IF touch)

        Serial.begin(9600);

        stepper.setMaxSpeed(1000);

        stepper.setacceleration(100); 

        stepper.setSpeed(1000);

        delay(500);

    }

  void loop()

    {

        digitalWrite(light,HIGH); 

        digitalWrite(blue,HIGH);

        state_sensor = digitalRead(sensor_move);

        if (state_sensor ==         HIGH)   // <--- stage sensor IF anyone move = all code run but if sensor LOW did not detect movement all code broke stop all //
  
            {

                digitalWrite(blue,LOW);
  
                digitalWrite(red,HIGH);
  
                stepper.runSpeed();
  
                engine();
          }
    }



    void engine() 
  
    {

        if(digitalRead(limitSwitch_1) == LOW)
        
        {
 
            switchCounter++;

            delay(1000);

            newSpeed = -1 * (1000 + (switchCounter * 200));

            stepper.setSpeed(newSpeed);
        }

        if(digitalRead(limitSwitch_2) == LOW)
   
        {
      
            switchCounter++;

            delay(1000);

            newSpeed = -1 * (1000 + (switchCounter * 200));

            stepper.stop();

            fans();
    
        }
 
    }




    void fans()

    {

    digitalWrite(red,HIGH);

    {
        digitalWrite(fan_blowing,HIGH);

        digitalWrite(fan_extractor,HIGH);

        delay(1000);

        digitalWrite(water_pump,HIGH);
 
    }

    delay(1000);

    digitalWrite(red,LOW);

    digitalWrite(water_pump,LOW);

    digitalWrite(green,HIGH);

    delay(1000);

    digitalWrite(fan_blowing,LOW);

    digitalWrite(fan_extractor,LOW);

    digitalWrite(blue,HIGH); //this blue RGB light "ON" but if sensor_steps "ON" = active cycle,blue light led off

    delay(1000);

}


解决方法

您可以做的是设置一个全局“ stage”变量:

#include <AccelStepper.h> //accelstepper library

const byte limitSwitch_1 = 26;
const byte limitSwitch_2 = 25;
bool switchFlipped = false;
bool previousFlip = true;
int switchCounter; 
int newSpeed;

int stage;
  
AccelStepper stepper(1,22,23);

void setup()
  
    {
                                        
        pinMode(limitSwitch_1,INPUT_PULLUP);

        pinMode(limitSwitch_2,INPUT_PULLUP);

        Serial.begin(9600);
 
        stepper.setMaxSpeed(1000);

        stepper.setAcceleration(100);

        stepper.setSpeed(1000);

        delay(500);
        
        stage = 0;

    }

void loop()

    {  
        
        stepper.runSpeed();
  
        runner();

    }

void runner()
{

    if(stage == 0 && digitalRead(limitSwitch_1) == LOW)

        {  
                     
            switchCounter++;

            delay(5000);
    
            newSpeed = -1 * (1000 + (switchCounter * 200));

            stepper.setSpeed(newSpeed);
            
            ++stage;
 
        }

    if(stage == 1 && digitalRead(limitSwitch_2) == LOW)
  
        {

            stepper.setSpeed(1000);
            delay(1000);
            stepper.setSpeed(0);
            
            ++stage;
        }
    if (stage == 2) {
        // do next thing,then ++stage;,etc.
    }     
}