The chassis is long because my very first intention was to have the brick in the middle of the car (hence the X design, to avoid sagging). But it is more practical to have the brick in the back. And it looks cool, too.
Mechanical issues figured out, I went and downloaded the Bricx Command Center 3.3 and after some tinkering I came up with this code (the car has the touch sensor attached in the back, not shown in the photos).
Although the code is just work in progress, it is already lots of fun to watch to car on the kitchen floor, backing out and steering away to avoid bumping into the furniture!
#include "NXCDefs.h"
#define NEAR 25
#define MIN_BACKOUT 20
#define MAX_BACKOUT 100
#define STEER_ANGLE 20
int angle = STEER_ANGLE;
int backout = MIN_BACKOUT;// backout time
task main()
{
int i;
SetSensorTouch(IN_1);
SetSensorLowspeed(IN_4);
while (true)
{
OnRev(OUT_C, 100); // motor is installed backwards,
// we are going forward
while (SensorUS(IN_4) > NEAR)
;
OnFwd(OUT_C, 100); // back out at full speed
Wait(50); // wait 50 ms
// steer away from obstacle
RotateMotor(OUT_A, 50, angle);
for (i = 0; i < backout; i++)
{
// bumped into something while backing?
if (SENSOR_1)
{
// play sound, then stop
PlayFileEx("! Startup.rso", 1, FALSE);
backout = MIN_BACKOUT;
break;
}
Wait(100);
}
Off(OUT_C); // stop
angle = -angle; // steer the other way
RotateMotor(OUT_A, 50, angle);
backout += 10; // backout increasingly
if (backout >= MAX_BACKOUT)
{
backout = MIN_BACKOUT;
}
}
}
No comments:
Post a Comment