Search code examples
c++arduinoarduino-c++

Problem in arduino if run system how to fix


Hello i have problem :

state sensor = sensor steps "IF" anyone "steps now = impulse " = all code run"perfect good work im happy" but if sensor LOW a did not detect any motion while loading the code = broke stop all , even if it is at the end close or halfway, it will stop when there is no traffic "" (stage_sensor == HIGH)"", i dont have idea how to fix this//

Please help or sugestion

EDIT : There may be syntax errors (is not consistent), but just wanted to present a problem, the system only works under "if" and this is problem, i dont know how to fix


#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(green,       LOW);

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

    delay(1000);

}



Solution

  • What you could do is set up a global "stage" variable:

    #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.
        }     
    }