Skip to main content
Tweeted twitter.com/StackArduino/status/1488663535525797889
added 321 characters in body
Source Link
Myles
  • 73
  • 7

Theupdated code below is the updated version solving all the problems but adding one new problem. It will not enter into the state of no LEDs on with if else statements and the button signal (RTS_IN == HIGH);other programming combined


const int RTS_IN  = A0;
const int LED_5LTS_IN = 5;A1;

//break signal
const int LED_6BS_IN  = 6;A2;
const int LED_7BS_OUT = 7;11;

//reverse signal
const int LED_8RS_IN  = 8;
A3;
const int stateRS_OUT = 0;10;

unsignedconst longint tNR_OF_LEDS = 0;

4;
voidconst setup()int 
 RIGHTLEDS[NR_OF_LEDS] = {
  6, Serial.begin(9600)7, 8, 9 };
const int 
 LEFTLEDS[NR_OF_LEDS] = pinMode(RTS_IN,{ INPUT);
5, 4, pinMode(LED_53, OUTPUT)2 };
const int pinMode(LED_6,interval OUTPUT);= 100;

int nrOfRightLedsOn pinMode(LED_7,= OUTPUT);0;
int nrOfLeftLedsOn pinMode(LED_8,= OUTPUT);
0;

}unsigned long t = 0;

void loopStateRight()
{;
 void StateStateRightProcess();
}

void SwitchLedsOffStateLeft();
{void StateLeftProcess();

boolean oldSwitchStateRS digitalWrite(LED_5,= LOW);LOW;
boolean newSwitchStateRS digitalWrite(LED_6,= LOW);LOW;
boolean oldSwitchStateBS digitalWrite(LED_7,= LOW);LOW;
boolean newSwitchStateBS digitalWrite(LED_8,= LOW);LOW;
}

void Statesetup() 
{
 
   switch Serial.begin(state9600);
   pinMode(RTS_IN, {INPUT);
     pinMode(LTS_IN, INPUT);
    case 0: //idle
     for (int led = 0; ifled (digitalRead(RTS_IN)< ==NR_OF_LEDS; HIGHled++)
          {
        pinMode(RIGHTLEDS[led], OUTPUT);
  }
   
 t =for millis();
 int led = 0; led < NR_OF_LEDS; led++)
  {
    //digitalWritepinMode(LED_5LEFTLEDS[led], HIGHOUTPUT);
              state = 1;}
           
}
          break;
    void loop() 
{
  StateRight();
  StateLeft();
  
  newSwitchStateBS = digitalRead(BS_IN);
 case 1: //Oneif(newSwitchStateBS LED!= OnoldSwitchStateBS)
      {
    if (digitalRead(RTS_IN)newSwitchStateBS == LOWHIGH)
          {
              SwitchLedsOffdigitalWrite(BS_OUT, HIGH);
       }
    else
   state =digitalWrite(BS_OUT, 0;LOW);
      oldSwitchStateBS = newSwitchStateBS;
  }
          

 elsenewSwitchStateRS if= (millisdigitalRead(RS_IN);
 > tif(newSwitchStateRS +!= 300oldSwitchStateRS)
          {
    if(newSwitchStateRS == HIGH)
    {
    t = millisdigitalWrite(RS_OUT, HIGH);
      }
    else
    digitalWrite(LED_5RS_OUT, HIGHLOW);
              stateoldSwitchStateRS = 2;newSwitchStateRS;
          }
          break;
          
      case 2: // Two LEDs On}
       
void StateRight()

{
  if (digitalRead(RTS_IN) == LOW)
              {
                  SwitchLedsOffSwitchRightLedsOff();
        nrOfRightLedsOn = 0;
    t = millis() + stateinterval;
 = 0;}
  else if (nrOfRightLedsOn < NR_OF_LEDS)
  {
    StateRightProcess();
  }
         else
  {
   else if (millis() >>= t + 300interval)
              {
                  t = millis();
                  digitalWriteSwitchRightLedsOff(LED_6, HIGH);
                  statenrOfRightLedsOn = 3;0;
              }
          break;}
          }
      case 3: //Three LEDs On
          ifvoid (digitalReadStateRightProcess(RTS_IN) == LOW)
          {
              SwitchLedsOff();
              state = 0;
          }
          else if (millis() >>= t + 300interval)
          {
              t = millis();
              digitalWrite(LED_7RIGHTLEDS[nrOfRightLedsOn], HIGH);
              state = 4;nrOfRightLedsOn++;
          }
         }

void break;SwitchRightLedsOff()
{
  for (int led = 0; led < NR_OF_LEDS; led++)
      case 4: //Four LEDs On{
    digitalWrite(RIGHTLEDS[led], LOW);
  }
}




void StateLeft()
{
  if (digitalRead(RTS_INLTS_IN) == LOW)
          {
              SwitchLedsOffSwitchLeftLedsOff();
              statenrOfLeftLedsOn = 0;
    t = millis() + interval;
  }
          else if (millis() > tnrOfLeftLedsOn +< 300NR_OF_LEDS)
          {
              t = millisStateLeftProcess();
              digitalWrite(LED_8, HIGH);
              state = 5;
          }
          break;
         else 
      case 5: //No LEDs on{
          if (digitalReadmillis(RTS_IN) == LOW)
   >= t + interval)
    {
            t = SwitchLedsOffmillis();
        SwitchLeftLedsOff;
      statenrOfLeftLedsOn = 0;
          }
        }
}

