Working on a custom rc drag tree

I have been working on this project for some time and I am at a loss right now and really hoping someone here could give me a hand.
I have built a staged drag tree using laser and receiver for Pre-stage, Stage, and Finish line. All my code compiled and shown working but when I wire everything up it is nothing but error after error.

LCD displays nothing adjusted contrast and checked for blocks by grounding pin 3 as I read in another forum

laser does nothing when beam is broken.

here is the code and the wokwi link any input will be greatly appreciated

#include <LiquidCrystal.h>

#define FEET_PER_MILE 5280
#define TRACK_LEN 1320
#define NUM_LANES 2
#define RESET_BTN 47
const byte RS = 52;
const byte EN = 49;
const byte D4 = 53;
const byte D5 = 50;
const byte D6 = 51;
const byte D7 = 48;
const byte BAUD_RATE = 9600;
const byte LED_Prestage[2] ={ 8,11};
const byte LED_Stage[2] ={ 7,12};
const byte LED_Y1 = 6;
const byte LED_Y2 = 5;
const byte LED_Y3 = 4;
const byte LED_Start = 3;
const byte LED_RED_Light = 2;

const byte Pre_Stage_Sensor[NUM_LANES] = {A0, A3};
const byte Stage_Sensor[NUM_LANES] = {A1, A4};
const byte Finish_Sensor[NUM_LANES] = {A2, A5};

const byte Start_Button = 46;
//how long is the countdown
const int  CountDownFin = 2000;

//define missing slash char for Flip ani..
uint8_t slash[8] = {
  0b10000,
  0b10000,
  0b01000,
  0b00100,
  0b00100,
  0b00010,
  0b00001,
  0b00001,
};

byte flip = 0;
unsigned long AniMilli = 0;
int IntervalAni = 50;

int state = 0;
bool StartFlag = false;
unsigned long countdownStart;
unsigned long raceStart;

bool Launched[NUM_LANES] = {false, false};
unsigned long reactionTime[NUM_LANES];
unsigned long vehicleStart[NUM_LANES];
bool FinishFlag[NUM_LANES];
unsigned long FinishET[NUM_LANES];


//float ReactSec;


int Pre_Stage_Sensor_Value[NUM_LANES];
int Stage_Sensor_Value[NUM_LANES];
int Finish_Sensor_Value[NUM_LANES];

bool Staged[NUM_LANES] = {false,false};
bool lastStaged[NUM_LANES] = {true,true};
bool needClear = true;



LiquidCrystal lcd(RS, EN, D4, D5, D6, D7);

void setup() {
  pinMode(LED_Y1, OUTPUT);
  pinMode(LED_Y2, OUTPUT);
  pinMode(LED_Y3, OUTPUT);
  pinMode(LED_Start, OUTPUT);
  pinMode(LED_RED_Light, OUTPUT);
  for (int i = 0; i < NUM_LANES; i++)
  {
    pinMode(LED_Prestage[i], OUTPUT);
    pinMode(LED_Stage[i], OUTPUT);
    pinMode(Pre_Stage_Sensor[i], INPUT);
    pinMode(Stage_Sensor[i], INPUT);
    pinMode(Finish_Sensor[i], INPUT);
  }
  pinMode(Start_Button, INPUT_PULLUP);
  pinMode(RESET_BTN, INPUT_PULLUP);
  //Serial.begin(BAUD_RATE);
  Serial.begin(115200);
  lcd.begin(20, 4);
  lcd.createChar(1, slash);
  lcd.setCursor(0, 1);
  lcd.print(F("System Ready.."));
  delay(2000);

  lcd.clear();
}

