i am in troble with when using two ulrasonic sensores, but when working with one sensore, code is working fine. please help me to attach two ultarsnic sensores (HC-SR04) to my code and make this worke fine,
here i am tring to do thing is i want to keep a object with in the range and if the object move LED lights need to be on.
i am using the PIC 16F877A
Working code for one ultrasonic sensor
void main()
{
int a;
int b;
TRISB = 0b00010000; //RB4 as Input PIN (ECHO)
TRISC = 0; //C as Output PINs (LED)
T1CON = 0x10; //Initialize Timer Module
TRISD = 1; // 1 input 0 output ,related to LED (display)
while(1)
{
for(b=1; b<3; b++){
if (b=2){
TMR1H = 0; //Sets the Initial Value of Timer
TMR1L = 0; //Sets the Initial Value of Timer
PORTB.F1 = 1; //TRIGGER HIGH
Delay_us(10); //10uS Delay
PORTB.F1 = 0; //TRIGGER LOW
while(!PORTD.F0); //Waiting for Echo
T1CON.F0 = 1; //Timer Starts
while(PORTD.F0); //Waiting for Echo goes LOW
T1CON.F0 = 0; //Timer Stops
a = (TMR1L | (TMR1H<<8)); //Reads Timer Value
a = a/58.82; //Converts Time to Distance
a = a + 1; //Distance Calibration\
//formular s=ut
if(a != 4 ){
PORTC = 0b01111111; // turn on LEDs in the PIC
Delay_ms(5);
PORTC = 0; // turn on LEDs in the PIC
} else {
//out of range
PORTC = 0b00000000;
}
}
}
}
}
not working code for two ultarsonic sensers
void main()
{
int a;
int b;
TRISB = 0b00010000; //RB4 as Input PIN (ECHO)
TRISC = 0; //C as Output PINs (LED)
T1CON = 0x10; //Initialize Timer Module
TRISD = 1; // 1 input 0 output ,related to LED (display)
while(1)
{
for(b=1; b<3; b++){
if(b=1){
TMR1H = 0; //Sets the Initial Value of Timer
TMR1L = 0; //Sets the Initial Value of Timer
PORTB.F0 = 1; //TRIGGER HIGH
Delay_us(10); //10uS Delay
PORTB.F0 = 0; //TRIGGER LOW
while(!PORTD.F1); //Waiting for Echo
T1CON.F0 = 1; //Timer Starts
while(PORTD.F1); //Waiting for Echo goes LOW
T1CON.F0 = 0; //Timer Stops
a = (TMR1L | (TMR1H<<8)); //Reads Timer Value
a = a/58.82; //Converts Time to Distance
a = a + 1; //Distance Calibration\
//formular s=ut
if(a != 4 ){
// PORTB.F3 = 1;
// PORTD = 0xFC; // display number two in LED displa
// Delay_ms(5);
// PORTB.F3 = 0;
PORTC = 0b00000011; // turn on LEDs in the PIC
Delay_ms(5);
PORTC = 0; // turn on LEDs in the PIC
} else {
//out of range
PORTC = 0b00000000;
}
}
else if (b=2){
TMR1H = 0; //Sets the Initial Value of Timer
TMR1L = 0; //Sets the Initial Value of Timer
PORTB.F1 = 1; //TRIGGER HIGH
Delay_us(10); //10uS Delay
PORTB.F1 = 0; //TRIGGER LOW
while(!PORTD.F0); //Waiting for Echo
T1CON.F0 = 1; //Timer Starts
while(PORTD.F0); //Waiting for Echo goes LOW
T1CON.F0 = 0; //Timer Stops
a = (TMR1L | (TMR1H<<8)); //Reads Timer Value
a = a/58.82; //Converts Time to Distance
a = a + 1; //Distance Calibration\
//formular s=ut
if(a != 4 ){
PORTC = 0b01111111; // turn on LEDs in the PIC
Delay_ms(5);
PORTC = 0; // turn on LEDs in the PIC
} else {
//out of range
PORTC = 0b00000000;
}
}
}
}
}
if (b=1)
is probably wrong, and you probably wantif (b==1)
. You have several of this issues. – linuxfan says Reinstate Monica