Vous êtes sur la page 1sur 5

TRABAJO PRACTICO N5

NAVEGACION CON ANTENAS TACTILES

1)- Que tipo de conexin elctrica es un bigote?

Es un interruptor tctil

2)- Cuando se presiona un bigote, Qu voltaje ocurre en el pin I/O que lo monitorea? Qu
valor binario ocurrir en el registro de entrada?. Si se usa el pin P8 de I/O para monitorear el
pin de entrada, Qu valor tendr IN8 cuando se presione un bigote y que valor dentra
cuando un bigote no sea presionado?

, Qu voltaje ocurre en el pin I/O que lo monitorea?

Cero (0) voltios

Qu valor binario ocurrir en el registro de entrada?

El valor Binario (0) en el registro de entrada

Si se usa el pin P8 de I/O para monitorear el pin de entrada, Qu valor tendr IN8
cuando se presione un bigote y que valor tentra cuando un bigote no sea
presionado?

IN8 = 0 cuando el bigote es presionado. IN8 = 1 cuando el bigote no est presionado.

3)-Si IN7=1 Qu significa? Qu significa si IN7= 0? y si IN5 = 1 y IN5=0?

IN7 = 1 significa que el bigote derecho no est presionado.


IN7 = 0 significa que el bigote derecho es presionado.
IN5 = 1 significa que el bigote izquierdo no est presionado.
IN5 = 0 significa que el bigote izquierdo es presionado.

4)-Que comando se usa para brincar a diferentes subrutinas dependiendo del valor de una
variable? Qu comando se usa para decidir a que subrutina brincara? En que se basan
estas decisiones?

Que comando se usa para brincar a diferentes subrutinas dependiendo del valor de
una variable?

El comando GOSUB realiza el salto.

Qu comando se usa para decidir a que subrutina brincara?

El comando IF...THEN es usado para decidir a cul rutina saltar.

En que se basan estas decisiones?

Esta decisin es basada en condiciones, las cuales son declaraciones lgicas que son evaluadas
como verdadero o falso
5)- Cual es el propsito de tener declaraciones IF::::THEN anidadas?

El programa puede chequear por una condicin, y si esa condicin es verdadera, puede chequear otra
condicin dentro de la primera condicin.

6)- Escriba un comando DEBUG para TestWhiskers.bs2 que actualize el estado de cada bigote
en una nueva lnea. Ajuste PAUSE para que sea 250 en vez de 50?

Usar un segundo comando CRSRXY que har que el estado del segundo bigote se muestre en el lugar
apropiado en la pantalla. Para alinearlo con los encabezados, el texto debe comenzar en la columna 9
de la fila 3

' El Robot Home Boe-Bot - TestWhiskers.bs2


' Visualizar las lneas de E/S conectadas a los "bigotes".
' {$STAMP BS2}
' {$PBASIC 2.5}
DEBUG "Estado Bigotes", CR,"Izda Dcha.", CR,"------ ------"
DO
IF (IN5=1)AND (IN7=0)THEN
DEBUG CRSRXY,0,9, "P5=", BIN1 IN5,"P7=", BIN1 IN7
ELSEIF(IN5=1)AND(IN7=1)THEN
DEBUG CRSRXY,0,6, "P5=", BIN1 IN5,"P7=", BIN1 IN7
ELSEIF(IN5=0)AND (IN7=0)THEN
DEBUG CRSRXY,0,8, "P5=", BIN1 IN5,"P7=", BIN1 IN7
ELSE
DEBUG CRSRXY,0,7, "P5=", BIN1 IN5,"P7=", BIN1 IN7
ENDIF
PAUSE 250
LOOP

7) Usando RoamingWithWhisker.bs2 como referencia, escriba una subrutina Turn_Away que


llame a la subrutina Back_Up una vez y a la subrutina Turn_Left dos veces. Escriba las
modificaciones que tendr que hacer la seccin de la Rutina Principal de
RoamingWhiskers.bs2

Turn_Away:
GOSUB Back_Up
GOSUB Turn_Left
GOSUB Turn_Left
RETURN

Para modificar la Rutina Main, reemplaza los tres comandos GOSUB bajo la primera condicin IF
con esta sola lnea: GOSUB Turn_Away
PROYECTOS