void loop()
{

  //read in our sensors start of every loop..
  //don't need anymore analogRead anywhere else but here..
  for (int i = 0; i < NUM_LANES; i++) {
    Pre_Stage_Sensor_Value[i] = analogRead(Pre_Stage_Sensor[i]);
    Stage_Sensor_Value[i] = analogRead(Stage_Sensor[i]);
    Finish_Sensor_Value[i] = analogRead (Finish_Sensor[i]);
  }
  //used later in the loop
  int j = 0;



  /*
    Serial.print("PreStage: ");
    Serial.println(Pre_Stage_Sensor_Value[0]);
    Serial.print("Stage: ");
    Serial.println(Stage_Sensor_Value[0]);
    Serial.print("Finish: ");
    Serial.println(Finish_Sensor_Value[0]);
    Serial.print("State: ");
    Serial.println(state);
    Serial.println();
  */


  //enter the state machine..
  switch (state) {
    case 0: //prestasge state..
      if (Pre_Stage_Sensor_Value[0] > 500 || Pre_Stage_Sensor_Value[1] > 500 ) {
       if (Pre_Stage_Sensor_Value[0] > 500)
       { 
          lcd.setCursor(0,1);
          lcd.print("L1:Please Pre-stage "); 
        digitalWrite(LED_Prestage[0], LOW);
        } else {
          lcd.setCursor(0,1);
          lcd.print("L1:Pre-staged       "); 
        }
       if (Pre_Stage_Sensor_Value[1] > 500)
       { 
          lcd.setCursor(0,2);
          lcd.print("L2:Please Pre-stage "); 
        digitalWrite(LED_Prestage[1], LOW);
       } else {
          lcd.setCursor(0,2);
          lcd.print("L2:Pre-staged       "); 
       }
      }
      else {
        digitalWrite(LED_Prestage[0], HIGH);
        digitalWrite(LED_Prestage[1], HIGH);
       // lcd.clear();
        state++;
      }
      break;

    case 1: // Vehicle Staging State
      if (Stage_Sensor_Value[0] > 500 || Stage_Sensor_Value[1] > 500 ) {
       if (Stage_Sensor_Value[0] > 500){  
        digitalWrite(LED_Stage[0], LOW);
        Staged[0] = false;
        } else {
        digitalWrite(LED_Stage[0], HIGH);
        Staged[0] = true;
        }
       if (Stage_Sensor_Value[1] > 500){  
        digitalWrite(LED_Stage[1], LOW);
       Staged[1] = false;
       } else {
        digitalWrite(LED_Stage[1], HIGH);
       Staged[1] = true;
       }

        if (Staged[0]!= lastStaged[0]) {
          lcd.setCursor(0,1);
         if (Stage_Sensor_Value[0] > 500)  
          lcd.print("Lane1 : Please Stage"); else
          lcd.print("Lane1 : Staged      "); 
          lastStaged[0] = Staged[0];
        }
        if (Staged[1]!= lastStaged[1]){
          lcd.setCursor(0,2);
         if (Stage_Sensor_Value[1] > 500)  
          lcd.print("Lane2 : Please Stage"); else
          lcd.print("Lane2 : Staged      "); 
          lastStaged[1] = Staged[1];
          }
         // Staged = true;
          state--;
      }
      else {
        digitalWrite(LED_Stage[0], HIGH);
        digitalWrite(LED_Stage[0], HIGH);
        Staged[0] = true;
        Staged[1] = true;
        lcd.clear();
        lcd.print("Vehicles Ready");
        state++;
      }

      break;

    case 2: //check stage sensor and roll state back
      if (Stage_Sensor_Value[0] > 501 || Stage_Sensor_Value[1] > 501) {
        lcd.clear();
        state--;
        if (Stage_Sensor_Value[0] > 501) Staged[0] = false; lastStaged[0] = true;
        if (Stage_Sensor_Value[1] > 501) Staged[1] = false; lastStaged[1] = true;
      }
      else
      { //staged good .. check start button
        if (digitalRead(Start_Button) == LOW)
        {
          countdownStart = millis();
          state++;
        }
      }
      break;

    case 3: //state 3 counts down leds and checks for early start..
      //check for early start first..
      if (!CheckEarlyStart()) {
        //not an early start, countdown
        if (millis() - countdownStart > 2000) //countdown done
        { //check sensor just before dropping the flag
          digitalWrite(LED_Y3, LOW);
          digitalWrite(LED_Start, HIGH);
          StartFlag = true;
          raceStart = millis();//start counting race from here..
          state++;
        }
        else if (millis() - countdownStart > 1500)
        {
          digitalWrite(LED_Y2, LOW);
          digitalWrite(LED_Y3, HIGH);
        }
        else if (millis() - countdownStart > 1000)
        {
          digitalWrite(LED_Y1, LOW);
          digitalWrite(LED_Y2, HIGH);
        }
        else if (millis() - countdownStart > 500)
        {
          digitalWrite(LED_Y1, HIGH);
        }

      }
      break;

    case 4: //stage to get reaction time
      //need to see car move before next state..
      for (j = 0; j < NUM_LANES; j++) {
        if (Stage_Sensor_Value[j] > 500 && StartFlag && !Launched[j])
        {
          vehicleStart[j] = millis();
          reactionTime[j] = millis();
          Launched[j] =  true;
        }
      }
      if (Launched[0] && Launched[1]) state++;
      break;

    case 5:
      //prints go and reaction time..
      {
        float ReactSecs[2] = {float(reactionTime[0] - raceStart) / 1000, float(reactionTime[1] - raceStart) / 1000};
        lcd.clear();
        lcd.setCursor(0, 1);
        lcd.print("RT1:"); lcd.print(ReactSecs[0], 2);
        lcd.setCursor(0, 3);
        lcd.print("RT2:"); lcd.print(ReactSecs[1], 2);
        Serial.print("RT1:"); Serial.println(ReactSecs[0], 2);
        Serial.print("RT2:"); Serial.println(ReactSecs[1], 2);
        state = 6;
      }
      break;

    case 6:
      for (j = 0; j < NUM_LANES; j++) {
        if (Finish_Sensor_Value[j] < 500)
        {
          if (!FinishFlag[j])
          { FinishFlag[j] = true;
            FinishET[j] = millis() - vehicleStart[j];
            if (needClear)
            {
              lcd.clear();
              needClear = false;
            }

            lcd.setCursor(0, j * 2);
            lcd.print("ET:");
            float secs = float(FinishET[j]) / 1000;
            lcd.print(secs);
            lcd.setCursor(8, j * 2);
            float ReactSecs = float(reactionTime[j] - raceStart) / 1000;
            lcd.print("RT:"); lcd.print(ReactSecs, 2);
            lcd.setCursor(0, j * 2 + 1);
            lcd.print("MPH:");
            float fps = (TRACK_LEN / secs);
            Serial.print("ET:"); Serial.println(secs, 2);
            float mph = (fps / FEET_PER_MILE) / 0.00028;
            Serial.print("MPH:"); Serial.println(mph, 2);
            lcd.print(mph, 2);
            // state = 7;
          } else {
            if (!FinishFlag[0] && !FinishFlag[1]) FlipAni();
          }
        } else {
          if (!FinishFlag[0] && !FinishFlag[1]) FlipAni();
        }
      }

      if (FinishFlag[0] && FinishFlag[1]) state = 7;
      break;


    case 7:
      if (digitalRead(RESET_BTN) == LOW)
      {
        digitalWrite(LED_Start, LOW);
        digitalWrite(LED_Stage, LOW);
        digitalWrite(LED_RED_Light, LOW);
        StartFlag = false;
        FinishFlag[0] = false;
        Staged[0] = false;
        Staged[1] = false;
        FinishFlag[1] = false;
        needClear = true;
        state = 0;
      }
      break;


  }
}// END LOOP BRACKETS

