Traffic Advisor

Hey
I want to use this code as a basis but I do not want to use the mode function on button 12
I want to make 8 LEDs on pin 1 to 8
and I want pin 9 to 13 or the analog pins as a input
to select
mode 1 left to right
mode 2 center out
mode 3 right to left
mode 4 random
mode 5 all off
but i am a new at arduino so all the help is welcome

#define A 1 //LED1
#define B 2 //LED2
#define C 3 //LED3
#define D 4 //LED4
#define E 5 //LED5
#define F 6 //LED6
#define G 7 //LED7
#define H 8 //LED8
#define I 9 //LED9
#define J 10 //LED10

int button = 12;//button
int val; //button read status
int state; //hold
int presses= 0;//# of presses on button
int mode = 0; //current mode
void setup(){
pinMode(A,OUTPUT);
pinMode(B,OUTPUT);
pinMode(C,OUTPUT);
pinMode(D,OUTPUT);
pinMode(E,OUTPUT);
pinMode(F,OUTPUT);
pinMode(G,OUTPUT);
pinMode(H,OUTPUT);
pinMode(I,OUTPUT);
pinMode(J,OUTPUT);
pinMode(button,INPUT);
state = digitalRead(button);  
}
void loop(){
val = digitalRead(button); //sets val to the state of the button press
delay(15); //debounce multiple button presses
if (val != state){ //compares button press to current state
  if (val == LOW){
    if (mode == 0){ //if mode is zero and button was pressed, set mode to 1
      mode = 1;
    } else {
      if (mode == 1){ //increment mode to 2
        mode = 2;
      } else {
        if (mode == 2){ //increment mode to 3
          mode = 3;
        } else {
      }if (mode == 3){ //increment mode to 4
        mode = 4;
      } else {
        if (mode == 4){ //increment mode to 5
          mode = 5;
        } else {
          if (mode == 5){ //increment mode to 0
            mode = 0;
            
          }
        }
      }
    }
  }
}
}
state = val;

if (mode == 0){ //ALL OFF//mode 0 turns all LEDs off
  digitalWrite(A,LOW); //LED 
  digitalWrite(B,LOW); //LED 
  digitalWrite(C,LOW); //LED 
  digitalWrite(D,LOW); //LED 
  digitalWrite(E,LOW); //LED 
  digitalWrite(F,LOW); //LED 
  digitalWrite(G,LOW); //LED 
  digitalWrite(H,LOW); //LED 
  digitalWrite(I,LOW); //LED 
  digitalWrite(J,LOW); //LED
}
if (mode == 1){ // |* * * * * |~| * * * * *|R 
  byte count = 0; //set counter 
  byte number = 0; while (count < 3){ //count loop 1 
    digitalWrite(A,HIGH); 
    digitalWrite(C,HIGH); 
    digitalWrite(E,HIGH); 
    digitalWrite(G,HIGH); 
    digitalWrite(I,HIGH); 
    delay(70); 
    digitalWrite(A,LOW); 
    digitalWrite(C,LOW); 
    digitalWrite(E,LOW);
    digitalWrite(G,LOW); 
    digitalWrite(I,LOW); 
    delay(70); count++;
  }
  while (number < 3){ //count loop 2 
    digitalWrite(B,HIGH); 
    digitalWrite(D,HIGH); 
    digitalWrite(F,HIGH); 
    digitalWrite(H,HIGH); 
    digitalWrite(J,HIGH); 
    delay(70); 
    digitalWrite(B,LOW); 
    digitalWrite(D,LOW); 
    digitalWrite(F,LOW); 
    digitalWrite(H,LOW); 
    digitalWrite(J,LOW); 
    delay(70); number++;
  }
}
if (mode == 2){ // |*** |~| *****|R 
  digitalWrite(A,HIGH); 
  digitalWrite(B,HIGH); 
  digitalWrite(C,HIGH); 
  digitalWrite(D,HIGH); 
  digitalWrite(E,HIGH); 
  delay(150); 
  digitalWrite(A,LOW);
  digitalWrite(B,LOW);
  digitalWrite(C,LOW);
  digitalWrite(D,LOW);
  digitalWrite(E,LOW);
  digitalWrite(F,HIGH);
  digitalWrite(G,HIGH); 
  digitalWrite(H,HIGH); 
  digitalWrite(I,HIGH); 
  digitalWrite(J,HIGH); 
  delay(150); 
  digitalWrite(F,LOW); 
  digitalWrite(G,LOW); 
  digitalWrite(H,LOW); 
  digitalWrite(I,LOW); 
  digitalWrite(J,LOW);
}
if (mode == 3){ // |<--------*|R 
  digitalWrite(J,HIGH); 
  delay(150); 
  digitalWrite(J,LOW);
  digitalWrite(I,HIGH);
  delay(150); 
  digitalWrite(I,LOW); 
  digitalWrite(H,HIGH);
  delay(150); 
  digitalWrite(H,LOW);
  digitalWrite(G,HIGH); 
  delay(150); 
  digitalWrite(G,LOW); 
  digitalWrite(F,HIGH); 
  delay(150); 
  digitalWrite(F,LOW); 
  digitalWrite(E,HIGH); 
  delay(150); 
  digitalWrite(E,LOW); 
  digitalWrite(D,HIGH); 
  delay(150); 
  digitalWrite(D,LOW); 
  digitalWrite(C,HIGH); 
  delay(150); 
  digitalWrite(C,LOW); 
  digitalWrite(B,HIGH); 
  delay(150); 
  digitalWrite(B,LOW); 
  digitalWrite(A,HIGH); 
  delay(150); 
  digitalWrite(A,LOW);
}
if (mode == 4){ // |<---**--->| 
  digitalWrite(E,HIGH); 
  digitalWrite(F,HIGH); 
  delay(150); 
  digitalWrite(E,LOW); 
  digitalWrite(F,LOW);
  digitalWrite(D,HIGH); 
  digitalWrite(G,HIGH);
  delay(150);
  digitalWrite(D,LOW); 
  digitalWrite(G,LOW); 
  digitalWrite(C,HIGH); 
  digitalWrite(H,HIGH); 
  delay(150); 
  digitalWrite(C,LOW);
  digitalWrite(H,LOW);
  digitalWrite(B,HIGH); 
  digitalWrite(I,HIGH); 
  delay(150); 
  digitalWrite(B,LOW); 
  digitalWrite(I,LOW);
  digitalWrite(A,HIGH); 
  digitalWrite(J,HIGH); 
  delay(150); 
  digitalWrite(A,LOW); 
  digitalWrite(J,LOW);
}
if (mode == 5){ // |*-------->|R 
  digitalWrite(A,HIGH); 
  delay(150); 
  digitalWrite(A,LOW); 
  digitalWrite(B,HIGH); 
  delay(150); 
  digitalWrite(B,LOW); 
  digitalWrite(C,HIGH); 
  delay(150); 
  digitalWrite(C,LOW); 
  digitalWrite(D,HIGH); 
  delay(150); 
  digitalWrite(D,LOW); 
  digitalWrite(E,HIGH); 
  delay(150); 
  digitalWrite(E,LOW); 
  digitalWrite(F,HIGH); 
  delay(150); 
  digitalWrite(F,LOW); 
  digitalWrite(G,HIGH); 
  delay(150); 
  digitalWrite(G,LOW); 
  digitalWrite(H,HIGH); 
  delay(150); 
  digitalWrite(H,LOW);
  digitalWrite(I,HIGH);
  delay(150);
  digitalWrite(I,LOW);
  digitalWrite(J,HIGH);
  delay(150); 
  digitalWrite(J,LOW);
}
}

