I got an error says that "state has not been declared please help me for my school project

// Define pins for ultrasonic sensors
const int trigPin1 = 9;
const int echoPin1 = 10;
const int trigPin2 = 11;
const int echoPin2 = 12;

// Define pins for traffic light 1 (Lane 1)
const int redLight1 = 2;
const int yellowLight1 = 3;
const int greenLight1 = 4;

// Define pins for traffic light 2 (Lane 2)
const int redLight2 = 5;
const int yellowLight2 = 6;
const int greenLight2 = 7;

// Define variables for distance
long duration1, distance1;
long duration2, distance2;

// Define threshold distance for object detection (in cm)
const int thresholdDistance = 30;

// Define states for traffic lights
enum TrafficLightState { RED, YELLOW, GREEN };

TrafficLightState state1 = RED;
TrafficLightState state2 = RED;

unsigned long previousMillis = 0;
const long interval = 5000; // 5 seconds interval for each green light

bool lane1Detected = false;
bool lane2Detected = false;

void setup() {
// Initialize serial communication
Serial.begin(9600);

// Set pin modes for ultrasonic sensors
pinMode(trigPin1, OUTPUT);
pinMode(echoPin1, INPUT);
pinMode(trigPin2, OUTPUT);
pinMode(echoPin2, INPUT);

// Set pin modes for traffic lights
pinMode(redLight1, OUTPUT);
pinMode(yellowLight1, OUTPUT);
pinMode(greenLight1, OUTPUT);
pinMode(redLight2, OUTPUT);
pinMode(yellowLight2, OUTPUT);
pinMode(greenLight2, OUTPUT);

// Initialize traffic lights to red
digitalWrite(redLight1, HIGH);
digitalWrite(redLight2, HIGH);
}

void loop() {
// Measure distance from sensor 1
distance1 = measureDistance(trigPin1, echoPin1);
Serial.print("Distance 1: ");
Serial.print(distance1);
Serial.print(" cm, ");

// Measure distance from sensor 2
distance2 = measureDistance(trigPin2, echoPin2);
Serial.print("Distance 2: ");
Serial.print(distance2);
Serial.println(" cm");

// Check for object detection
if (distance1 < thresholdDistance) {
lane1Detected = true;
}
if (distance2 < thresholdDistance) {
lane2Detected = true;
}

// Traffic light logic
if (lane1Detected && !lane2Detected) {
if (state1 != GREEN) {
setTrafficLight(1, GREEN);
setTrafficLight(2, RED);
previousMillis = millis();
state1 = GREEN;
state2 = RED;
}
} else if (lane2Detected && !lane1Detected) {
if (state2 != GREEN) {
setTrafficLight(2, GREEN);
setTrafficLight(1, RED);
previousMillis = millis();
state2 = GREEN;
state1 = RED;
}
}else if(lane1Detected && lane2Detected){
if(state1 != GREEN && state2 != RED){
setTrafficLight(1, GREEN);
setTrafficLight(2, RED);
previousMillis = millis();
state1 = GREEN;
state2 = RED;
}
}

// Automatic traffic light switching after a delay
if (state1 == GREEN && millis() - previousMillis >= interval) {
setTrafficLight(1, YELLOW);
delay(2000);
setTrafficLight(1, RED);
setTrafficLight(2, GREEN);
state1 = RED;
state2 = GREEN;
previousMillis = millis();
} else if (state2 == GREEN && millis() - previousMillis >= interval){
setTrafficLight(2, YELLOW);
delay(2000);
setTrafficLight(2, RED);
setTrafficLight(1, GREEN);
state2 = RED;
state1 = GREEN;
previousMillis = millis();
}

// Reset detection flags after switching
if (state1 == GREEN || state2 == GREEN) {
lane1Detected = false;
lane2Detected = false;
}

delay(100); // Small delay to avoid rapid readings
}

// Function to measure distance using ultrasonic sensor
long measureDistance(int trigPin, int echoPin) {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration1 = pulseIn(echoPin, HIGH);
return duration1 * 0.034 / 2;
}

// Function to set traffic light state
void setTrafficLight(int lightNumber, TrafficLightState state) {
int redPin, yellowPin, greenPin;

if (lightNumber == 1) {
redPin = redLight1;
yellowPin = yellowLight1;
greenPin = greenLight1;
} else {
redPin = redLight2;
yellowPin = yellowLight2;
greenPin = greenLight2;
}

digitalWrite(redPin, LOW);
digitalWrite(yellowPin, LOW);
digitalWrite(greenPin, LOW);

switch (state) {
case RED:
digitalWrite(redPin, HIGH);
break;
case YELLOW:
digitalWrite(yellowPin, HIGH);
break;
case GREEN:
digitalWrite(greenPin, HIGH);
break;
}
}

i don't get any errors when i compile the posted code

// Define pins for ultrasonic sensors
const int trigPin1 = 9;
const int echoPin1 = 10;
const int trigPin2 = 11;
const int echoPin2 = 12;

// Define pins for traffic light 1 (Lane 1)
const int redLight1 = 2;
const int yellowLight1 = 3;
const int greenLight1 = 4;

// Define pins for traffic light 2 (Lane 2)
const int redLight2 = 5;
const int yellowLight2 = 6;
const int greenLight2 = 7;

// Define variables for distance
long duration1, distance1;
long duration2, distance2;