bool CheckEarlyStart()
{
  bool early = false;
  if (Stage_Sensor_Value[0] > 501 || Stage_Sensor_Value[1] > 501) {
    reactionTime[0] = CountDownFin - (millis() - countdownStart);
    digitalWrite(LED_Y3, LOW);
    digitalWrite(LED_Prestage, LOW);
    digitalWrite(LED_Stage, LOW);
    digitalWrite(LED_RED_Light, HIGH);
    float ReactSecs = (float(reactionTime[0]) / 1000) * -1;
    lcd.clear();
    lcd.print("!!Bad Start!!");
    lcd.setCursor(0, 1);
    lcd.print("RT:"); lcd.print(ReactSecs, 2);
    Serial.print("RT:"); Serial.println(ReactSecs, 2);
    state = 7;//bad start .. wait for reset..
    early = true;
  }
  return early;
}



void FlipAni() {
  if (millis() - AniMilli >= IntervalAni)
  {
    AniMilli = millis();
    switch (flip) {
      case 0: flip = 1; lcd.setCursor(0, 0); lcd.print("|"); lcd.setCursor(19, 0); lcd.print("|"); break;
      case 1: flip = 2; lcd.setCursor(0, 0); lcd.print("/"); lcd.setCursor(19, 0); lcd.print("/"); break;
      case 2: flip = 3; lcd.setCursor(0, 0); lcd.print("-"); lcd.setCursor(19, 0); lcd.print("-"); break;
      case 3: flip = 4; lcd.setCursor(0, 0); lcd.print("\x01"); lcd.setCursor(19, 0); lcd.print("\x01"); break;
      case 4: flip = 0; lcd.setCursor(0, 0); lcd.print("|"); lcd.setCursor(19, 0); lcd.print("|"); break;
    }
  }
}

sorry that is the wrong code

here is correct one