but i am a new at arduino so all the help is welcome

You might be new but that code has appeared several times in this forum in the last few weeks.
Where did it come from.

Did your teacher give you this and ask you to change it? It is very bad code.

Grumpy_Mike:
Where did it come from.

Quick Google search:

Leo..

yes I have him off the internet yes

but for my profession I am a traffic control and I want a Traffic Advisor in my car
because I often stand along the road but now I want an arduino a system that all my flashing lights and a Traffic Advisor can operate

something likebut I do not know if this is going to work that way

#define A 1 //LED1
#define B 2 //LED2
#define C 3 //LED3
#define D 4 //LED4
#define E 5 //LED5
#define F 6 //LED6
#define G 7 //LED7
#define H 8 //LED8
#define i9 //BUTTON1
#define j10 //BUTTON2
#define k11 //BUTTON3
#define l12 //BUTTON4

int button1 = i9;//button1
int button2 = j10;//button2
int button3 = k11;//button3
int button4 = l12;//button4
int val; //button read status
int state; //hold
int presses= 0;//# of presses on button
int mode = 0; //current mode


void setup(){
pinMode(A,OUTPUT);
pinMode(B,OUTPUT);
pinMode(C,OUTPUT);
pinMode(D,OUTPUT);
pinMode(E,OUTPUT);
pinMode(F,OUTPUT);
pinMode(G,OUTPUT);
pinMode(H,OUTPUT);
pinMode(BUTTON1,INPUT);
pinMode(BUTTON2,INPUT);
pinMode(BUTTON3,INPUT);
pinMode(BUTTON4,INPUT);
state = digitalRead(button1);
state = digitalRead(button2);
state = digitalRead(button3);
state = digitalRead(button4);
}

