Radio Control and Ultrasonic Sensor

I wrote a program using Easy C 2.0 that lets me control a car using radio control until the ultrasonic sensor detects that the car is going to crash into something and stops the motors so that the car doesn’t crash into something. One problem: because the value of the sensor reading is still under 20 after the motors are stopped, I can’t control the car using radio control. Any suggestions?


#include "Main.h"

void main ( void )
{
      int loop = 1; 
      int ultrasonic; 

      //Connect Input Wire to Digital Output 11
      //Connect Output wire to Interrupt 1
      //Near = 2, Far = 100
      StartUltrasonic ( 1 , 11 ) ; // interrupt 1= output label on sensor, DO11=input label on sensor
      while ( loop == 1 )
      {
            ultrasonic = GetUltrasonic ( 1 , 11 ) ;
            if ( ultrasonic > 20 )
            {
                  Arcade2 ( 0 , 2 , 4 , 3 , 2 , 0 , 0 ) ;
            }
            else
            {
                  SetMotor ( 2 , 127 ) ;
                  SetMotor ( 3 , 127 ) ;
            }
      }
}

If, after you tell the robot to stop, you tell it to move backward until the ultrasonic does not read 20, it should work. Or, you could change the “stop” part to “go backwards for one second”.

Another way of doing it is to break up the Arcade command into two sets of commands, reading the joystick value and driving the motors. Then whenever the ultrasonic sensor is reading a low value, only allow joystick values that drive backwards or away from the target. For forward joystick values, send stopped, the way you are doing now.

I got Radio Control and Ultrasonic Sensor working properly. Here’s the code:


#include "Main.h"

void main ( void )
{
      int ultrasonic; 
      int joystick02; 

      //Connect Input Wire to Digital Output 11
      //Connect Output wire to Interrupt 1
      //Near = 2, Far = 100
      StartUltrasonic ( 1 , 11 ) ; // interrupt 1= output label on sensor, DO11=input label on sensor
      while ( 1 == 1 )
      {
            ultrasonic = GetUltrasonic ( 1 , 11 ) ;
            joystick02 = GetRxInput ( 1 , 2 ) ;
            if ( ultrasonic > 20 )
            {
                  MotorRcControl ( 0 , 2 , 1 , 0 ) ;
                  MotorRcControl ( 0 , 2 , 2 , 1 ) ;
                  ServoRcControl ( 0 , 4 , 3 , 0 ) ;
            }
            else
            {
                  SetMotor ( 1 , 127 ) ;
                  SetMotor ( 2 , 127 ) ;
                  ServoRcControl ( 0 , 4 , 3 , 0 ) ;
                  if ( joystick02 > 127 )
                  {
                        MotorRcControl ( 0 , 2 , 1 , 0 ) ;
                        MotorRcControl ( 0 , 2 , 2 , 1 ) ;
                  }
                  else
                  {
                        SetMotor ( 1 , 127 ) ;
                        SetMotor ( 2 , 127 ) ;
                  }
            }
      }
}

Is it possible to get another Ultrasonic Sensor for the rear end of the car? I think that in another thread on this forum, someone couldn’t get two Ultrasonic Sensors working together without special programming.