#include <LiquidCrystal.h>

#define FEET_PER_MILE 5280
#define TRACK_LEN 1320
#define RESET_BTN 47
const byte RS = 52;
const byte EN = 49;
const byte D4 = 53;
const byte D5 = 50;
const byte D6 = 51;
const byte D7 = 48;
const byte BAUD_RATE = 9600;
const byte LED_Prestage = 8;
const byte LED_Stage = 7;
const byte LED_Y1 = 6;
const byte LED_Y2 = 5;
const byte LED_Y3 = 4;
const byte LED_Start = 3;
const byte LED_RED_Light = 2;
const byte Pre_Stage_Sensor = A0;
const byte Stage_Sensor = A1;
const byte Finish_Sensor = A2;
const byte Start_Button = 46;
//how long is the countdown
const int  CountDownFin = 2000;

//define missing slash char for Flip ani..
uint8_t slash[8] = {
  0b10000,
  0b10000,
  0b01000,
  0b00100,
  0b00100,
  0b00010,
  0b00001,
  0b00001,
};

byte flip = 0;
unsigned long AniMilli = 0;
int IntervalAni = 50;

int state = 0;
bool StartFlag = false;
unsigned long countdownStart;
unsigned long raceStart;
unsigned long reactionTime;
unsigned long vehicleStart;
bool FinishFlag;
unsigned long FinishET;
//float ReactSec;


int Pre_Stage_Sensor_Value;
int Stage_Sensor_Value;
int Finish_Sensor_Value;

bool Staged = false;



LiquidCrystal lcd(RS, EN, D4, D5, D6, D7);

void setup() {
  pinMode(LED_Prestage, OUTPUT);
  pinMode(LED_Stage, OUTPUT);
  pinMode(LED_Y1, OUTPUT);
  pinMode(LED_Y2, OUTPUT);
  pinMode(LED_Y3, OUTPUT);
  pinMode(LED_Start, OUTPUT);
  pinMode(LED_RED_Light, OUTPUT);

  pinMode(Pre_Stage_Sensor, INPUT);
  pinMode(Stage_Sensor, INPUT);
  pinMode(Finish_Sensor, INPUT);
  pinMode(Start_Button, INPUT_PULLUP);
  pinMode(RESET_BTN, INPUT_PULLUP);
  //Serial.begin(BAUD_RATE);
  Serial.begin(115200);
  lcd.begin(16, 2);
  lcd.createChar(1, slash);
  lcd.setCursor(0, 1);
  lcd.print(F("System Ready"));
  delay(2000);
  lcd.clear();
}

