Butialo: Ejemplo 2 - Seguidor de líneas con eventos, utilizando un sensor de grises - Código
De Proyecto Butiá
local COLOR_NEGRO = 35000
local MOTOR_VEL = 500
local MOTOR_GIRO_VEL = 500
local sentido = "D"
local tiempo = 0.5
local evento_blanco_encontrado
local evento_buscar_negro
local buscando_negro = false
local TIEMPO_CENTRADO = 0.2
local last
local function invertir_sentido()
if sentido == "I" then
sentido = "D"
else
sentido = "I"
end
end
local function get_elapsed()
return util.get_time() - last
end
local function girar()
if sentido == "I" then
Motors.setvel2mtr(1,MOTOR_GIRO_VEL,0,MOTOR_GIRO_VEL)
else
Motors.setvel2mtr(0,MOTOR_GIRO_VEL,1,MOTOR_GIRO_VEL)
end
end
local function buscar_negro()
if not buscando_negro then
buscando_negro = true
-- Se deshabilita el evento de "color blanco encontrado" porque no tiene que "mezclarse" con el actual
events.remove(evento_blanco_encontrado)
else
-- Se remueve el evento anterior para agregar uno nuevo con el nuevo valor de la variable tiempo
events.remove(evento_buscar_negro)
end
last = util.get_time()
-- Lo siguiente es para que se busque s\u00f3lo un determinado tiempo en cada sentido de giro
evento_buscar_negro = events.add(get_elapsed, ">=", tiempo, buscar_negro)
invertir_sentido()
tiempo = tiempo * 2
girar()
end
local function avanzar()
if buscando_negro then
-- Remueve el evento para que se deje de buscar el color negro
events.remove(evento_buscar_negro)
-- Vuelve a agregar el evento que la funci\u00f3n buscar_negro removi\u00f3
evento_blanco_encontrado = events.add(Grey_1.getValue, '<', COLOR_NEGRO, buscar_negro)
buscando_negro = false
tiempo = 0.5
invertir_sentido()
util.wait(TIEMPO_CENTRADO)
end
Motors.setvel2mtr(0, MOTOR_VEL, 0, MOTOR_VEL)
end
events.add(Grey_1.getValue, '>=', COLOR_NEGRO, avanzar)
evento_blanco_encontrado = events.add(Grey_1.getValue, '<', COLOR_NEGRO, buscar_negro)
events.go()