void StateLeftProcess()
{
 else if (millis() >>= t + 300interval)
          {
              t = millis();
             digitalWrite(LEFTLEDS[nrOfLeftLedsOn], SwitchLedsOff;HIGH);
            nrOfLeftLedsOn++;
  state =}
}

void 1;SwitchLeftLedsOff()
{
  for (int led = 0; led < NR_OF_LEDS; }led++)
     {
    digitalWrite(LEFTLEDS[led], break;LOW);
    } 
}












 

The code below is the updated version solving all the problems but adding one new problem. It will not enter into the state of no LEDs on with the button signal (RTS_IN == HIGH);


int RTS_IN  = A0;
int LED_5 = 5;
int LED_6 = 6;
int LED_7 = 7;
int LED_8 = 8;

int state = 0;

unsigned long t = 0;


void setup() 
 {
   Serial.begin(9600);
  
   pinMode(RTS_IN, INPUT);
  pinMode(LED_5, OUTPUT);
  pinMode(LED_6, OUTPUT);
  pinMode(LED_7, OUTPUT);
  pinMode(LED_8, OUTPUT);


}

void loop()
{
  State();
}

void SwitchLedsOff()
{ 
  digitalWrite(LED_5, LOW);
  digitalWrite(LED_6, LOW);
  digitalWrite(LED_7, LOW);
  digitalWrite(LED_8, LOW);
}

void State()
{
 
   switch (state)
    {
      
    case 0: //idle
          if (digitalRead(RTS_IN) == HIGH)
          {
              t = millis();
              //digitalWrite(LED_5, HIGH);
              state = 1;
          }
          break;
          
      case 1: //One LED On
          if (digitalRead(RTS_IN) == LOW)
          {
              SwitchLedsOff();
              state = 0;
          }
          else if (millis() > t + 300)
          {
              t = millis();
              digitalWrite(LED_5, HIGH);
              state = 2;
          }
          break;
          
      case 2: // Two LEDs On
          if (digitalRead(RTS_IN) == LOW)
              {
                  SwitchLedsOff();
                  state = 0;
              }
              else if (millis() > t + 300)
              {
                  t = millis();
                  digitalWrite(LED_6, HIGH);
                  state = 3;
              }
          break;
          
      case 3: //Three LEDs On
          if (digitalRead(RTS_IN) == LOW)
          {
              SwitchLedsOff();
              state = 0;
          }
          else if (millis() > t + 300)
          {
              t = millis();
              digitalWrite(LED_7, HIGH);
              state = 4;
          }
          break;
          
      case 4: //Four LEDs On
          if (digitalRead(RTS_IN) == LOW)
          {
              SwitchLedsOff();
              state = 0;
          }
          else if (millis() > t + 300)
          {
              t = millis();
              digitalWrite(LED_8, HIGH);
              state = 5;
          }
          break;
          
      case 5: //No LEDs on
          if (digitalRead(RTS_IN) == LOW)
          {
              SwitchLedsOff();
              state = 0;
          }
          else if (millis() > t + 300)
          {
              t = millis();
              SwitchLedsOff;
              state = 1;
          }
          break;
    } 
}












 

updated code below with if else statements and the other programming combined


const int RTS_IN  = A0;
const int LTS_IN = A1;

//break signal
const int BS_IN  = A2;
const int BS_OUT = 11;

//reverse signal
const int RS_IN  = A3;
const int RS_OUT = 10;

const int NR_OF_LEDS = 4;
const int RIGHTLEDS[NR_OF_LEDS] = { 6, 7, 8, 9 };
const int LEFTLEDS[NR_OF_LEDS] = { 5, 4, 3, 2 };
const int interval = 100;