void loop()
{

  //read in our sensors start of every loop..
  //don't need anymore analogRead anywhere else but here..

  Pre_Stage_Sensor_Value = analogRead(Pre_Stage_Sensor);
  Stage_Sensor_Value = analogRead(Stage_Sensor);
  Finish_Sensor_Value = analogRead (Finish_Sensor);
  /*
    Serial.print("PreStage: ");
    Serial.println(Pre_Stage_Sensor_Value);
    Serial.print("Stage: ");
    Serial.println(Stage_Sensor_Value);
    Serial.print("Finish: ");
    Serial.println(Finish_Sensor_Value);
    Serial.print("State: ");
    Serial.println(state);
    Serial.println();
    delay(2000);
  */
  //enter the state machine..
  switch (state) {
    case 0: //prestasge state..
      if (Pre_Stage_Sensor_Value > 500) {
        digitalWrite(LED_Prestage, LOW);
      }
      else {
        digitalWrite(LED_Prestage, HIGH);
        state++;
      }
      break;

    case 1: // Vehicle Staging State
      if (Stage_Sensor_Value > 500) {
        digitalWrite(LED_Stage, LOW);
      }
      else {
        digitalWrite(LED_Stage, HIGH);

      }

      if (Stage_Sensor_Value < 500) {
        lcd.clear();
        lcd.print("Vehicle Ready");
        state++;
      }
      else {
        if (!Staged) {
          lcd.clear();
          lcd.print("Please Stage");
          Staged = true;
          state--;
        }
      }

      break;

    case 2: //check stage sensor and roll state back
      if (Stage_Sensor_Value > 501) {
        state--;
        Staged = false;
      }
      else
      { //staged good .. check start button
        if (digitalRead(Start_Button) == LOW)
        {
          countdownStart = millis();
          state++;
        }
      }
      break;

    case 3: //state 3 counts down leds and checks for early start..
      //check for early start first..
      if (!CheckEarlyStart()) {
        //not an early start, countdown
        if (millis() - countdownStart > 2000) //countdown done
        { //check sensor just before dropping the flag
          digitalWrite(LED_Y3, LOW);
          digitalWrite(LED_Start, HIGH);
          StartFlag = true;
          raceStart = millis();//start counting race from here..
          state++;
        }
        else if (millis() - countdownStart > 1500)
        {
          digitalWrite(LED_Y2, LOW);
          digitalWrite(LED_Y3, HIGH);
        }
        else if (millis() - countdownStart > 1000)
        {
          digitalWrite(LED_Y1, LOW);
          digitalWrite(LED_Y2, HIGH);
        }
        else if (millis() - countdownStart > 500)
        {
          digitalWrite(LED_Y1, HIGH);
        }

      }
      break;

    case 4: //stage to get reaction time
      //need to see car move before next state..
      if (Stage_Sensor_Value > 500 && StartFlag)
      {
        vehicleStart = millis();
        reactionTime = millis();
        state++;
      }

      break;

    case 5:
      //prints go and reaction time..
      {
        float ReactSecs = float(reactionTime - raceStart) / 1000;
        lcd.clear();
        lcd.print("   GO  ");
        lcd.setCursor(0, 1);
        lcd.print("RT:"); lcd.print(ReactSecs, 2);
        Serial.print("RT:"); Serial.println(ReactSecs, 2);
        state = 6;
      }
      break;

    case 6:
      if (Finish_Sensor_Value < 500)
      { if (!FinishFlag)
        { FinishFlag = true;
          FinishET = millis() - vehicleStart;
          lcd.clear();
          lcd.print("ET:");
          float secs = float(FinishET) / 1000;
          lcd.print(secs);
          lcd.setCursor(8, 0);
          float ReactSecs = float(reactionTime - raceStart) / 1000;
          lcd.print("RT:"); lcd.print(ReactSecs, 2);
          lcd.setCursor(0, 1);
          lcd.print("MPH:");
          float fps = (TRACK_LEN / secs);
          Serial.print("ET:"); Serial.println(secs, 2);
          float mph = (fps / FEET_PER_MILE) / 0.00028;
          Serial.print("MPH:"); Serial.println(mph, 2);
          lcd.print(mph, 2);
          state = 7;
        } else FlipAni();
      } else FlipAni();

      break;


    case 7:
      if (digitalRead(RESET_BTN) == LOW)
      {
        digitalWrite(LED_Start, LOW);
        digitalWrite(LED_Stage, LOW);
        digitalWrite(LED_RED_Light, LOW);
        StartFlag = false;
        FinishFlag = false;
        Staged = false;
        state = 0;
      }
      break;


  }
}// END LOOP BRACKETS

bool CheckEarlyStart()
{
  bool early = false;
  if (Stage_Sensor_Value > 501) {
    reactionTime = CountDownFin - (millis() - countdownStart);
    digitalWrite(LED_Y3, LOW);
    digitalWrite(LED_Prestage, LOW);
    digitalWrite(LED_Stage, LOW);
    digitalWrite(LED_RED_Light, HIGH);
    float ReactSecs = (float(reactionTime) / 1000) * -1;
    lcd.clear();
    lcd.print("!!Bad Start!!");
    lcd.setCursor(0, 1);
    lcd.print("RT:"); lcd.print(ReactSecs, 2);
    Serial.print("RT:"); Serial.println(ReactSecs, 2);
    state = 7;//bad start .. wait for reset..
    early = true;
  }
  return early;
}



void FlipAni() {
  if (millis() - AniMilli >= IntervalAni)
  {
    AniMilli = millis();
    switch (flip) {
      case 0: flip = 1; lcd.setCursor(0, 0); lcd.print("|"); lcd.setCursor(15, 0); lcd.print("|"); break;
      case 1: flip = 2; lcd.setCursor(0, 0); lcd.print("/"); lcd.setCursor(15, 0); lcd.print("/"); break;
      case 2: flip = 3; lcd.setCursor(0, 0); lcd.print("-"); lcd.setCursor(15, 0); lcd.print("-"); break;
      case 3: flip = 4; lcd.setCursor(0, 0); lcd.print("\x01"); lcd.setCursor(15, 0); lcd.print("\x01"); break;
      case 4: flip = 0; lcd.setCursor(0, 0); lcd.print("|"); lcd.setCursor(15, 0); lcd.print("|"); break;
    }
  }
}