// Define threshold distance for object detection (in cm)
const int thresholdDistance = 30;

// Define states for traffic lights
enum TrafficLightState { RED, YELLOW, GREEN };

TrafficLightState state1 = RED;
TrafficLightState state2 = RED;

unsigned long previousMillis = 0;
const long interval = 5000; // 5 seconds interval for each green light

bool lane1Detected = false;
bool lane2Detected = false;

void setup() {
    // Initialize serial communication
    Serial.begin(9600);

    // Set pin modes for ultrasonic sensors
    pinMode(trigPin1, OUTPUT);
    pinMode(echoPin1, INPUT);
    pinMode(trigPin2, OUTPUT);
    pinMode(echoPin2, INPUT);

    // Set pin modes for traffic lights
    pinMode(redLight1, OUTPUT);
    pinMode(yellowLight1, OUTPUT);
    pinMode(greenLight1, OUTPUT);
    pinMode(redLight2, OUTPUT);
    pinMode(yellowLight2, OUTPUT);
    pinMode(greenLight2, OUTPUT);

    // Initialize traffic lights to red
    digitalWrite(redLight1, HIGH);
    digitalWrite(redLight2, HIGH);
}


void loop() {
    // Measure distance from sensor 1
    distance1 = measureDistance(trigPin1, echoPin1);
    Serial.print("Distance 1: ");
    Serial.print(distance1);
    Serial.print(" cm, ");

    // Measure distance from sensor 2
    distance2 = measureDistance(trigPin2, echoPin2);
    Serial.print("Distance 2: ");
    Serial.print(distance2);
    Serial.println(" cm");

    // Check for object detection
    if (distance1 < thresholdDistance) {
        lane1Detected = true;
    }
    if (distance2 < thresholdDistance) {
        lane2Detected = true;
    }

    // Traffic light logic
    if (lane1Detected && !lane2Detected) {
        if (state1 != GREEN) {
            setTrafficLight(1, GREEN);
            setTrafficLight(2, RED);
            previousMillis = millis();
            state1 = GREEN;
            state2 = RED;
        }
    } else if (lane2Detected && !lane1Detected) {
        if (state2 != GREEN) {
            setTrafficLight(2, GREEN);
            setTrafficLight(1, RED);
            previousMillis = millis();
            state2 = GREEN;
            state1 = RED;
        }
    }else if(lane1Detected && lane2Detected){
        if(state1 != GREEN && state2 != RED){
            setTrafficLight(1, GREEN);
            setTrafficLight(2, RED);
            previousMillis = millis();
            state1 = GREEN;
            state2 = RED;
        }
    }

    // Automatic traffic light switching after a delay
    if (state1 == GREEN && millis() - previousMillis >= interval) {
        setTrafficLight(1, YELLOW);
        delay(2000);
        setTrafficLight(1, RED);
        setTrafficLight(2, GREEN);
        state1 = RED;
        state2 = GREEN;
        previousMillis = millis();
    } else if (state2 == GREEN && millis() - previousMillis >= interval){
        setTrafficLight(2, YELLOW);
        delay(2000);
        setTrafficLight(2, RED);
        setTrafficLight(1, GREEN);
        state2 = RED;
        state1 = GREEN;
        previousMillis = millis();
    }

    // Reset detection flags after switching
    if (state1 == GREEN || state2 == GREEN) {
        lane1Detected = false;
        lane2Detected = false;
    }

    delay(100); // Small delay to avoid rapid readings
}


// Function to measure distance using ultrasonic sensor
long measureDistance(int trigPin, int echoPin) {
    digitalWrite(trigPin, LOW);
    delayMicroseconds(2);
    digitalWrite(trigPin, HIGH);
    delayMicroseconds(10);
    digitalWrite(trigPin, LOW);
    duration1 = pulseIn(echoPin, HIGH);
    return duration1 * 0.034 / 2;
}


// Function to set traffic light state
void setTrafficLight (
    int lightNumber,
    TrafficLightState state)
{
    int redPin, yellowPin, greenPin;

    if (lightNumber == 1) {
        redPin = redLight1;
        yellowPin = yellowLight1;
        greenPin = greenLight1;
    } else {
        redPin = redLight2;
        yellowPin = yellowLight2;
        greenPin = greenLight2;
    }

    digitalWrite(redPin, LOW);
    digitalWrite(yellowPin, LOW);
    digitalWrite(greenPin, LOW);

    switch (state) {
    case RED:
        digitalWrite(redPin, HIGH);
        break;
    case YELLOW:
        digitalWrite(yellowPin, HIGH);
        break;
    case GREEN:
        digitalWrite(greenPin, HIGH);
        break;
    }
}

@kets13

Please edit your post, select all code and click the <CODE/> button. Next save your post.

This will apply code tags which makes the code easier to read and copy and the forum software will display it correctly.

1 Like

What course is this for and what is the deadline? If you can get a copy of the Arduino Cookbook and skim it cover to cover, you will find some stuff that will help.

1 Like

I'm a bit blind, but I see "state1" and "state2", but no "state"

Pleas post the full error message. Also in code tags. It will tell on which line of your code the error was found... ...and more...

And I am looking through a tiny window.

There is a state, a parameter for this function:

void setTrafficLight(int lightNumber, TrafficLightState state) {

And as @gcjr finds, it compiles fine.

a7

1 Like

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