int nrOfRightLedsOn = 0;
int nrOfLeftLedsOn = 0;

unsigned long t = 0;

void StateRight();
void StateRightProcess();

void StateLeft();
void StateLeftProcess();

boolean oldSwitchStateRS = LOW;
boolean newSwitchStateRS = LOW;
boolean oldSwitchStateBS = LOW;
boolean newSwitchStateBS = LOW;


void setup() 
{
  Serial.begin(9600);
  pinMode(RTS_IN, INPUT);
  pinMode(LTS_IN, INPUT);

  for (int led = 0; led < NR_OF_LEDS; led++)
  {
    pinMode(RIGHTLEDS[led], OUTPUT);
  }
   
  for (int led = 0; led < NR_OF_LEDS; led++)
  {
    pinMode(LEFTLEDS[led], OUTPUT);
  }
 
}

void loop() 
{
  StateRight();
  StateLeft();
 
  newSwitchStateBS = digitalRead(BS_IN);
   if(newSwitchStateBS != oldSwitchStateBS)
  {
    if(newSwitchStateBS == HIGH)
    {
      digitalWrite(BS_OUT, HIGH);
    }
    else
    digitalWrite(BS_OUT, LOW);
    oldSwitchStateBS = newSwitchStateBS;
  }
 

 newSwitchStateRS = digitalRead(RS_IN);
  if(newSwitchStateRS != oldSwitchStateRS)
  {
    if(newSwitchStateRS == HIGH)
    {
      digitalWrite(RS_OUT, HIGH);
    }
    else
    digitalWrite(RS_OUT, LOW);
    oldSwitchStateRS = newSwitchStateRS;
  }
  

}

void StateRight()

{
  if(digitalRead(RTS_IN) == LOW)
  {
    SwitchRightLedsOff();
    nrOfRightLedsOn = 0;
    t = millis() + interval;
  }
  else if (nrOfRightLedsOn < NR_OF_LEDS)
  {
    StateRightProcess();
  }
  else
  {
    if(millis() >= t + interval)
    {
      t = millis();
      SwitchRightLedsOff();
      nrOfRightLedsOn = 0;
    }
  }
}

void StateRightProcess()
{
  if(millis() >= t + interval)
  {
    t = millis();
    digitalWrite(RIGHTLEDS[nrOfRightLedsOn], HIGH);
    nrOfRightLedsOn++;
  }
}

void SwitchRightLedsOff()
{
  for (int led = 0; led < NR_OF_LEDS; led++)
  {
    digitalWrite(RIGHTLEDS[led], LOW);
  }
}




void StateLeft()
{
  if(digitalRead(LTS_IN) == LOW)
  {
    SwitchLeftLedsOff();
    nrOfLeftLedsOn = 0;
    t = millis() + interval;
  }
  else if (nrOfLeftLedsOn < NR_OF_LEDS)
  {
    StateLeftProcess();
  }
  else 
  {
    if (millis() >= t + interval)
    {
      t = millis();
      SwitchLeftLedsOff;
      nrOfLeftLedsOn = 0;
    }
  }
}

void StateLeftProcess()
{
  if (millis() >= t + interval)
  {
    t = millis();
    digitalWrite(LEFTLEDS[nrOfLeftLedsOn], HIGH);
    nrOfLeftLedsOn++;
  }
}

void SwitchLeftLedsOff()
{
  for (int led = 0; led < NR_OF_LEDS; led++)
  {
    digitalWrite(LEFTLEDS[led], LOW);
  }
}

added 2660 characters in body
Source Link
Myles
  • 73
  • 7

Why the LEDs flash instead of stay constant The code below is the updated version solving all the problems but adding one new problem. It will not enter into the state of no LEDs on with the button signal (RTS_IN == HIGH);


int RTS_IN  = A0;
int LED_5 = 5;
int LED_6 = 6;
int LED_7 = 7;
int LED_8 = 8;

int state = 0;

unsigned long t = 0;


void setup() 
{
  Serial.begin(9600);
  
  pinMode(RTS_IN, INPUT);
  pinMode(LED_5, OUTPUT);
  pinMode(LED_6, OUTPUT);
  pinMode(LED_7, OUTPUT);
  pinMode(LED_8, OUTPUT);


}

void loop()
{
  State();
}

void SwitchLedsOff()
{ 
  digitalWrite(LED_5, LOW);
  digitalWrite(LED_6, LOW);
  digitalWrite(LED_7, LOW);
  digitalWrite(LED_8, LOW);
}

