I am trying to create a project for my car that displays what gear I am in. I am simulating the final product with pushbuttons for now, but I am trying to get my code finished so that I can have a quick install.
The issue I am running in to is that I can't switch what is displayed on the 7-Segment display. Here is my code and attached is a pictorial diagram of my schematic.
const int gear1 = 0;
const int gear2 = 1;
const int gear3 = 2;
const int gear4 = 3;
const int gear5 = 4;
const int reverse = 5;
const int segment_a = 6;
const int segment_b = 7;
const int segment_c = 8;
const int segment_d = 9;
const int segment_e = 10;
const int segment_f = 11;
const int segment_g = 12;
void setup(){
pinMode(gear1, INPUT);
pinMode(gear2, INPUT);
pinMode(gear3, INPUT);
pinMode(gear4, INPUT);
pinMode(gear5, INPUT);
pinMode(reverse, INPUT);
pinMode(segment_a, OUTPUT);
pinMode(segment_b, OUTPUT);
pinMode(segment_c, OUTPUT);
pinMode(segment_d, OUTPUT);
pinMode(segment_e, OUTPUT);
pinMode(segment_f, OUTPUT);
pinMode(segment_g, OUTPUT);
digitalWrite(segment_a, HIGH);
digitalWrite(segment_b, HIGH);
digitalWrite(segment_c, HIGH);
digitalWrite(segment_d, HIGH);
digitalWrite(segment_e, HIGH);
digitalWrite(segment_f, HIGH);
digitalWrite(segment_g, HIGH);
}
void loop(){
//Displays n for neutral when no other gear is selected
while(digitalRead(gear1 == LOW) && digitalRead(gear2 == LOW) && digitalRead(gear3 == LOW) && digitalRead(gear4 == LOW) && digitalRead(gear5 == LOW) && digitalRead(reverse == LOW)){
digitalWrite(segment_a, HIGH);
digitalWrite(segment_b, HIGH);
digitalWrite(segment_c, LOW);
digitalWrite(segment_d, HIGH);
digitalWrite(segment_e, LOW);
digitalWrite(segment_f, HIGH);
digitalWrite(segment_g, LOW);
}
//Displays 1 when the lever is in 1st gear
while(digitalRead(gear1 == HIGH)){
digitalWrite(segment_a, HIGH);
digitalWrite(segment_b, LOW);
digitalWrite(segment_c, LOW);
digitalWrite(segment_d, HIGH);
digitalWrite(segment_e, HIGH);
digitalWrite(segment_f, HIGH);
digitalWrite(segment_g, HIGH);
}
//Displays 2 when the lever is in 2nd gear
while(digitalRead(gear2 == HIGH)){
digitalWrite(segment_a, LOW);
digitalWrite(segment_b, LOW);
digitalWrite(segment_c, HIGH);
digitalWrite(segment_d, LOW);
digitalWrite(segment_e, LOW);
digitalWrite(segment_f, HIGH);
digitalWrite(segment_g, LOW);
}
//Displays 3 when the lever is in 3rd gear
while(digitalRead(gear3 == HIGH)){
digitalWrite(segment_a, LOW);
digitalWrite(segment_b, LOW);
digitalWrite(segment_c, LOW);
digitalWrite(segment_d, LOW);
digitalWrite(segment_e, HIGH);
digitalWrite(segment_f, HIGH);
digitalWrite(segment_g, LOW);
}
//Displays 4 when the lever is in 4th gear
while(digitalRead(gear4 == HIGH)){
digitalWrite(segment_a, HIGH);
digitalWrite(segment_b, LOW);
digitalWrite(segment_c, LOW);
digitalWrite(segment_d, HIGH);
digitalWrite(segment_e, HIGH);
digitalWrite(segment_f, LOW);
digitalWrite(segment_g, LOW);
}
//Displays 5 when the lever is in 5th gear
while(digitalRead(gear5 == HIGH)){
digitalWrite(segment_a, LOW);
digitalWrite(segment_b, HIGH);
digitalWrite(segment_c, LOW);
digitalWrite(segment_d, LOW);
digitalWrite(segment_e, HIGH);
digitalWrite(segment_f, LOW);
digitalWrite(segment_g, LOW);
}
//Displays r for reverse when the lever is in reverse
while(digitalRead(reverse == HIGH)){
digitalWrite(segment_a, HIGH);
digitalWrite(segment_b, HIGH);
digitalWrite(segment_c, HIGH);
digitalWrite(segment_d, HIGH);
digitalWrite(segment_e, LOW);
digitalWrite(segment_f, HIGH);
digitalWrite(segment_g, LOW);
}
}
I am not 100% sure if this is a hardware or coding issue, maybe both. From my understanding, the :while: command should only execute the code in its brackets if the arguments are true. This works when the car is in "neutral." n is displayed, but when I press a button to simulate moving to a different gear, nothing changes.

