'**************************************************** '* Programa ROBO_INTELIGENTE.BAS '* Desenvolvido por Marcio José Soares - 15/07/2004 '* Controla dois motores DC através de um L293D, '* um servo Hobbico CS-61 e um sonar Tato '**************************************************** '**************************************************** '* Compilador utilizado - Tbasic versão 1.0.0.0 '* Necessário Basic Step 1 firmware 2.6 ou superior '**************************************************** '**************************************************** '* define variáveis symbol servo = 0 'P0 - servo symbol sonar = 1 'P1 - sonar symbol led = 2 'P2 - led symbol beep = 3 'P3 - beep symbol in1 = 4 'P4 - ligado a 1IN do L293 symbol in2 = 5 'P5 - ligado a 2IN do L293 symbol in3 = 6 'P6 - ligado a 3IN do L293 symbol in4 = 7 'P7 - ligado a 4IN do L293 symbol esquerda = 60 'posição para o servo a esquerda symbol direita = 230 'posição para o servo a direita symbol centro = 145 'posição para o servo no centro symbol dt1 = b2 'variável para primeira distância symbol dt2 = b3 'variável para segunda distância symbol i = b4 dirs=%11111101 'pino P1 como entrada, o resto saída pause 1000 'espera 1 segundo para iniciar goto pcent 'posiciona o servo no centro e move robô p/ frente '**************************************************** '* rotina principal loop: toggle led 'inverte LED gosub le_sonar 'le o sonar if b0 < 19 then 'obstáculo detectado goto pense 'prepara para pensar endif goto loop 'faz eternamente '**************************************************** '* subrotina para permitir o robô decidir para '* qual lado seguir. A distância a direita e a esquerda '* são tiradas. A maior será a escolhida. pense: low led 'desliga led low in1 'para robô low in2 'setando todas as portas low in3 'com "zero"lógico low in4 for i = 1 to 50 'posiciona o servo a direita pulsout servo, esquerda pause 20 next gosub le_sonar 'le radar dt1=b0 'guarda distância for i = 1 to 50 'posiciona o servo a esquerda pulsout servo, direita pause 20 next gosub le_sonar 'le radar dt2=b0 'guarda distância if dt1 > dt2 then 'move ribô a direita goto pdireita else goto pesquerda 'move robô a esquerda endif pcent: for i = 1 to 50 'posiciona o servo no centro pulsout servo, centro pause 20 next gosub pfrente 'move robô para frente low beep 'desliga beep goto loop '**************************************************** '* subrotina para leitura do sonar Tato '* implementada de acordo com o manual do mesmo le_sonar: for i = 1 to 3 pause 200 'espera 200ms para estabilizar pulsin sonar,1,w0 'colhe distância next w0=w0*34 'arruma valores w0=w0/2 w0=w0/100 return 'retorna '**************************************************** '* subrotina para mover o robô p/ frente pfrente: low in1 'seleciona portas high in2 low in3 high in4 return '**************************************************** '* subrotina para mover o robô p/ tras patras: high in1 'ajusta portas do L293D low in2 'para mover p/ tras high in3 low in4 high beep 'liga beep pause 2000 'move p/ atras por 2 segundos return '**************************************************** '* subrotina para mover o robô p/ direita pdireita: gosub patras 'primeiro move para tras low in1 'agora seta portas do L293D high in2 'para mover p/ direita low in3 low in4 pause 1500 'a direita por 1,5 segundos goto pcent 'ajusta servo no centro e move a frente '**************************************************** '* subrotina para mover o robô p/ esquerda pesquerda: gosub patras 'primeiro move para tras low in1 'agora ajusta portas do L293D low in2 'para mover p/ esquerda low in3 high in4 pause 1500 'a esquerda por 1,5 segundos goto pcent 'ajusta servo no centro e move a frente '****************************************************