'Programa ROB1 - para robo ADR-1 Andarilho 1 - Basic Stamp I ou Basic Step I
'Marcio Soares - 01/08/2001
'Funciona com PBasic Parallax ou TBasic Tato
symbol led = 2 'led, quando 1 acende esquerdo
'quando 0 acende direito
symbol buzzer = 5 'buzzer
symbol sdir = 7 'servo direito
symbol sesq = 6 'servo esquerdo
symbol chave1 = 3 'chave direita
symbol chave2 = 4 'chave esquerda
symbol d1 = b3 'dado para servo direito
symbol d2 = b4 'dado para servo esquerdo
symbol i = b2 'variavel para contador
let pins = 0 'faz pinos igual a zero
let dirs = %11100111 'saidas 4 e 3 entradas. 0,1,2,5,6 e 7 saidas
low led
'loop principal
'analisa chaves, se nao tem nada anda para frente
'se chave precionada, gira para lado contrario
inicio:
input pin3 'analisa chaves
if pin3=0 then direita 'chave direira pressionada
input pin4
if pin4=0 then esquerda 'chave esquerda pressionada
let d1=250 'nada pressionado, anda para frente
let d2=50
gosub anda
goto inicio 'faz eternamente...
'funcao da chave direita
'faz robo girar a esquerda
direita:
high led 'acende led direito
gosub inverte 'anda para traz durante 50ms
let d1=0 'prepara para girar a esquerda
let d2=255
for i=1 to 30
gosub gira
next i
goto inicio
'funcao da chave esquerda
'faz robo girar a direita
esquerda:
low led 'acende led esquerdo
gosub inverte 'anda para traz durante 50ms
let d1=50 'prepara para girar a direita
let d2=0
for i=1 to 30
gosub gira
next i
goto inicio
'funcao para andar para traz comuns as
'funcoes DIREITA e ESQUERDA
inverte:
for i=1 to 255 'toca buzzer...
pulsout buzzer,100
next i
let d1=50 'prepara para andar para traz
let d2=255
for i=1 to 50
gosub gira
next i
return
'funcao para movimentar servos
'sem compensacao de velocidade
gira:
pulsout sesq,d2 'movimenta servos de acordo com direcao
pulsout sdir,d1
pause 20
return
'funcao para movimentar para frente robo
'possui compensacao. Um dos servos eh mais rapido que o outro
'entao o mais lento movimenta-se 50% mais que o outro
anda:
toggle led 'pisca leds
for i= 1 to 5 'movimenta servos juntos
pulsout sesq,d2
pulsout sdir,d1
pause 20
next i
for i=1 to 3 'movimenta apenas um servo
pulsout sdir,d1 'para compensar torcao no movimento
pause 20 'um dos servos eh mais rapido
next i
return
|