Diferencia entre revisiones de «Butialo: Ejemplo 5 - Seguidor de líneas con eventos, utilizando dos sensores de grises - Código»
De Proyecto Butiá
Línea 1: | Línea 1: | ||
<syntaxhighlight lang="lua"> | <syntaxhighlight lang="lua"> | ||
− | local | + | local COLOR_NEGRO = 35000 |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
local MOTOR_VEL = 500 | local MOTOR_VEL = 500 | ||
− | local | + | local MOTOR_GIRO_VEL = 500 |
− | local | + | local NEGRO_IZQUIERDO, NEGRO_DERECHO, NEGRO_AMBOS, BLANCO = 0, 1, 2, 3 |
− | local | + | local negro_izquierda |
− | local | + | local negro_derecha |
local function avanzar() | local function avanzar() | ||
Línea 15: | Línea 11: | ||
end | end | ||
− | local function | + | local function detener() |
− | + | Motors.setvel2mtr(0, 0, 0, 0) | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
end | end | ||
− | local function | + | local function es_negro(valor) |
− | + | return (valor > COLOR_NEGRO) | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
end | end | ||
− | local function | + | local function girar_derecha() |
− | + | Motors.setvel2mtr(0,MOTOR_GIRO_VEL,0,0) | |
− | Motors.setvel2mtr( | + | |
− | + | ||
end | end | ||
− | local function | + | local function girar_izquierda() |
− | + | Motors.setvel2mtr(0,0,0,MOTOR_GIRO_VEL) | |
− | + | end | |
+ | |||
+ | local function obtener_estado() | ||
+ | negro_izquierda = es_negro(Grey_1.getValue()) | ||
+ | negro_derecha = es_negro(Grey_2.getValue()) | ||
+ | if (negro_izquierda and negro_derecha) then | ||
+ | return NEGRO_AMBOS | ||
+ | elseif (negro_izquierda) then | ||
+ | return NEGRO_IZQUIERDO | ||
+ | elseif (negro_derecha) then | ||
+ | return NEGRO_DERECHA | ||
+ | else | ||
+ | return BLANCO | ||
+ | end | ||
end | end | ||
− | events.add( | + | events.add(obtener_estado, '==', NEGRO_IZQUIERDO, girar_izquierda) |
− | events.add( | + | events.add(obtener_estado, '==', NEGRO_DERECHO, girar_derecha) |
+ | events.add(obtener_estado, '==', NEGRO_AMBOS, avanzar) | ||
+ | events.add(obtener_estado, '==', BLANCO, detener) | ||
events.go() | events.go() | ||
</syntaxhighlight> | </syntaxhighlight> |
Revisión actual del 12:09 15 oct 2012
local COLOR_NEGRO = 35000
local MOTOR_VEL = 500
local MOTOR_GIRO_VEL = 500
local NEGRO_IZQUIERDO, NEGRO_DERECHO, NEGRO_AMBOS, BLANCO = 0, 1, 2, 3
local negro_izquierda
local negro_derecha
local function avanzar()
Motors.setvel2mtr(0, MOTOR_VEL, 0, MOTOR_VEL)
end
local function detener()
Motors.setvel2mtr(0, 0, 0, 0)
end
local function es_negro(valor)
return (valor > COLOR_NEGRO)
end
local function girar_derecha()
Motors.setvel2mtr(0,MOTOR_GIRO_VEL,0,0)
end
local function girar_izquierda()
Motors.setvel2mtr(0,0,0,MOTOR_GIRO_VEL)
end
local function obtener_estado()
negro_izquierda = es_negro(Grey_1.getValue())
negro_derecha = es_negro(Grey_2.getValue())
if (negro_izquierda and negro_derecha) then
return NEGRO_AMBOS
elseif (negro_izquierda) then
return NEGRO_IZQUIERDO
elseif (negro_derecha) then
return NEGRO_DERECHA
else
return BLANCO
end
end
events.add(obtener_estado, '==', NEGRO_IZQUIERDO, girar_izquierda)
events.add(obtener_estado, '==', NEGRO_DERECHO, girar_derecha)
events.add(obtener_estado, '==', NEGRO_AMBOS, avanzar)
events.add(obtener_estado, '==', BLANCO, detener)
events.go()