This code is beyond bad. For the fun of it, hereby my version. Should be functional identical.

const byte ledPins[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
const byte button = 12;//button
byte val; //button read status
byte state; //hold
byte mode = 0; //current mode
void setup() {
  for (byte i = 0; i < 10; i++) {
    pinMode(ledPins[i], OUTPUT);
  }
  pinMode(button, INPUT);
  state = digitalRead(button);
}
void loop() {
  val = digitalRead(button); //sets val to the state of the button press
  delay(15); //debounce multiple button presses
  if (val == LOW) {
    mode++;
    if (mode > 5) {
      mode = 0;
    }
  }

  if (mode == 0) { //ALL OFF//mode 0 turns all LEDs off
    for (byte i = 0; i < 10; i++) {
      digitalWrite(ledPins[i], LOW);
    }
  }
  if (mode == 1) { // |* * * * * |~| * * * * *|R
    for (byte i = 0; i < 3; i++) {
      blinkLEDs(0b0101010101, 70);
      delay(70);
    }
    for (byte i = 0; i < 3; i++) {
      blinkLEDs(0b1010101010, 70);
      delay(70);
    }
  }
  if (mode == 2) { // |*** |~| *****|R
    blinkLEDs(0b0000011111, 150);
    blinkLEDs(0b1111100000, 150);
  }
  if (mode == 3) { // |<--------*|R
    for (byte i = 9; i >= 0; i--) {
      blinkLEDs(1 << i, 150);
    }
  }
  if (mode == 4) { // |<---**--->|
    blinkLEDs(0b0000110000, 150);
    blinkLEDs(0b0001001000, 150);
    blinkLEDs(0b0010000100, 150);
    blinkLEDs(0b0100000010, 150);
    blinkLEDs(0b1000000001, 150);
  }
  if (mode == 5) { // |*-------->|R
    for (byte i = 0; i < 10; i++) {
      blinkLEDs(1 << i, 150);
    }
  }
}

void blinkLEDs (int pattern, int delayTime) {
  for (byte i = 0; i < 10; i++) {
    digitalWrite(ledPins[i], pattern & (1 << i));
  }
  delay(delayTime);
}

My code, 68 lines:
Sketch uses 1582 bytes (5%) of program storage space. Maximum is 30720 bytes.
Global variables use 22 bytes (1%) of dynamic memory, leaving 2026 bytes for local variables. Maximum is 2048 bytes.

Original code, 221 lines:
Sketch uses 2716 bytes (8%) of program storage space. Maximum is 30720 bytes.
Global variables use 15 bytes (0%) of dynamic memory, leaving 2033 bytes for local variables. Maximum is 2048 bytes.

Well, that's out of the way. Some other things: that variable name mode is coloured in my IDE - so that is used as a keyword in a library. I have no idea which one, but it's a literal red flag better choose another name.

Pin 0 and 1 are normally used for Serial, better not use them here.

Didn't do anything with the sketch from #4 as that's not doing much if anything.

#define i9 //BUTTON1

Define i9 as nothing?

what is wrong here that this does not work

int state; //hold
int val; //button read status
int presses= 0;//# of presses on button
int mode = 0; //current mode

void setup() {
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, INPUT);

   state = digitalRead(10);
}

  
void loop() {
  val = digitalRead(10); //sets val to the state of the button press
  delay(15); //debounce multiple button presses
  if (val != state){ //compares button press to current state
    if (val == LOW){
       if (mode == 0){ //if mode is zero and button was pressed, set mode to 1
        mode = 1;
       } else {
         if (mode == 1)
         (mode == 0)
       }
    }
  }
state = val;

if (mode == 0){ //ALL OFF//mode 0 turns all LEDs off
  digitalWrite(2,LOW); //LED 
  digitalWrite(3,LOW); //LED 
  digitalWrite(4,LOW); //LED 
  digitalWrite(5,LOW); //LED 
  digitalWrite(6,LOW); //LED 
  digitalWrite(7,LOW); //LED 
  digitalWrite(8,LOW); //LED 
  digitalWrite(9,LOW); //LED 
}
if (mode == 1){ // |* * * * * |~| * * * * *|R 
  byte count = 0; //set counter 
  byte number = 0; while (count < 3){ //count loop 1 
    digitalWrite(3,HIGH); 
    digitalWrite(5,HIGH); 
    digitalWrite(7,HIGH); 
    digitalWrite(9,HIGH); 
    delay(70); 
    digitalWrite(3,LOW); 
    digitalWrite(5,LOW);
    digitalWrite(7,LOW); 
    digitalWrite(9,LOW); 
    delay(70); count++;
  }
  while (number < 3){ //count loop 2 
    digitalWrite(2,HIGH); 
    digitalWrite(4,HIGH); 
    digitalWrite(6,HIGH); 
    digitalWrite(8,HIGH);  
    delay(70); 
    digitalWrite(2,LOW); 
    digitalWrite(4,LOW); 
    digitalWrite(6,LOW); 
    digitalWrite(8,LOW);  
    delay(70); number++;
  1. code still looks terrible and is very inefficient (you don't need three if statements to toggle a variable between 1 and 0).
  2. you didn't tell what doesn't work.
  3. you didn't provide a sketch of your wiring, especially how that button is wired.

wvmarle:

  1. code still looks terrible and is very inefficient (you don't need three if statements to toggle a variable between 1 and 0).
  2. you didn't tell what doesn't work.
  3. you didn't provide a sketch of your wiring, especially how that button is wired.

how would you do it then

I gave you an example already of much cleaner and more maintainable code. Looking at it again I realise I cleaned it up too much, button should be dealt with only on state change.

"It doesn't work" is one of the most useless descriptions of a piece of code. Your code will probably do at least something, and you never described in detail what you want it to do for you. A wiring diagram is also needed to better understand what's going wrong.

this is what I want to make
button 1 left to right
button 2 center out
button 3 right to the left
button 4 random
button 5 all off

this is what I want to make

How is that a "Traffic Advisor"?

what is wrong here that this does not work

It is pointless to talk about code that won't even compile working, or not.

You have to connect both sides of the buttons to make them work.

Best way to wire a button: GND on one side, then the Arduino pin on the other side, and set the pinMode to INPUT_PULLUP so you don't need the extra resistor. Do note that buttons are active low that way.

After that you have to rewrite your code to read all buttons, and send the correct patterns to the LEDs.

Using the bitwise patterns as per my example makes this the most compact, and you can make it very visual for yourself, as you see the LED pattern in your 0/1 pattern.