if ((valA1 > 500) && (valA2 >500) && (valA3<300) && (valA4>300)){
signalState = ST_GY;
How can i changes this to digital format?
bool D1 = analogRead(A1)>500;
(and so on)
...
if(D1&&D2&&D3&&D4)
Is one way. Hard to tell if it's the best way, as is usual with these "snippet posts" we love to hate. Context is always important.
Please describe what you actually want to do.
I am railroading, i have 3 tracks going in and out of a tunnel. I have Analog Sensors in the track and also digital sensors in fixtures. I am going make signals Red & Green to show a track in the tunnel is occupied.
Okay, so what I suggested should work, though it's a tad inelegant. Did you try it? Or is there something you don't understand in what I wrote? I can't see the confusion on your face from here.
This is the original code and it works with Analog sensors. I would like to use the same with the digital sensors.
int Sensor1 = A0; //Sensor 1 is setup on pin A0
int Sensor2 = A1; //Sensor 2 is setup on pin A1
int Green1 = 13; // Green Signal 1 is digital pin 2
int Yellow1 = 3;// Yellow Signal 1 is digital pin 3
int Red1 = 4;// Red Signal 1 is digital pin 4
int Green2 = 5;// Green Signal 2 is digital pin 5
int Yellow2 = 6;// Yellow Signal 1 is digital pin 6
int Red2 = 7;//Red Signal 2 is digital pin 7
int blockASend=8;// The transmit pin for the previous block in the sequence
int blockBSend=9;// The transmit pin for the next block in the sequence
int blockARec=10;// The recieve pin for the previous block in the sequence
int blockBRec=11;// The recieve pin for the next block in the sequence
int clearcount;
void setup() {
Serial.begin(9600);
//Establish all of our pins at inputs or outputs
pinMode(Sensor1, INPUT);
pinMode(Sensor2, INPUT);
pinMode(Green1, OUTPUT);
pinMode(Yellow1, OUTPUT);
pinMode(Red1, OUTPUT);
pinMode(Green2, OUTPUT);
pinMode(Yellow2, OUTPUT);
pinMode(Red2, OUTPUT);
pinMode(blockASend, OUTPUT);
pinMode(blockBSend, OUTPUT);
pinMode(blockARec, INPUT);
pinMode(blockBRec, INPUT);
}
enum SIGNALSTATES
{
ST_GG,
ST_GY,
ST_YG,
ST_YY,
ST_RR1,
ST_RR2,
ST_RR3,
ST_YY1,
}; //Sets up different signal states for the entire program
SIGNALSTATES signalState = ST_GG; //Sets default state to Green and Green
void loop(){
int valA1 = analogRead(Sensor1);
int valA2 = analogRead(Sensor2);
int valA3 = digitalRead(blockARec);
int valA4 = digitalRead(blockBRec);
// Sets up the values of the different signals we will be reading
Serial.println(valA1);
Serial.println(valA2);
Serial.println(valA3);
Serial.println(valA4);
// Sets up the different values to be read on the serial monitor in the Arduino IDE
delay(200);
switch(signalState)
{
case ST_GG:
signalgg(valA1, valA2, valA3, valA4);
break;
case ST_GY:
signalgy(valA1, valA2, valA3, valA4);
break;
case ST_YG:
signalyg(valA1, valA2, valA3, valA4);
break;
case ST_YY:
signalyy(valA1, valA2, valA3, valA4);
break;
case ST_RR1:
signalrr1(valA1, valA2, valA3, valA4);
break;
case ST_RR2:
signalrr2(valA1, valA2, valA3, valA4);
break;
case ST_RR3:
signalrr3(valA1, valA2, valA3, valA4);
break;
case ST_YY1:
signalyy1(valA1, valA2, valA3, valA4);
break;
//this sets up our different loops within the main loop for our different signal states
}
}
void signalgg(int valA1, int valA2, int valA3, int valA4){
digitalWrite(Green1, LOW); //Sets Green1 to ON
digitalWrite(Yellow1, HIGH);
digitalWrite(Red1, HIGH);
digitalWrite(Green2, LOW); //Sets Green2 to ON
digitalWrite(Yellow2, HIGH);
digitalWrite(Red2, HIGH);
digitalWrite(blockASend, LOW); //this will not transmit a signal to Block A
digitalWrite(blockBSend, LOW); //this will not transmit a signal to Block B
delay(200);
clearcount=0;
if ((valA1 > 500) && (valA2 >500) && (valA3==0) && (valA4==1)){
signalState = ST_GY;//block not occupied but Block B is
}
if ((valA1 > 500) && (valA2 >500) && (valA3==1) && (valA4==0)){
signalState = ST_YG;//block not occupied but Block A is
}
if ((valA1 > 500) && (valA2 >500) && (valA3==1) && (valA4==1)){
signalState = ST_YY;//block not occupied but Block B and Block A are
}
if ((valA1 < 500) && (valA2 >500)){
signalState = ST_RR1;// block is occupied entered from Sensor1
}
if ((valA1 > 500) && (valA2 <500)){
signalState = ST_RR2;// block is occupied entered from Sensor2
}
}
void signalgy(int valA1, int valA2, int valA3, int valA4){
digitalWrite(Green1, LOW); //Sets Green1 to ON
digitalWrite(Yellow1, HIGH);
digitalWrite(Red1, HIGH);
digitalWrite(Green2, HIGH);
digitalWrite(Yellow2, LOW);//Sets Yellow2 to ON
digitalWrite(Red2, HIGH);
digitalWrite(blockASend, LOW); //this will not transmit a signal to Block A
digitalWrite(blockBSend, LOW); //this will not transmit a signal to Block B
delay(200);
if ((valA1 > 500) && (valA2 >500) && (valA3==0) && (valA4==0)){
signalState = ST_GG;//block not occupied No adjacent blocks occupied
}
if ((valA1 > 500) && (valA2 >500) && (valA3==1) && (valA4==0)){
signalState = ST_YG;//block not occupied but Block A is
}
if ((valA1 > 500) && (valA2 >500) && (valA3==1) && (valA4==1)){
signalState = ST_YY;//block not occupied but Block B and Block A are
}
if ((valA1 < 500) && (valA2 >500)){
signalState = ST_RR1;// block is occupied entered from Sensor1
}
if ((valA1 > 500) && (valA2 <500)){
signalState = ST_RR2;// block is occupied entered from Sensor2
}
}
void signalyg(int valA1, int valA2, int valA3, int valA4){
digitalWrite(Green1, HIGH);
digitalWrite(Yellow1, LOW);//Sets Yellow1 to ON
digitalWrite(Red1, HIGH);
digitalWrite(Green2, LOW);//Sets Green2 to ON
digitalWrite(Yellow2, HIGH);
digitalWrite(Red2, HIGH);
digitalWrite(blockASend, LOW); //this will not transmit a signal to Block A
digitalWrite(blockBSend, LOW); //this will not transmit a signal to Block B
delay(200);
if ((valA1 > 500) && (valA2 >500) && (valA3==0) && (valA4==0)){
signalState = ST_GG;//block not occupied No adjacent blocks occupied
}
if ((valA1 > 500) && (valA2 >500) && (valA3==0) && (valA4==1)){
signalState = ST_GY;//block not occupied but Block B is
}
if ((valA1 > 500) && (valA2 >500) && (valA3==1) && (valA4==1)){
signalState = ST_YY;//block not occupied but Block B and Block A are
}
if ((valA1 < 500) && (valA2 >500)){
signalState = ST_RR1;// block is occupied entered from Sensor1
}
if ((valA1 > 500) && (valA2 <500)){
signalState = ST_RR2;// block is occupied entered from Sensor2
}
}
void signalyy(int valA1, int valA2, int valA3, int valA4){
digitalWrite(Green1, HIGH);
digitalWrite(Yellow1, LOW);//Sets Yellow1 to ON
digitalWrite(Red1, HIGH);
digitalWrite(Green2, HIGH);
digitalWrite(Yellow2, LOW);//Sets Yellow2 to ON
digitalWrite(Red2, HIGH);
digitalWrite(blockASend, LOW); //this will not transmit a signal to Block A
digitalWrite(blockBSend, LOW); //this will not transmit a signal to Block B
delay(200);
if ((valA1 > 500) && (valA2 >500) && (valA3==0) && (valA4==0)){
signalState = ST_GG;//block not occupied No adjacent blocks occupied
}
if ((valA1 > 500) && (valA2 >500) && (valA3==0) && (valA4==0)){
signalState = ST_GY;//block not occupied but Block B is
}
if ((valA1 > 500) && (valA2 >500) && (valA3==1) && (valA4==0)){
signalState = ST_YG;//block not occupied but Block B and Block A are
}
if ((valA1 < 500) && (valA2 >500)){
signalState = ST_RR1;// block is occupied entered from Sensor1
}
if ((valA1 > 500) && (valA2 <500)){
signalState = ST_RR2;// block is occupied entered from Sensor2
}
}
void signalrr1(int valA1, int valA2, int valA3, int valA4){
digitalWrite(Green1, HIGH);
digitalWrite(Yellow1, HIGH);
digitalWrite(Red1, LOW);//Sets Red1 to ON
digitalWrite(Green2, HIGH);
digitalWrite(Yellow2, HIGH);
digitalWrite(Red2, LOW);//Sets Red2 to ON
digitalWrite(blockASend, HIGH); //this will transmit a signal to Block A
digitalWrite(blockBSend, HIGH); //this will transmit a signal to Block B
delay(200);
if ((valA1>500) && (valA2<500)){
signalState = ST_RR3; //switched to transition Red signal state
}
}
void signalrr2(int valA1, int valA2, int valA3, int valA4){
digitalWrite(Green1, HIGH);
digitalWrite(Yellow1, HIGH);
digitalWrite(Red1, LOW);//Sets Red1 to ON
digitalWrite(Green2, HIGH);
digitalWrite(Yellow2, HIGH);
digitalWrite(Red2, LOW);//Sets Red2 to ON
digitalWrite(blockASend, HIGH); //this will transmit a signal to Block A
digitalWrite(blockBSend, 1023); //this will transmit a signal to Block B
delay(200);
if ((valA1<500) && (valA2>HIGH)){
signalState = ST_RR3; //switched to transition Red signal state
}
}
void signalrr3(int valA1, int valA2, int valA3, int valA4){
digitalWrite(Green1, HIGH);
digitalWrite(Yellow1, HIGH);
digitalWrite(Red1, LOW);//Sets Red1 to ON
digitalWrite(Green2, HIGH);
digitalWrite(Yellow2, HIGH);
digitalWrite(Red2, LOW);//Sets Red2 to ON
digitalWrite(blockASend, HIGH); //this will transmit a signal to Block A
digitalWrite(blockBSend, HIGH); //this will transmit a signal to Block B
delay(200);
if ((valA1>500) && (valA2>500)){
signalState = ST_YY1;
}
}
void signalyy1(int valA1, int valA2, int valA3, int valA4){
digitalWrite(Green1, HIGH);
digitalWrite(Yellow1, LOW);
digitalWrite(Red1, HIGH);
digitalWrite(Green2, HIGH);
digitalWrite(Yellow2, LOW);
digitalWrite(Red2, HIGH);
digitalWrite(blockASend, HIGH); //this will transmit a signal to Block A
digitalWrite(blockBSend, HIGH); //this will transmit a signal to Block B
delay(1000);
if ((valA1>500) && (valA2>500) && (clearcount<5)){
clearcount++;
}
else if((valA1<500) || (valA2<500) && clearcount<5){ clearcount=0;
}
else if((valA1>500) && (valA2>500) && (clearcount>4)){
signalState = ST_GG;
}
}
You should be used to my confusion, you have helped me many times before.
Yup. So again, do you understand what I'm suggesting? Convert each of your analog readings to a digital variable, then do the comparisons using those variables.
The conversion to a digital is best done once in a section that checks each.
But for what you've described so far, there's little to gain, unless you have further logic than you've shown.
Yes,
I am working on that now.
Thanks
So I tried to do it but no luck, I added the bool steps and it compiled but when i went to use them it was a no go.
Any help would be appreciated.
int Sensor1 = A0; //Sensor 1 is setup on pin A0
int Sensor2 = A1; //Sensor 2 is setup on pin A1
int Green1 = 13; // Green Signal 1 is digital pin 2
int Yellow1 = 3;// Yellow Signal 1 is digital pin 3
int Red1 = 4;// Red Signal 1 is digital pin 4
int Green2 = 5;// Green Signal 2 is digital pin 5
int Yellow2 = 6;// Yellow Signal 1 is digital pin 6
int Red2 = 7;//Red Signal 2 is digital pin 7
int blockASend=8;// The transmit pin for the previous block in the sequence
int blockBSend=9;// The transmit pin for the next block in the sequence
int blockARec=10;// The recieve pin for the previous block in the sequence
int blockBRec=11;// The recieve pin for the next block in the sequence
int clearcount;
void setup() {
Serial.begin(9600);
//Establish all of our pins at inputs or outputs
pinMode(Sensor1, INPUT);
pinMode(Sensor2, INPUT);
pinMode(Green1, OUTPUT);
pinMode(Yellow1, OUTPUT);
pinMode(Red1, OUTPUT);
pinMode(Green2, OUTPUT);
pinMode(Yellow2, OUTPUT);
pinMode(Red2, OUTPUT);
pinMode(blockASend, OUTPUT);
pinMode(blockBSend, OUTPUT);
pinMode(blockARec, INPUT);
pinMode(blockBRec, INPUT);
}
enum SIGNALSTATES
{
ST_GG,
ST_GY,
ST_YG,
ST_YY,
ST_RR1,
ST_RR2,
ST_RR3,
ST_YY1,
}; //Sets up different signal states for the entire program
SIGNALSTATES signalState = ST_GG; //Sets default state to Green and Green
void loop(){
int valA1 = analogRead(Sensor1);
int valA2 = analogRead(Sensor2);
int valA3 = digitalRead(blockARec);
int valA4 = digitalRead(blockBRec);
// Sets up the values of the different signals we will be reading
Serial.println(valA1);
Serial.println(valA2);
Serial.println(valA3);
Serial.println(valA4);
// Sets up the different values to be read on the serial monitor in the Arduino IDE
delay(200);
bool D1 =analogRead(valA1)>500;
bool D2 =analogRead(valA1)<500;
bool D3 =analogRead(valA2)>500;
bool D4 =analogRead(valA2)<500;
bool D5 =analogRead(valA3)>0;
bool D6 =analogRead(valA3)<1;
bool D7 =analogRead(valA4)>0;
bool D8 =analogRead(valA4)<1;
switch(signalState)
{
case ST_GG:
signalgg(valA1, valA2, valA3, valA4);
break;
case ST_GY:
signalgy(valA1, valA2, valA3, valA4);
break;
case ST_YG:
signalyg(valA1, valA2, valA3, valA4);
break;
case ST_YY:
signalyy(valA1, valA2, valA3, valA4);
break;
case ST_RR1:
signalrr1(valA1, valA2, valA3, valA4);
break;
case ST_RR2:
signalrr2(valA1, valA2, valA3, valA4);
break;
case ST_RR3:
signalrr3(valA1, valA2, valA3, valA4);
break;
case ST_YY1:
signalyy1(valA1, valA2, valA3, valA4);
break;
//this sets up our different loops within the main loop for our different signal states
}
}
void signalgg(int valA1, int valA2, int valA3, int valA4){
digitalWrite(Green1, LOW); //Sets Green1 to ON
digitalWrite(Yellow1, HIGH);
digitalWrite(Red1, HIGH);
digitalWrite(Green2, LOW); //Sets Green2 to ON
digitalWrite(Yellow2, HIGH);
digitalWrite(Red2, HIGH);
digitalWrite(blockASend, LOW); //this will not transmit a signal to Block A
digitalWrite(blockBSend, LOW); //this will not transmit a signal to Block B
delay(200);
clearcount=0;
if (D1&&D3&&D6&&D7){
signalState = ST_GY;//block not occupied but Block B is
}
if (D1&&D3&&D5&&D8){
signalState = ST_YG;//block not occupied but Block A is
}
if ((valA1 > 500) && (valA2 >500) && (valA3==1) && (valA4==1)){
signalState = ST_YY;//block not occupied but Block B and Block A are
}
if ((valA1 < 500) && (valA2 >500)){
signalState = ST_RR1;// block is occupied entered from Sensor1
}
if ((valA1 > 500) && (valA2 <500)){
signalState = ST_RR2;// block is occupied entered from Sensor2
}
}
void signalgy(int valA1, int valA2, int valA3, int valA4){
digitalWrite(Green1, LOW); //Sets Green1 to ON
digitalWrite(Yellow1, HIGH);
digitalWrite(Red1, HIGH);
digitalWrite(Green2, HIGH);
digitalWrite(Yellow2, LOW);//Sets Yellow2 to ON
digitalWrite(Red2, HIGH);
digitalWrite(blockASend, LOW); //this will not transmit a signal to Block A
digitalWrite(blockBSend, LOW); //this will not transmit a signal to Block B
delay(200);
if ((valA1 > 500) && (valA2 >500) && (valA3==0) && (valA4==0)){
signalState = ST_GG;//block not occupied No adjacent blocks occupied
}
if ((valA1 > 500) && (valA2 >500) && (valA3==1) && (valA4==0)){
signalState = ST_YG;//block not occupied but Block A is
}
if ((valA1 > 500) && (valA2 >500) && (valA3==1) && (valA4==1)){
signalState = ST_YY;//block not occupied but Block B and Block A are
}
if ((valA1 < 500) && (valA2 >500)){
signalState = ST_RR1;// block is occupied entered from Sensor1
}
if ((valA1 > 500) && (valA2 <500)){
signalState = ST_RR2;// block is occupied entered from Sensor2
}
}
void signalyg(int valA1, int valA2, int valA3, int valA4){
digitalWrite(Green1, HIGH);
digitalWrite(Yellow1, LOW);//Sets Yellow1 to ON
digitalWrite(Red1, HIGH);
digitalWrite(Green2, LOW);//Sets Green2 to ON
digitalWrite(Yellow2, HIGH);
digitalWrite(Red2, HIGH);
digitalWrite(blockASend, LOW); //this will not transmit a signal to Block A
digitalWrite(blockBSend, LOW); //this will not transmit a signal to Block B
delay(200);
if ((valA1 > 500) && (valA2 >500) && (valA3==0) && (valA4==0)){
signalState = ST_GG;//block not occupied No adjacent blocks occupied
}
if ((valA1 > 500) && (valA2 >500) && (valA3==0) && (valA4==1)){
signalState = ST_GY;//block not occupied but Block B is
}
if ((valA1 > 500) && (valA2 >500) && (valA3==1) && (valA4==1)){
signalState = ST_YY;//block not occupied but Block B and Block A are
}
if ((valA1 < 500) && (valA2 >500)){
signalState = ST_RR1;// block is occupied entered from Sensor1
}
if ((valA1 > 500) && (valA2 <500)){
signalState = ST_RR2;// block is occupied entered from Sensor2
}
}
void signalyy(int valA1, int valA2, int valA3, int valA4){
digitalWrite(Green1, HIGH);
digitalWrite(Yellow1, LOW);//Sets Yellow1 to ON
digitalWrite(Red1, HIGH);
digitalWrite(Green2, HIGH);
digitalWrite(Yellow2, LOW);//Sets Yellow2 to ON
digitalWrite(Red2, HIGH);
digitalWrite(blockASend, LOW); //this will not transmit a signal to Block A
digitalWrite(blockBSend, LOW); //this will not transmit a signal to Block B
delay(200);
if ((valA1 > 500) && (valA2 >500) && (valA3==0) && (valA4==0)){
signalState = ST_GG;//block not occupied No adjacent blocks occupied
}
if ((valA1 > 500) && (valA2 >500) && (valA3==0) && (valA4==0)){
signalState = ST_GY;//block not occupied but Block B is
}
if ((valA1 > 500) && (valA2 >500) && (valA3==1) && (valA4==0)){
signalState = ST_YG;//block not occupied but Block B and Block A are
}
if ((valA1 < 500) && (valA2 >500)){
signalState = ST_RR1;// block is occupied entered from Sensor1
}
if ((valA1 > 500) && (valA2 <500)){
signalState = ST_RR2;// block is occupied entered from Sensor2
}
}
void signalrr1(int valA1, int valA2, int valA3, int valA4){
digitalWrite(Green1, HIGH);
digitalWrite(Yellow1, HIGH);
digitalWrite(Red1, LOW);//Sets Red1 to ON
digitalWrite(Green2, HIGH);
digitalWrite(Yellow2, HIGH);
digitalWrite(Red2, LOW);//Sets Red2 to ON
digitalWrite(blockASend, HIGH); //this will transmit a signal to Block A
digitalWrite(blockBSend, HIGH); //this will transmit a signal to Block B
delay(200);
if ((valA1>500) && (valA2<500)){
signalState = ST_RR3; //switched to transition Red signal state
}
}
void signalrr2(int valA1, int valA2, int valA3, int valA4){
digitalWrite(Green1, HIGH);
digitalWrite(Yellow1, HIGH);
digitalWrite(Red1, LOW);//Sets Red1 to ON
digitalWrite(Green2, HIGH);
digitalWrite(Yellow2, HIGH);
digitalWrite(Red2, LOW);//Sets Red2 to ON
digitalWrite(blockASend, HIGH); //this will transmit a signal to Block A
digitalWrite(blockBSend, 1023); //this will transmit a signal to Block B
delay(200);
if ((valA1<500) && (valA2>HIGH)){
signalState = ST_RR3; //switched to transition Red signal state
}
}
void signalrr3(int valA1, int valA2, int valA3, int valA4){
digitalWrite(Green1, HIGH);
digitalWrite(Yellow1, HIGH);
digitalWrite(Red1, LOW);//Sets Red1 to ON
digitalWrite(Green2, HIGH);
digitalWrite(Yellow2, HIGH);
digitalWrite(Red2, LOW);//Sets Red2 to ON
digitalWrite(blockASend, HIGH); //this will transmit a signal to Block A
digitalWrite(blockBSend, HIGH); //this will transmit a signal to Block B
delay(200);
if ((valA1>500) && (valA2>500)){
signalState = ST_YY1;
}
}
void signalyy1(int valA1, int valA2, int valA3, int valA4){
digitalWrite(Green1, HIGH);
digitalWrite(Yellow1, LOW);
digitalWrite(Red1, HIGH);
digitalWrite(Green2, HIGH);
digitalWrite(Yellow2, LOW);
digitalWrite(Red2, HIGH);
digitalWrite(blockASend, HIGH); //this will transmit a signal to Block A
digitalWrite(blockBSend, HIGH); //this will transmit a signal to Block B
delay(1000);
if ((valA1>500) && (valA2>500) && (clearcount<5)){
clearcount++;
}
else if((valA1<500) || (valA2<500) && clearcount<5){ clearcount=0;
}
else if((valA1>500) && (valA2>500) && (clearcount>4)){
signalState = ST_GG;
}
}type or paste code here
Be more descriptive with your expectations versus your observations.
[edit] You have nine delays totaling over two seconds. Might the trains pass the sensor before being detected?
So this is what I have so far, just working on center rail to start. The lights trip from the Left side no problem. But they will not reset when i trip the second sensor when leaving. Also it just works in one direction. Trying to keep it simple with just red and green lights.
Any help would be appreciated..
const int sensorPin1 = A14; // Define pin connected to first sensor
const int sensorPin2 = A2; // Define pin connected to second sensor
const int green_rightPin2 = 14;//Center pin Right green
const int red_rightPin5 = 10;//Center pin Right red
const int green_leftPin2 = 34;//Center pin Left green
const int red_leftPin5 = 35;//Center pin Left red
int sensorState1 = HIGH; // Variable to store sensor state for first sensor
int sensorState2 = HIGH; // Variable to store sensor state for second sensor
int prevSensorState1 = LOW; // Variable to store previous state of first sensor
int prevSensorState2 = LOW; // Variable to store previous state of second sensor
void setup() {
pinMode(sensorPin1, INPUT);
pinMode(sensorPin2, INPUT);
pinMode(red_rightPin5, OUTPUT);
pinMode(green_rightPin2, OUTPUT);
pinMode(red_leftPin5, OUTPUT);
pinMode(green_leftPin2, OUTPUT);
digitalWrite(red_rightPin5, LOW); // Turn off red light initially
digitalWrite(green_rightPin2, HIGH); // Turn on green light initially
digitalWrite(red_leftPin5, LOW); // Turn off red light initially
digitalWrite(green_leftPin2, HIGH); // Turn on green light initially
delay(2000);
}
void loop() {
sensorState1 = analogRead(sensorPin1); // Read sensor 1 state
sensorState2 = analogRead(sensorPin2); // Read sensor 2 state
// Check if a train is approaching from the first sensor
if (sensorState1 == LOW && prevSensorState1 == HIGH) {
digitalWrite(red_rightPin5, HIGH); // Turn on red light
digitalWrite(green_rightPin2, LOW); // Turn off green
digitalWrite(red_leftPin5, HIGH); // Turn oN red light
digitalWrite(green_leftPin2, LOW); // Turn oFF green light
delay(2000);
}
// Check if a train is approaching from the second sensor
if (sensorState2 == LOW && prevSensorState2 == HIGH) {
digitalWrite(red_rightPin5, HIGH); // Turn on red light
digitalWrite(green_rightPin2, LOW); // Turn off green
digitalWrite(red_leftPin5, HIGH); // Turn oN red light
digitalWrite(green_leftPin2, LOW); // Turn oFF green light
delay(2000);
}
// Check if the train has left both sensors
if (sensorState1 == HIGH && sensorState2 == HIGH) {
digitalWrite(red_rightPin5, LOW); // Turn off red light
digitalWrite(green_rightPin2, HIGH); // Turn on green light
digitalWrite(red_leftPin5, LOW); // Turn off red light
digitalWrite(green_leftPin2, HIGH); // Turn on green light
delay(2000);
}
// Update previous sensor states
prevSensorState1 = sensorState1;
prevSensorState2 = sensorState2;
}
You are using a Mega2560?
I doubt that. Describe "works" and describe how each state of the project should proceed. All I am seeing is a set of LEDs always on.
You are using analog sensors as digital sensors... and the code does not show which is which. Make your code describe every device without knowing "1" is one thing and "2" is another.
I am using a Mega so i can add more block to the same controller for the rest of my layout.
Can we modify the Level crossing program to do this? Is there a way to look for codes that we have posted before?
not sure where this came from, that's an old post.
Sorry, I thought you wanted to find an old post.
The hole point of doing that was so you didn't need to do things like this elsewhere:
if ((valA1 < 500) && (valA2 >500)){
But you've made all the bool variables local to the loop() function.
Learn or review the concept of scope as it applies to C/C++ variables.
Decide whether you want to use functions with parameters, and pass arguments to them when you call them, or whether it is easier for you to just use global variables available to everyone everywhere.
a7
