I’ve been practicing for WRO 2016 recently (just got first prize in the local competition :)), thus often messing around with EV3. To be honest, I’ve never had good experiences with these “graphical programming” stuff, and EV3-G holds the record for being the most obnoxious one (well, maybe sharing the place with AppInventor).

Anyway, I encountered a problem where the motor would become slow if I put a “motor on” block in a loop. This was irritating since I wanted to improve the speed of line following. Pseudocode is below:

while (true) {
  turn = getColor(color = white)
  motorTurn(turn = (turn - 50) * 0.5, speed = 100)
}

After a bit of research, I found out that normal motor blocks are “regulated”, which means that the system checks the speed of the motor rotation once in a while, and adjusts the power given based on the data. However, if the system is under load, i.e. running a busy loop, the scheduler will mess up and not call the motor check as frequent as it should.

Using the “unregulated motor” block works like a charm. However, it works by passing speeds to each motor instead of a “turn” parameter like the method above. Thus, my code had to be changed as the following:

while (true) {
  error = getColor(color = white) * 0.5
  leftMotorUnregulated(speed = (100 + error))
  rightMotorUnregulated(speed = (100 - error))
}

This doesn’t seem very complicated, but once you moved it to EV3-G, the cables would tangle all together, killing the readability.