1)- Modifique RoamingWithWhiskers.bs2 para que el Boe-Bot haga un sonido de 4 KHz y 100
ms antes de ejecutar la maniobra evasiva. Haga que suene 2 veces si ambos contactos de los
bigotes son detectados durante el mismo muestre.

' -----[ Title ]--------------------------------------------------------------


' El Robot Home Boe-Bot - RoamingWithWhiskers.bs2
' El Home Boe-Bot emplea los bigotes para detectar objetos y navegar en
' funcin del estado de los mismos.
' {$STAMP BS2}
' {$PBASIC 2.5}

' -----[ Variables ]


pulseCount VAR Byte ' Contador para el bucle FOR...NEXT

' -----[ Inicializacin ]


FREQOUT 4, 100, 4000 ' Seal de inicio/reset.

' -----[ Rutina principal ]


DO
IF (IN5 = 0) AND (IN7 = 0) THEN ' Ambos bigotes detectan obstculo
GOSUB Sonido
GOSUB Sonido
GOSUB Back_Up Retrocede y gira a la izda.
GOSUB Turn_Left
GOSUB Turn_Left
ELSEIF (IN5 = 0) THEN ' Bigote izdo. activado
GOSUB Sonido
GOSUB Back_Up Retroceso y giro a la dcha.
GOSUB Turn_Right
ELSEIF (IN7 = 0) THEN Bigote dcho. activado
GOSUB Sonido
GOSUB Back_Up Retroceso y giro a la izda.
GOSUB Turn_Left
ELSE Ambos bigotes desactivados (no hay obstculos)
GOSUB Forward_Pulse Avance
ENDIF Chequear de nuevo estado de los bigotes
LOOP

' -----[ Subrutinas ]


Forward_Pulse: Enva un simple pulso de avance.
PULSOUT 13,850
PULSOUT 12,650
PAUSE 20
RETURN

Turn_Left: Giro a la izda. 90.


FOR pulseCount = 0 TO 24
PULSOUT 13, 650
PULSOUT 12, 650
PAUSE 20
NEXT
RETURN

Turn_Right:
FOR pulseCount = 0 TO 24 Gira a la dcha. 90.
PULSOUT 13, 850
PULSOUT 12, 850
PAUSE 20
NEXT
RETURN

Back_Up: ' Retroceso.


FOR pulseCount = 0 TO 40
PULSOUT 13, 650
PULSOUT 12, 850
PAUSE 20
NEXT
RETURN

Sonido:
FREQOUT 4, 100, 4000
RETURN
2)- Modifique RoamingWithwhisker.bs2 para que el Boe-Bot avance en un circulo de 1 metro
de dimetro. Cuando toque un bigote, causara que viaje en un circulo mas cerrado (de menor
dimetro). Cuando toque el otro bigote, causara que Boe-Bot navegue en un circulo de mayor
dimetro

' Robotica con el Boe-Bot - CirclingWithWhiskerInput.bs2


' Mueve en un circulo de 1 yarda, incrementa/disminuye el radio en
' respuesta al activamiento de los bigotes, uno incrementa y el otro
' disminuye.
' {$STAMP BS2} ' Directiva del Stamp.
' {$PBASIC 2.5} ' Directiva de PBASIC.
DEBUG "Program Circulo con bigotes!"
' -----[ Variables/Inicializacion ]------------------------------------
pulseWidth VAR Word ' Senal enviada al servo
toneFreq VAR Word ' Frecuencia del tono (bip)
pulseWidth = 719 ' Encontrado en Cap 4 para
FREQOUT 4,2000,3000
' -----[ Rutina Principal ]--------------------------------------------
DO
PULSOUT 13, 850 ' Pulso de servos en trayecto circular
PULSOUT 12, pulsewidth ' 12 mas lento que 13 para curvear
PAUSE 20
IF (IN5 = 0) THEN
FREQOUT 4,500,4000 ' Bigote izq. hace el circulo
IF (pulseWidth < 850) THEN ' pequeno, hasta el max pulso
pulseWidth = 740 ' del servo, pulseWidth 850.
ENDIF
ELSEIF (IN7 = 0) THEN
FREQOUT 4,100,3000 ' Bigote der. hace el circulo
IF (pulseWidth > 650) THEN ' grande, hasta el min pulso
pulseWidth = 700 ' del servo, pulseWidth 650.
ENDIF
ENDIF
LOOP

Vous aimerez peut-être aussi