void State()
{

   switch (state)
    {
      
    case 0: //idle
          if (digitalRead(RTS_IN) == HIGH)
          {
              t = millis();
              //digitalWrite(LED_5, HIGH);
              state = 1;
          }
          break;
          
      case 1: //One LED On
          if (digitalRead(RTS_IN) == LOW)
          {
              SwitchLedsOff();
              state = 0;
          }
          else if (millis() > t + 300)
          {
              t = millis();
              digitalWrite(LED_5, HIGH);
              state = 2;
          }
          break;
          
      case 2: // Two LEDs On
          if (digitalRead(RTS_IN) == LOW)
              {
                  SwitchLedsOff();
                  state = 0;
              }
              else if (millis() > t + 300)
              {
                  t = millis();
                  digitalWrite(LED_6, HIGH);
                  state = 3;
              }
          break;
          
      case 3: //Three LEDs On
          if (digitalRead(RTS_IN) == LOW)
          {
              SwitchLedsOff();
              state = 0;
          }
          else if (millis() > t + 300)
          {
              t = millis();
              digitalWrite(LED_7, HIGH);
              state = 4;
          }
          break;
          
      case 4: //Four LEDs On
          if (digitalRead(RTS_IN) == LOW)
          {
              SwitchLedsOff();
              state = 0;
          }
          else if (millis() > t + 300)
          {
              t = millis();
              digitalWrite(LED_8, HIGH);
              state = 5;
          }
          break;
          
      case 5: //No LEDs on
          if (digitalRead(RTS_IN) == LOW)
          {
              SwitchLedsOff();
              state = 0;
          }
          else if (millis() > t + 300)
          {
              t = millis();
              SwitchLedsOff;
              state = 1;
          }
          break;
    } 
}














Why the LEDs flash instead of stay constant

The code below is the updated version solving all the problems but adding one new problem. It will not enter into the state of no LEDs on with the button signal (RTS_IN == HIGH);


int RTS_IN  = A0;
int LED_5 = 5;
int LED_6 = 6;
int LED_7 = 7;
int LED_8 = 8;

int state = 0;

unsigned long t = 0;


void setup() 
{
  Serial.begin(9600);
  
  pinMode(RTS_IN, INPUT);
  pinMode(LED_5, OUTPUT);
  pinMode(LED_6, OUTPUT);
  pinMode(LED_7, OUTPUT);
  pinMode(LED_8, OUTPUT);


}

void loop()
{
  State();
}

void SwitchLedsOff()
{ 
  digitalWrite(LED_5, LOW);
  digitalWrite(LED_6, LOW);
  digitalWrite(LED_7, LOW);
  digitalWrite(LED_8, LOW);
}

void State()
{

   switch (state)
    {
      
    case 0: //idle
          if (digitalRead(RTS_IN) == HIGH)
          {
              t = millis();
              //digitalWrite(LED_5, HIGH);
              state = 1;
          }
          break;
          
      case 1: //One LED On
          if (digitalRead(RTS_IN) == LOW)
          {
              SwitchLedsOff();
              state = 0;
          }
          else if (millis() > t + 300)
          {
              t = millis();
              digitalWrite(LED_5, HIGH);
              state = 2;
          }
          break;
          
      case 2: // Two LEDs On
          if (digitalRead(RTS_IN) == LOW)
              {
                  SwitchLedsOff();
                  state = 0;
              }
              else if (millis() > t + 300)
              {
                  t = millis();
                  digitalWrite(LED_6, HIGH);
                  state = 3;
              }
          break;
          
      case 3: //Three LEDs On
          if (digitalRead(RTS_IN) == LOW)
          {
              SwitchLedsOff();
              state = 0;
          }
          else if (millis() > t + 300)
          {
              t = millis();
              digitalWrite(LED_7, HIGH);
              state = 4;
          }
          break;
          
      case 4: //Four LEDs On
          if (digitalRead(RTS_IN) == LOW)
          {
              SwitchLedsOff();
              state = 0;
          }
          else if (millis() > t + 300)
          {
              t = millis();
              digitalWrite(LED_8, HIGH);
              state = 5;
          }
          break;
          
      case 5: //No LEDs on
          if (digitalRead(RTS_IN) == LOW)
          {
              SwitchLedsOff();
              state = 0;
          }
          else if (millis() > t + 300)
          {
              t = millis();
              SwitchLedsOff;
              state = 1;
          }
          break;
    } 
}














edited tags
Link
Michel Keijzers
  • 13k
  • 7
  • 43
  • 59
Source Link
Myles
  • 73
  • 7
Loading