Good Day, i am writing a code for a density based traffic light project using for loops for the density part of the system, but my for loops wont execute. the code is attached below.
Good Day, the problem i am facing is after compiling and creating the hex file in keil, i simulate the circuit with Proteus but it seems like the micro controller doesnt take the input from the sensors that activates the for loop part.
So you must break down the functionality and determine the problem(s).
Why not try something even simpler first. Like just flashing a single LED. When that is working, build up your code. Many projects are built this way.
and does that not allow you to single-step through the code and see exactly what is happening?
That, surely, is one of the key reasons to use a simulator?!
i have already identified the problem with the code, all the outputs (LEDs) are working fine. Now where i am having problems is the input let me breakdown the code for the input:
sbit in1_na=P2^0; //sensor1 sbit in2_nb=P2^1; //sensor2 sbit in1_wa=P2^2; //sensor3 sbit in2_wb=P2^3; //sensor4 sbit in1_sa=P2^4; //sensor5 sbit in2_sb=P2^5; //sensor6 sbit in1_ea=P2^6; //sensor7 sbit in2_eb=P2^7; //sensor8
sensor declaration at P2.0-7 above
unsigned int i,j,k=0,v1=0,w1=0,x1=0,y1=0,z1=0,t1=0;
void main() { while(1) { v1=0; //clear v1 w1=0; //clear w1 x1=0; //clear xl y1=0; //clear y1 if(in1_na==1) //if sensor1 is blocked { v1=1; } if((in1_na==1)&&(in2_nb==1)) //if sensorl & sensor2 are blocked { v1=2; } if(in1_wa==1) //if sensor3 is blocked { w1=1; } if((in1_wa==1)&&(in2_wb==1)) //if sensor3 and sensor4 are blocked { w1=2; } if(in1_sa==1) //if sensor5 is blocked { x1=1; } if((in1_sa==1)&&(in2_sb==1)) //if sensor5 & sensor6 are blocked { x1=2; } if(in1_wa==1) //if sensor7 is blocked { y1=1; } if((in1_wa==1)&&(in2_wb==1)) //if sensor7 and sensor8 are blocked { y1=2; } }
sensor input conditions for "for loops", i just want to know if this is correct. Because when i simulate the code in proteus, and set all inputs to ON, the for loops never initiates. Only the output part of the code and the delay timers work.
Making progress. Well done.
// I've cut/pasted/auto-formatted the code for you to avoid further spurious waffle void main() { while(1) { v1=0; //clear v1 w1=0; //clear w1 x1=0; //clear xl y1=0; //clear y1 if(in1_na==1) //if sensor1 is blocked { v1=1; } if((in1_na==1)&&(in2_nb==1)) //if sensorl & sensor2 are blocked { v1=2; } if(in1_wa==1) //if sensor3 is blocked { w1=1; } if((in1_wa==1)&&(in2_wb==1)) //if sensor3 and sensor4 are blocked { w1=2; } if(in1_sa==1) //if sensor5 is blocked { x1=1; } if((in1_sa==1)&&(in2_sb==1)) //if sensor5 & sensor6 are blocked { x1=2; } if(in1_wa==1) //if sensor7 is blocked { y1=1; } if((in1_wa==1)&&(in2_wb==1)) //if sensor7 and sensor8 are blocked { y1=2; } // You're still within the while loop // LED control here ? - First glimpse suggests that there should be no problem with above } // Assuming it falls through to the remainder of your main function here
So the obvious question is where are the loops to control the LEDs?
Let me explain the idea of the code: i am emulating a density based traffic system for a 4 way traffic junction. the code for the normal operation of a traffic junction works fine.
where i am having difficulty is the part where i take inputs from one or 2 of the sensor ports and make them 'on' using a for loop for when this condition is meet signifying the lane where those sensor are has a higher density and should be given priority.
so am i approaching it wrong, or is there a problem with a part of the code. as this is the only problematic part of the code.
We've got past your initial problem. Now it's time for you to put your thinking cap on and consider the most suitable sequence to achieve your final result.