Académique Documents
Professionnel Documents
Culture Documents
PICAXE Editor 6
NOTA
Los programas que se muestran a continuacin, pueden simularse en el ordenador sin necesidad de tener en ese
momento fsicamente las tarjetas controladoras. Es suficiente la aplicacin anterior, con la que podremos visualizar
dichas tarjetas y su funcionamiento.
PLANTILLA para los programas
PICAXE Editor permite empezar a programar con una plantilla por defecto cada vez que se crea un archivo BASIC
nuevo.
Nosotros recientemente estamos utilizando la siguiente plantilla que prcticamente cubre todos los casos de
programacin y que est dividida en cuatro secciones:
I - INFORMACIN. Datos con los que se documenta el programa (micro, entradas y salidas utilizadas,
funcionalidad,...).
II - INICIALIZACIN. Instrucciones que solo se ejecutan una vez al iniciar el programa.
III - BUCLE PRINCIPAL. Conjunto de instrucciones que por defecto ejecutan indefinidamente.
IV - SUBRUTINAS. Bloques de cdigo que pueden llamarse desde el bucle principal u otra subrutina.
;----------------------------------------
loop
;----------------------------------------
;----------------------------------------
NOTA
La plantilla anterior solo aparece en los programas ms recientes.
En los ms antiguos an utilizamos el formato clsico con "inicio:" y "goto inicio"
LISTA DE PROGRAMAS
que hemos desarrollado para nuestras prcticas y
proyectos:
IMPORTANTE: hemos actualizado todos los programas para que funcionen con micros "M2", que son los ltimos que
se ofrecen en el mercado.
inicio:
high C.0 'salida C.0 -> ON
pause 1000 'pausa de 1,0 segundos
inicio:
'PRIMER PARPADEO RPIDO
high C.0 'salida C.0 -> ON, o bien "nivel alto", o bien "1"
pause 200 'pausa de 0,2 segundos (200 milisegundos)
low C.0 'salida C.0 -> OFF, o bien "nivel bajo", o bien "0"
pause 200 'pausa de 0,2 segundos (200 milisegundos)
inicio:
'--- SEMFORO EN VERDE ---
low B.0 'se apaga la salida 0
low B.1 'se apaga la salida 1
high B.2 'se enciende la salida 2 - VERDE -
cambiar:
'--- SEMFORO EN AMARILLO ---
low B.0 'se apaga la salida 0
high B.1 'se enciende la salida 1 - AMARILLO -
low B.2 'se apaga la salida 2
pause 1000 'se espera 1000 milisegundos - 1 segundo -
'Salidas: B.0 a B.7 -> 7 LED rojos (con resistencias de proteccin de 330ohm)
'En este ejemplo vemos cmo pueden manejarse simultnemente todas las salidas
let dirsB=%11111111 ;indicamos que desde B.0 a B.7 son todos salidas
inicio:
'En este ejemplo vemos cmo pueden manejarse simultnemente todas las salidas
let dirsB=%11111111 ;indicamos que desde B.0 a B.7 son todos salidas
inicio:
'Salidas:
' LUCES en semforo para los COCHES
' B.0 -> LED ROJO
' B.1 -> LED AMARILLO
' B.2 -> LED VERDE
' LUCES y SONIDO en semforo para los PEATONES
' B.6 -> LED VERDE
' B.7 -> LED ROJO
' B.4 -> Zumbador
'Entradas:
' BOTN para pasar los PEATONES
' C.7 <- pulsador
inicio:
low B.0 'se apaga la salida B.0
low B.1 'se apaga la salida B.1
high B.2 'se enciende la salida B.2 -VERDE coches-
low B.6 'se apaga la salida B.6
high B.7 'se enciende la salida B.7 -ROJO peatones-
cambiar:
low B.0 'se apaga la salida B.0
high B.1 'se enciende la salida B.1 -AMARILLO coches-
low B.2 'se apaga la salida B.2
'Entradas:
' C.0 <- Sensor analgico de proximidad;
' el sensor tambin est conectado a +4,5V y 0V;
'Salidas :
' B.0 <- LED
inicio:
readadc C.0,b0 'se lee la seal analgica del sensor y mete el valor en b0
'cuanto ms cerca detecte algo el sensor, menor ser este valor
goto inicio
'Salidas:
' Desde B.0 a B.6 se conectan a los segmentos (LED) del visualizador
' (en total hay 7 resistencias de proteccin para los 7 LED)
' B.0 -> led_A; B.1 -> led_B; ... ; B.6 -> led_G
inicio:
'La equivalencia de pines-led es: pinsB = '0GFEDCBA'
goto inicio
'Entradas:
' C.0 (ADC0) <- Sensor de distancias (4 a 30cm).
' Las otras dos patas del sensor van a G y a V+
'CALIBRACIN
'- Construimos la tabla: distancia_real_obstculo - valor_devuelto_por_sensor.
'- Colocamos un obstculo delante del sensor y anotamos a la distancia que est,
' y en PICAXE Editor vemos el valor que devuelve el sensor.
inicio:
readadc C.0, b0 ;se lee de C.0 el valor de la distancia y se guarda en b0
; (C.0 es la entrada analgica 0
; tambin se puede usar readadc 0, b0)
debug ;con "debug" podemos leer b0 en pantalla
pause 100 ;se espera 0,1 segundos entre lecturas
goto inicio
'Entradas:
' C.0 (ADC0) <- Sensor de distancias (4 a 30cm).
' Las otras dos patas del sensor van a G y a V+
'Salidas:
' B.0 a B.6 -> Visualizador de 7 segmentos
' (ver en la seccin de "Actuadores" cmo se conecta)
'Funcionamiento:
' - El rango de distancias del sensor se ha dividido en 8 tramos
' y se ha tomado el valor (RAW) que devuelve el sensor.
' - Segn a la distancia que pongamos un objeto,
' se mostrar un valor en el display del 1 al 9
' - En caso de fuera de distancia o sin objeto, se mostrar un 0.
let dirsB = %11111111 ;indicamos que desde B.0 a B.7 son salidas
inicio:
readadc C.0, b0 ;se lee de C.0 el valor de distancia y se guarda en b0
debug ;con "debug" podemos ver la variable b0 en pantalla
pause 100 ;se espera 0,1 segundos entre lecturas
num_0:
let pinsB = %00111111 '0
goto inicio
num_1:
let pinsB = %00000110 '1
goto inicio
num_2:
let pinsB = %01011011 '2
goto inicio
num_3:
let pinsB = %01001111 '3
goto inicio
num_4:
let pinsB = %01100110 '4
goto inicio
num_5:
let pinsB = %01101101 '5
goto inicio
num_6:
let pinsB = %01111101 '6
goto inicio
num_7:
let pinsB = %00100111 '7
goto inicio
num_8:
let pinsB = %01111111 '8
goto inicio
num_9:
let pinsB = %01100111 '9
goto inicio
'Entradas:
' C.0 (ADC0) <- Receptor de infrarrojos (protocolo Sony)
' conectado segn manual de PICAXE.
inicio:
irin [200],C.0,b5 ;durante 0,2s se espera seal del mando a distancia
debug ;para ver en pantalla el valor b5 con la tecla pulsada
goto inicio
inicio:
irin [200],C.0,b5
;Si hay nueva seal del mando a distancia (por la entrada 0) se guarda en b5.
;Si no hay nueva seal por el mando a distancia, se sale a los 0,2 segundos
;y en b5 sigue el mismo valor anterior.
;irin [200,otra_accion],C.0,b5
;se podra poner que a los 0,2seg sin recibir seal se saltara a otro sitio
;debug b5
;se puede visualizar en el ordenador el valor de tecla_pulsada
goto inicio
'SENSOR
'Receptor de infrarrojos (protocolo Sony)
'conectado segn esquema que proporciona Picaxe en el manual
'En la entrada 0 (C.0) se conecta la seal que devuelve el sensor anterior
'la seal se guarda en la variable b0
'ACTUADORES
'Motor derecho en las entradas B.4 (negro) y B.5 (rojo)
'Motor izquierdo en las entradas B.6 (rojo) y B.7 (negro)
'Funcin
'Segn las teclas pulsadas en el mando
'conseguimos distintos movimientos de los motores
inicio:
irin [200],C.0,b0 ;durante 0,2s se espera seal del mando a distancia
goto inicio
Avanza:
low B.4 ; rueda derecha AVANZA
high B.5
low B.6 ; rueda izquierda AVANZA
high B.7
return ; vuelve al "gosub"
Retrocede:
high B.4 ; rueda derecha RETROCEDE
low B.5
high B.6 ; rueda izquierda RETROCEDE
low B.7
return ; vuelve al "gosub"
Para:
low B.4 ; rueda derecha PARADA
low B.5
low B.6 ; rueda izquierda PARADA
low B.7
return ; vuelve al "gosub"
Derecha:
low B.4 ; rueda derecha PARADA
low B.5
low B.6 ; rueda izquierda AVANZA
high B.7
return ; vuelve al "gosub"
Izquierda:
low B.4 ; rueda derecha AVANZA
high B.5
low B.6 ; rueda izquierda PARADA
low B.7
return ; vuelve al "gosub"
inicio:
readadc C.0, b0 ;se toma el valor de distancia en b0
;debug ;con "debug" podemos leerlo en pantalla
pause 50 ;se espera 0,050 segundos entre lecturas
if b0>150 then goto Para ;si se esta demasiado cerca -> Para
if b0<50 then goto Avanza ;si quedan mas de 20cm -> Avanza (CALIBRAR)
if b0>49 then goto Giro_Izq_corto ;si quedan menos de 20cm -> Giro_Izq_corto
goto inicio
Avanza:
low B.4 ;MD avanza
high B.5
low B.6 ;MI avanza
high B.7
goto inicio
Para:
low B.4 ;MD detenido
low B.5
low B.6 ;MI detenido
low B.7
goto inicio
Giro_Der_corto:
low B.4 ;MD detenido
low B.5
low B.6 ;MI avanza
high B.7
pause 300 ;giro de 0,3 seg
goto inicio
Giro_Izq_corto:
low B.4 ;MD avanza
high B.5
low B.6 ;MI detenido
low B.7
pause 300 ;giro de 0,3 seg
goto inicio
inicio:
readadc C.1, b1 ;se toma el valor de distancia en b1
;debug ;con "debug" podemos leerlo en pantalla
pause 50 ;se espera 0,050 segundos entre lecturas
Avanza:
low B.4 ;MD avanza
high B.5
low B.6 ;MI avanza
high B.7
goto inicio
Para:
low B.4 ;MD detenido
low B.5
low B.6 ;MI detenido
low B.7
goto inicio
Giro_Der_corto:
low B.4 ;MD detenido
low B.5
low B.6 ;MI avanza
high B.7
pause 300 ;giro de 0'3 seg
goto inicio
Giro_Izq_corto:
low B.4 ;MD avanza
high B.5
low B.6 ;MI detenido
low B.7
pause 300 ;giro de 0'3 seg
goto inicio
;SALIR DE UN LABERINTO.
; El coche sigue siempre la pared de su derecha.
; Para ello intenta estar siempre cerca de la pared de la derecha
; y si se encuentra una pared de frente entonces gira a la izquierda.
inicio:
readadc C.0, b0 ;se toma el valor de distancia en b0
readadc C.1, b1 ;se toma el valor de distancia en b1
;debug ;con "debug" podemos leerlo en pantalla
;SENSOR DERECHO
;Se intenta estar entre 10 y 20cm de la pared derecha
;Pared derecha a menos de 10cm se gira a la izq
;Pared derecha a mas de 20cm se gira a la der
if b1>65 then goto Giro_Izq ;menos de 10 cm -> girar izq
if b1<30 then goto Giro_Der ;mas de 20 cm -> girar der
;SENSOR FRONTAL
;Pared frontal a menos de 15cm se ROTA a la izq!!
;Pared frontal a menos de 24cm se gira a la izquierda
;Pared frontal a mas de 24cm se avanza
if b0>50 then goto Rotar_Izq ;menos de 15cm -> rotacion izq
if b0>24 then goto Giro_Izq ;entre 15 y 24cm -> girar izq
;ms de 24 cm -> se avanza
goto Avanza ;desde Avanza se vuelve a Inicio
Avanza:
low B.4 ;MD avanza
high B.5
low B.6 ;MI avanza
high B.7
goto inicio
Para:
low B.4 ;MD detenido
low B.5
low B.6 ;MI detenido
low B.7
goto inicio
Giro_Der:
low B.4 ;MD detenido
low B.5
low B.6 ;MI avanza
high B.7
pause 300 ;giro de 0,3 seg
goto inicio
Giro_Izq:
low B.4 ;MD avanza
high B.5
low B.6 ;MI detenido
low B.7
pause 300 ;giro de 0,3 seg
goto inicio
Rotar_Izq:
low B.4 ;MD avanza
high B.5
low B.6 ;MI detenido
low B.7
pause 500 ;rotacin izq de 0,5 seg
goto inicio
;Funcionamiento
;En el ordenador leemos los distintos valores que devuelve la LDR
;segn la luz que le llega.
;Se tiene en cuenta la bombillita que tiene enfrente,
;si hay o no un objeto entre ambos
;y la iluminacin de la sala de trabajo.
inicio:
goto inicio
;Funcionamiento
;La LDR devuelve un valor RAW alto cuando le llega mucha luz
;y bajo cuando le llega poca luz.
;Previa calibracin y mediante pruebas
;(hay que tener en cuenta la iluminacin de la sala de trabajo),
;se establece el valor a partir del cual se considera que llega poca luz
;porque hay un objeto entre la LDR y la bombilla (en este ejemplo es 120).
inicio:
readadc 1,b1 ;Se lee el valor que devuelve la LDR
if b1<120 then Parada ;Si se baja de un valor previamente calibrado
;entonces ejecutamos la parada.
high 4 ;Caso contrario se pone en marcha el motor
low 0 ;Y se apaga el led
goto inicio
Parada:
low 4 ;Se apaga el motor
'Sensores :
' Fin de carrera derecho (fdcD) en entrada C.1
' Fin de carrera izquierdo (fdcI) en entrada C.2
'Actuadores:
' Motor derecho (MD) en salidas B4 y B5
' Motor izquierdo (MI) en salidas B6 y B7
'Funcionamiento:
'Si el fdcD no est pulsado, el MD avanza
'Si el fdcI no est pulsado, el MI avanza
'Si el fdcD s est pulsado, (obstculo a la derecha) entonces:
' - se detienen los dos motores
' - se retrocede (ambos motores giran hacia atrs)
' - se vuelven a detener los dos motores
' - el MI gira hacia atrs (con lo que el coche gira a izq.)
' - y por ltimo empieza a avanzar de nuevo
'Si el fdcI s est pulsado, todo se hace simtricamente a lo anterior.
principal:
'pin 1 -> fin de carrera derecho
'out 4 y 5 -> rueda derecha
r_der_avanza:
low B.4
high B.5
return
r_izq_avanza:
high B.6
low B.7
return
retro_y_gira_r_der:
gosub parar
wait 1
gosub retroceder
wait 1
gosub parar
wait 1
gosub r_der_atras
wait 2
gosub parar
return
retro_y_gira_r_izq:
gosub parar
wait 1
gosub retroceder
wait 1
gosub parar
wait 1
gosub r_izq_atras
wait 2
gosub parar
return
parar:
low B.4
low B.5
low B.6
low B.7
return
retroceder:
high B.4
low B.5
low B.6
high B.7
return
r_der_atras:
high B.4
low B.5
return
r_izq_atras:
low B.6
high B.7
return
'COCHE EVITA-CADAS
'
'Tarjeta "Proyectos Picaxe-18M2 de alta potencia"
'Microcontrolador "Picaxe-18M2"
'Sensores :
' Fin de carrera derecho (fdcD) en entrada C.1
' Fin de carrera izquierdo (fdcI) en entrada C.2
'Actuadores:
' Motor derecho (MD) en salidas B4 y B5
' Motor izquierdo (MI) en salidas B6 y B7
'Funcionamiento:
'Si el fdcD s est pulsado, el MD avanza
'Si el fdcI s est pulsado, el MI avanza
'Si el fdcD no est pulsado, (obstculo a la derecha) entonces:
' - se detienen los dos motores
' - se retrocede (ambos motores giran hacia atrs)
' - se vuelven a detener los dos motores
' - el MI gira hacia atrs (con lo que el coche gira a izq.)
' - y por ltimo empieza a avanzar de nuevo
'Si el fdcI no est pulsado, todo se hace simtricamente a lo anterior.
principal:
'pin 1 -> fin de carrera derecho
'out 4 y 5 -> rueda derecha
goto principal
r_der_avanza:
low B.4
high B.5
return
r_izq_avanza:
high B.6
low B.7
return
retro_y_gira_r_der:
gosub parar
wait 1
gosub retroceder
wait 1
gosub parar
wait 1
gosub r_der_atras
wait 2
gosub parar
return
retro_y_gira_r_izq:
gosub parar
wait 1
gosub retroceder
wait 1
gosub parar
wait 1
gosub r_izq_atras
wait 2
gosub parar
return
parar:
low B.4
low B.5
low B.6
low B.7
return
retroceder:
high B.4
low B.5
low B.6
high B.7
return
r_der_atras:
high B.4
low B.5
return
r_izq_atras:
low B.6
high B.7
return
inicio:
irin [200],C.1,b1 ;durante 0,2s se espera seal del mando a distancia
debug b1 ;para ver en pantalla el valor de la tecla pulsada
goto inicio
gosub Para
pause 3000 ;espera 3 segundos
Avanza:
low B.4 ; rueda derecha AVANZA
high B.5
low B.6 ; rueda izquierda AVANZA
high B.7
return ; vuelve al "gosub"
Retrocede:
high B.4 ; rueda derecha RETROCEDE
low B.5
high B.6 ; rueda izquierda RETROCEDE
low B.7
return ; vuelve al "gosub"
Para:
low B.4 ; rueda derecha PARADA
low B.5
low B.6 ; rueda izquierda PARADA
low B.7
return ; vuelve al "gosub"
Derecha:
low B.4 ; rueda derecha PARADA
low B.5
low B.6 ; rueda izquierda AVANZA
high B.7
return ; vuelve al "gosub"
Izquierda:
low B.4 ; rueda derecha AVANZA
high B.5
low B.6 ; rueda izquierda PARADA
low B.7
return ; vuelve al "gosub"
- Volver a la lista de programas -
inicio:
irin [100],C.1,b1 ;durante 0,1s se espera seal del mando
;si no llega seal 'b1' no cambia
debug b1 ;para ver en b1 en el ordenador
;Movimientos bsicos: se realiza la accin hasta que llegue otra nueva
if b1=13 then gosub Avanza ;TECLA flecha arriba
if b1=22 then gosub Retrocede ;TECLA flecha abajo
if b1=17 then gosub Izquierda ;TECLA flecha izquierda
if b1=16 then gosub Derecha ;TECLA flecha derecha
if b1=23 then gosub Para ;TECLA debajo de flecha abajo
gosub Avanza
pause 3000
gosub Giro_cerrado_izquierda
pause 2000
gosub Avanza
pause 3000
gosub Giro_cerrado_izquierda
pause 2000
gosub Avanza
pause 3000
gosub Giro_cerrado_izquierda
pause 2000
b1=222
endif
if b1=2 then ;TECLA 3 - triangulo de 25cm lado hacia der.
gosub Giro_cerrado_derecha ;y al final se detiene
pause 1500
gosub Avanza
pause 4000
gosub Giro_cerrado_derecha
pause 2000
gosub Avanza
pause 4000
gosub Giro_cerrado_derecha
pause 2000
gosub Avanza
pause 4000
b1=222
endif
goto inicio
Retrocede:
high B.4 ; rueda derecha RETROCEDE
low B.5
high B.6 ; rueda izquierda RETROCEDE
low B.7
return ; vuelve al "gosub"
Para:
low B.4 ; rueda derecha PARADA
low B.5
low B.6 ; rueda izquierda PARADA
low B.7
return ; vuelve al "gosub"
Derecha:
low B.4 ; rueda derecha PARADA
low B.5
low B.6 ; rueda izquierda AVANZA
high B.7
return ; vuelve al "gosub"
Izquierda:
low B.4 ; rueda derecha AVANZA
high B.5
low B.6 ; rueda izquierda PARADA
low B.7
return ; vuelve al "gosub"
do
;Envo del comando AT por salida C.1
serout C.1, T9600_8, ("AT+VERSION")
pause 200
;NOTA FINAL
;Si utilizamos el comando: serout C.1, T9600_8, ("AT")
;la lectura de datos nos devolvera "OK"
do while b0=0
;Envo del comando AT por salida C.1
serout C.1, T9600_8, ("AT+NAMEnombrehasta20caracte")
pause 200
;NOTAS FINALES
;Este programa finalizar cuando se devuelva el "OK setname".
;Si buscamos ahora el mdulo Bluetooth desde una tableta o mvil Android,
;debera aparecer en la misma el nuevo nombre (por defecto es HC-06).
;De forma similar, con el correspondiente comando AT
;se podra cambiar tambin la contrasea o la velocidad de transmisin.
girar_izquierda:
low B.4 ;rueda izquierda se detiene
low B.5
girar_derecha:
high B.4 ;rueda izquierda avanza
low B.5
avanzar:
high B.4 ;rueda izquierda avanza
low B.5
retroceder:
low B.4 ;rueda izquierda retrocede
high B.5