Diferencia entre revisiones de «Butialo: Ejemplo 3 - Robot que no se caiga de la mesa sin eventos, utilizando un sensor de grises - Código»

De Proyecto Butiá
Saltar a: navegación, buscar
(Página creada con '<syntaxhighlight lang="lua"> local COLOR_MESA = 43000 local INTERVALO_CHEQUEO = 0.05 local TIEMPO_RETROCESO = 0.1 local VELOCIDAD_RETROCESO = 500 local VELOCIDAD_GIRO = 500 loca...')
 
 
Línea 12: Línea 12:
  
 
local function avanzar()
 
local function avanzar()
Motors.setvel2mtr(0, MOTOR_VEL, 0, MOTOR_VEL)
+
    Motors.setvel2mtr(0, MOTOR_VEL, 0, MOTOR_VEL)
 
end
 
end
  
 
local function puedo_avanzar()
 
local function puedo_avanzar()
return (Grey_2.getValue() < COLOR_MESA)
+
    return (Grey_2.getValue() < COLOR_MESA)
 
end
 
end
  
 
local function chequear_giro_izquierda()
 
local function chequear_giro_izquierda()
-- Para girar random izq o der, uso un entero del 0-1
+
    -- Para girar random izq o der, uso un entero del 0-1
-- Si valor random > 0.5 es izq, sino der
+
    -- Si valor random > 0.5 es izq, sino der
-- DERECHA = false, IZQUIERDA = true
+
    -- DERECHA = false, IZQUIERDA = true
local sentido = math.random (0, 1)
+
    local sentido = math.random (0, 1)
return sentido > 0.5
+
    return sentido > 0.5
 
end
 
end
  
 
local function girar_aleatorio()
 
local function girar_aleatorio()
local tiempo_giro = math.random(MIN_TIEMPO_GIRO, MAX_TIEMPO_GIRO)
+
    local tiempo_giro = math.random(MIN_TIEMPO_GIRO, MAX_TIEMPO_GIRO)
local izquierda = chequear_giro_izquierda()
+
    local izquierda = chequear_giro_izquierda()
if (izquierda) then
+
    if (izquierda) then
Motors.setvel2mtr(0, VELOCIDAD_GIRO, 1, VELOCIDAD_GIRO)
+
        Motors.setvel2mtr(0, VELOCIDAD_GIRO, 1, VELOCIDAD_GIRO)
else
+
    else
Motors.setvel2mtr(1, VELOCIDAD_GIRO, 0, VELOCIDAD_GIRO)
+
Motors.setvel2mtr(1, VELOCIDAD_GIRO, 0, VELOCIDAD_GIRO)
end
+
    end
util.wait(tiempo_giro)
+
    util.wait(tiempo_giro)
 
end
 
end
  
 
local function retroceder_aleatorio()
 
local function retroceder_aleatorio()
local tiempo_retroceso = math.random(MIN_TIEMPO_RETROCESO, MAX_TIEMPO_RETROCESO)
+
    local tiempo_retroceso = math.random(MIN_TIEMPO_RETROCESO, MAX_TIEMPO_RETROCESO)
Motors.setvel2mtr(1, VELOCIDAD_RETROCESO, 1, VELOCIDAD_RETROCESO)
+
    Motors.setvel2mtr(1, VELOCIDAD_RETROCESO, 1, VELOCIDAD_RETROCESO)
util.wait(tiempo_retroceso)
+
    util.wait(tiempo_retroceso)
 
end
 
end
  
 
while true do
 
while true do
avanzar()
+
    avanzar()
while (puedo_avanzar()) do
+
    while (puedo_avanzar()) do
util.wait(INTERVALO_CHEQUEO)
+
        util.wait(INTERVALO_CHEQUEO)
end
+
    end
retroceder_aleatorio()
+
    retroceder_aleatorio()
girar_aleatorio()
+
    girar_aleatorio()
 
end
 
end
 
</syntaxhighlight>
 
</syntaxhighlight>

Revisión actual del 12:38 15 oct 2012

local COLOR_MESA = 43000
local INTERVALO_CHEQUEO = 0.05
local TIEMPO_RETROCESO = 0.1
local VELOCIDAD_RETROCESO = 500
local VELOCIDAD_GIRO = 500
local MOTOR_VEL = 500
local MIN_TIEMPO_GIRO = 0.5
local MAX_TIEMPO_GIRO = 2
local MIN_TIEMPO_RETROCESO = 1.5
local MAX_TIEMPO_RETROCESO = 2.5

local function avanzar()
    Motors.setvel2mtr(0, MOTOR_VEL, 0, MOTOR_VEL)
end

local function puedo_avanzar()
    return (Grey_2.getValue() < COLOR_MESA)
end

local function chequear_giro_izquierda()
    -- Para girar random izq o der, uso un entero del 0-1
    -- Si valor random > 0.5 es izq, sino der
    -- DERECHA = false, IZQUIERDA = true
    local sentido = math.random (0, 1)
    return sentido > 0.5
end

local function girar_aleatorio()
    local tiempo_giro = math.random(MIN_TIEMPO_GIRO, MAX_TIEMPO_GIRO)
    local izquierda = chequear_giro_izquierda()
    if (izquierda) then
        Motors.setvel2mtr(0, VELOCIDAD_GIRO, 1, VELOCIDAD_GIRO)
    else
	Motors.setvel2mtr(1, VELOCIDAD_GIRO, 0, VELOCIDAD_GIRO)
    end
    util.wait(tiempo_giro)
end

local function retroceder_aleatorio()
    local tiempo_retroceso = math.random(MIN_TIEMPO_RETROCESO, MAX_TIEMPO_RETROCESO)
    Motors.setvel2mtr(1, VELOCIDAD_RETROCESO, 1, VELOCIDAD_RETROCESO)
    util.wait(tiempo_retroceso)
end

while true do
    avanzar()
    while (puedo_avanzar()) do
        util.wait(INTERVALO_CHEQUEO)
    end
    retroceder_aleatorio()
    girar_aleatorio()
end