Why are you opening a new thread for the same project?

Didn't know if that would overcrowd the question before as that one is still in process, this is my older 1 lane version I have added some updates to and seem to have failed somewhere.

Not trying to upset anyone never used these forums before now as most my projects didnt require assistance.

It's not about anyone being upset. It's just that the forum has some simple, time tested rules. One thread for one project, is one of those.

If you read the forum guidelines, it has a full explanation:

"We know you are anxious to get an answer to your problem, but re-posting the same question to multiple categories of the forum causes duplicate effort, and divides the focus on your problem. You'll get a better answer if everyone can discuss it in one place. Asking the same question multiple times is called cross-posting. Cross-posting is very annoying to people trying to help you. If you cross-post, the moderators will delete your extra posts, and you will get a warning. Save all the hassle, and just post the question once. It will be noticed.

If you aren't sure which category to post in (Programming Questions, General Electronics, etc.), make a guess. Don't cross-post "just in case".
"

Did you test it with a minimal test sketch that only reads and reports laser pulses?

That was my mistake as the last question was running two lanes on one board this question was about the single lane alone and component error. I didn't see a lot of relation as one had to do with coding this one was more of stretch to receive help diagnosing my issue of faulty component or code with the component,

I have not yet but will be doing this directly thank you for the assistance and forum guidance

Well, when there are problems, it's better to use KISS, divide and conquer methodology. This allows the problem to "speak for itself" instead of being buried somewhere in the testers mindset or expectations.

Thank you.

If you post this question on your other thread ( this link ), it will automatically bubble to the top of "latest" as well as send a notification to all the participants.

Your code with my setup

Thank you!!! Come to find out the reciever was bad on 2 out of 6 of them. Swapped them out and we are back on track with the laser detection but still have a lot to work out like lcd and minor glitches thanks again for all the help and input

you raise a very valid point, and I am aware that after raising your point you moved on to helping with the question at hand. However, I do not believe they were reposting the same question. I looks like they posted wrong code in the original post, and were merly posting the correct code that they are having issue with. Regardless, +1 for informing of guidlines and reason for using them, and +100 for moving on and helping with the issue.

Welcome to the forum. What did I "move on" from? It has overtones of overcoming some inappropriate experience or actions. "...to helping" well, frequently it is not possible to help without some definite response or provision from a questioner, and any time wasted on that, falls on the questioner. Not myself.

Same thing applies to ambiguities in a thread, about the borders and target of a question. If a question is not explicitly tied to a specific problem or unit of code or piece of hardware, it is not up to me to try and draw lines between the dots that are given.

It's not only a forum thing, it's Written Communications 101, but it is especially important here because we are having technical discussions that cross the globe, I can't see someones workbench or computer screen.

I am confident that as you spend more time on the forum, you will see what I mean.

I am thinking that the tone and intent of my post has been misunderstood. I was paying you a complement. I have seen many forums where people post statements that the posting party violated a rule or errored somewhere and then remain silent. So the "moving on" part was in reference to the transition from where you stated he errored to his issue. Technically, you are correct you educating him on forum rules is helping him. Therefore, there never was a change in state. Unless, you consider that some people may consider their naivety being pointed out as a negative. Furthermore, I agree that the question had many points of failure that could of been narrowed down, or even broken up into different parts by the posting party. I appreciate the confidence that my communications skills will improve. I hope my reply cleared up any confusion, if there was any, that I was paying you complements and praise.

Thanks, however in my mind it came across more like what is known as a "backhand compliment". One reason why I often just flag an error at first, instead of fixing or solving it, is that the action of self-repairing a mistake usually has far greater learning value than being fed an answer.

Same thing with forum protocols. I used to sometimes copy, format, and repost in code tags for someone who neglected to do that. Now, never. Because, the habit of following guidelines is a skill that in many cases needs to be developed, the lack usually leads to a string of other omissions that impact the quality of a thread.

FYI, this has become off-topic.

I appreciate the conversation regardless as you all are only stating facts of common discussions in a thread and guidelines

sounds digital..
some changes should be made..

the 3 analogReads at top of loop should be changed to digitalReads..
then the state machine should be changed instead of being > 500, now you just have true and false (0,1), probably could just change it to >0, but could be tweaked to be more readable..
sensor value arrays could also be bytes instead of ints..

a simple test sketch for the sensors might come in handy too..

i probably won't be dropping any more code on anything till next week, sorry..

tired.. ~q

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.