VexIQ Sumobot Adventures

I have only just started playing with the VEXIQ system and have discovered some interesting issues. I have previously had to account for the clock cycle of the ‘brain’ and how block code is compiled when using LEGO and Makecode. I have found that these embedded systems don’t care much for nested conditions and don’t like events, in particular.

With VEXcode IQ Blocks, I coded a routine for a SumoBot to reverse and spin at a white line and spin slowly until it detects an opponent; and then charge. With embedded systems, a Loop forever, if..else if nesting is required:

Forever
If sense colour that is greater than 15 (white), then:
Stop driving
Reverse 5cm
Spin around 180 degrees
Else it is black, so
If ultrasonic sensor detects object (distance < 20) then:
drive forward at opponent
Else spin around slowly until detected

MakeCode

forever(function () {

if (sensors.color3.light(LightIntensityMode.Reflected) > 50) {

motors.stopAll()

motors.largeBC.steer(0, –50, 2, MoveUnit.Rotations)

motors.largeBC.tank(-100, 100)

} else {

if (sensors.ultrasonic4.distance() < 20) {

motors.largeBC.steer(0, 100)

} else {

motors.largeBC.tank(-25, 25)

pauseUntil(() => sensors.ultrasonic4.distance() < 20)

}

}

})

VEXcode IQ Blocks

The issue that I had, when I tested out my code, was that there was a delay between detecting the opponent and charging forward; and so it would hit it at an angle or miss completely. I have found this in the past, with the way the code is compiled and run on the bot and issues with nested if statements. I figured the problem was the ‘wait until’, which should have been fine, or it would have been on an Arduino, anyway. Therefore, I modified the code to include a ‘while’ not statement.

This seems to have made the system much happier, as the results below show.