Comandos frecuentes


1. COMENTARIOS

Si queremos escribir comentarios para aclarar partes del programa deberemos escribirlo del siguiente modo:

2. CONTROL SIMULTÁNEO DE SALIDAS "let pins"

La instrucción let pins, let dirsB y let pinsC permite controlar todas las salidas en un solo paso.

 La forma de hacerlo es:

 a. Utilizar el comando output para indicar que la conexión queremos que sea una salida, ya pueden ser reversibles y utilizarse como entradas o salidas en un momento dado.

  1. Emplearemos let pins =%xxxxxxxx, siendo x las salidas desde B.7 a B.0.
  2. Las conexiones se hacen a V+ y la otra conexión a la salida que corresponda.
  3. Tener en cuenta que las salidas desde B.4 a B.7 funcionan al contrario, es decir, cuando indicamos "1" están desconectadas y viceversa.
Ejemplo: let pins=00001
 Otra forma de hacerlo en vez de emplear output, es emplear los comandos let dirsB o let dirsC.

Ejemplo: let dirsB=0000001 (configura las conexiones con 0 como entradas y 1 como salida)


3. CONECTAR O DESCONECTAR SALIDAS "high-low"

Mediante los comandos "high" (nivel alto 1) o "low" (nivel bajo 0) podemos activar o desactivar las salidas B.0-B.7. 
Así si indicamos high y el elemento actuador está conectado entre positivo y la salida correspondiente, lo que haremos será activar dicha conexión siempre y cuando sean las conexiones B.0-B.3, ya que las conexiones B.4-B.7 funcionan justo al contrario si hemos incorporado en la placa el chip L293D que sirve para invertir el sentido de giro de motores y por lo tanto en cualquiera de estas, el comando high está indicando que la conexión está apagada o desconectada.
Del mismo modo, lo dicho sirve para el comando low, es decir, desconecta la salida desde B.0-B.3 y la conecta si estamos desde B.4-B.7. Esto es así si conectamos entre positivo y la correspondiente salida.

4. LEER ENTRADA ANALÓGICA Y VER EN PANTALLA "readadc" y "debug"

En muchas ocasiones, cuando estamos programando, nos interesa leer el valor de una entrada y ver el valor de una variable en pantalla para saber cómo se está desarrollando nuestra programación.
Para ello utilizamos el comando  readadc y debug seguido de la variable correspondiente que suele ser desde b0 a b12.

En este ejemplo, leemos el valor de la entrada analógica C.1 y le asignamos una variable b0 que posteriormente leemos en pantalla con el comando debug.
Con el comando debug deberemos especificar las variables que queremos mostrar en pantalla, siempre después de que tengamos el valor calculado.
al simular puede haber algún problema con el retraso con el que refresca los valores el software.

 
5. ESPERAS "pause"
Es una instrucción que se emplea para parar durante un tiempo en milisegundos, para ello se emplea el comando pause.

En este ejemplo activamos la salida B.4 durante 2 segundos y tras esto la desconectamos.




6. ETIQUETAS "symbol"

Una etiqueta podríamos decir que es un cambio de variable que nos permita entender mejor lo que estamos programando. Esto se hace mediante el comando symbol.

Dicho de otro modo, podemos tener una entrada cualquiera del tipo Pin5 que vaya asociada a la conexión o desconexión de un pulsador, por lo tanto en vez de emplear esta entrada, utilizamos un nombre que le asignemos nosotros. También puede ser una variable del tipo b0 o una salida del tipo B.3.

En este ejemplo hemos cambiado esa entrada pin5, la variable b1 y la salida B.3 por los nombres que ahí aparecen.

 
7. PROCEDIMIENTO O SUBRUTINA
Un procedimiento o subrutina consiste en crear un subprograma que puede sernos de utilidad a lo largo del programa ya que se utiliza en muchas ocasiones o en varias partes del mismo. Por ello lo podemos “llamar” cuando sea necesario.

La estructura suele consistir  en realizar un proceso cualquiera y “saltar” a otra parte del programa.

En el siguiente ejemplo hemos creado la subrutina "Posicion:" y cuando acaba vuelve a inicio.


8. IR A OTRA PARTE DEL PROGRAMA "goto"
 Cuando necesitamos ir hacia otra parte del código del programa se utiliza la instrucción goto.

 

También se puede emplear esta instrucción cuando se cumpla una condición de entrada. En este caso si se cumple una condición va a una parte del programa y si no es así va a otra

 
9. VARIABLES "b o w"

Las variables son espacios de memoria del programa que permiten almacenarla en el programa.

  • En estos espacios de memoria se puede meter un número que va desde el 0 al 255.
  • Sus nombres por defecto van desde el b0 al b13. Tenemos, por tanto 14 variables independientes.
  • También hay otras variables llamadas w0 al w13 que admiten valores superiores al 255, concretamente admiten 4 cifras, por lo tanto hasta el 65335.
En este ejemplo guardamos el valor de la entrada analógica C.0 en una variable llamada b0.

10. REPETICIÓN DE UN PROCESO UN Nº DE VECES "for-next"

 Un bucle for permite repetir una instrucción un número de veces.
 
La sintaxis es : for b1=1 to xx (nº veces)…--código--..next b1., siendo b1 la variable que incrementa.

En este ejemplo se repite 10 veces la conexión de un zumbador conectado a la salida b.4 con una frecuencia de 100 Hz y una duración de 60 ms.
 
El contador es una variable (puede ser b0, b1,....b13), el valor inicial será el valor que tome la variable la primera vez que se hace el bucle y el valor final será el valor que tome esa variable la última vez que se ejecute el bucle.

Cuando se llega a next, el contador se incrementa en 1 y se vuelve a comenzar en la instrucción 1 del bucle. Por tanto, las instrucciones que hay dentro del bucle se repetirán valor final menos valor inicial veces.


11. BIFURCACIÓN CONDICIONAL "if"

Una de las estructuras más importantes es la bifurcación condicional. Permite que el programa haga unas cosas si se cumplen unas condiciones y otras en caso contrario.

Para ello se emplea el comando if. En estos ejemplos se muestra el empleo de este comando:








12. SELECCIONAR CASOS DIFERENTES "select case"

Esta instrucción se llama select case y sirve para realizar diferentes cosas dependiendo del valor que tenga una variable.

Es un tipo de bifurcación muy potente que nos permite abrir la línea del programa en muchos caminos. Es parecido a un if, pero más potente.

La sintaxis es del tipo Select (variable) y posteriormente se proponen los casos de la forma case a, case b,…..end select.


13. VARIAR LA VELOCIDAD DE UN MOTOR "pwmout"


Para variar la velocidad de un motor, emplearemos el comando pwmout. El programa nos ofrece los valores que debemos poner en el código según el porcentaje de velocidad que queramos. Los pasos son los siguientes:


Conectamos el motor a V+ y la salida (B.3 o B.6). Nos metemos en:
Picaxe--wizard--Pwmout.
Para parar el motor tras usar el comando, emplearemos pwmout (salida), off.
Este comando es incompatible simultáneamente con servo.

 


14. CONECTARNOS CON UNA PANTALLA LCD "serout"


Para comunicarnos con una pantalla LCD, emplearemos el comando serout.


  Los comando más habituales son:
 

15. INCREMENTAR EL VALOR DE UNA VARIABLE "let"

Para incrementar el valor de una variable en un valor cualquiera, para realizar, por ejemplo, un contador, se emplea el comando let.

Así, en este ejemplo, si se cumple una condición, la variable b1 que inicialmente tiene un valor de 0, se incrementa de valor en 1 unidad cada vez que pasa por el procedimiento llamado “contador”.

También podemos utilizar variables "w" que permiten contar hasta el 9999.


16. CONTAR EL NÚMERO DE PULSOS "count"

Existe un comando que permite contar el número de cambios de estado de “high” a “low”, o lo que es lo mismo, el número de pulsos en un tiempo determinado, asignando ese valor a una variable de escritura del tipo “w”. Esto es posible con el comando count.

En este ejemplo leemos el número de pulsos que nos devuelve la entrada C.2 durante 3 segundos y lo almacena en la variable w1 que muestra en pantalla.



17. LEER LA TEMPERATURA "readtemp"

 Existe un comando que nos puede mostrar la temperatura medida mediante un sensor específico para este tipo de casos. Para ello hay que emplear el comando readtemp.
El proceso es similar al empleado cuando queremos leer cualquier otra magnitud que se mida con un sensor analógico como el nivel de luz, la distancia,…



18. LEER LA SEÑAL DE UN MANDO A DISTANCIA "irin"

Existe un comando que se emplea para recibir la señal enviada por un mando a distancia compatible con picaxe. Para ello hay que emplear el comando irin.

El proceso es similar al empleado cuando queremos leer cualquier otra magnitud que se mida con un sensor analógico como el nivel de luz, la distancia, temperatura…

En este comando hay que especificar el tiempo de refresco de la señal, la entrada donde se ha conectado el sensor y la variable donde se almacena el valor leído.

  




19. ACCIONAR UN SERVO "servo"

En ocasiones se emplean servos por ser muy útiles para realizar giros muy precisos. En este caso se emplea el comando servo y servopos.

El comando servo se emplea para iniciar la activación del servo.
Posteriormente se recomienda usar el comando servopos para posicionar el servo en el punto requerido.
Para desactivar el comando, si no se va a emplear más, se recomienda servopos x, off.
El funcionamiento del comando es muy simple ya que tiene 2 posiciones extremas. Una llamada “75” y la otra “225”. Entre ellas podemos seleccionar el ángulo de giro que nos interesa.

Hay que conectarlo a las salidas B.4-B.7. De las B.0-B.3 no funciona debido a que pasa a través de los transistores de potencia de la placa, a no ser que se conecte directamente a los pines de la parte central de la placa. En ese caso funcionan todos porque es a la salida directa del chip.


20. GENERAR UN SONIDO "sound"

En ocasiones se emplean zumbadores por ser muy útiles para producir sonidos. En este caso se emplea el comando sound.

El funcionamiento del comando consiste en definir la salida empleada, la frecuencia del sonido y su duración. sound B.x (frecuencia, tiempo ms).

 En este ejemplo va a sonar 10 veces un sonido de frecuencia 100 Hz durante 60ms.



21. REALIZAR UN PROCESO MIENTRAS NO CAMBIE ALGO "Do-Loop while"

Este proceso permite repetir algo (un subproceso) mientras se cumplan unas condiciones. Si dejan de cumplirse, seguirá leyendo el código que siga tras esto. Para ello el comando es: Do –código- loop while (condición).

En este ejemplo, se va conectar la salida B.6 mientras la entrada pin5 esté activada. En el momento que la entrada pin5 no esté activada, seguirá leyendo el código que haya debajo de este como ocurre normalmente.

 

22. REALIZAR UN PROCESO HASTA QUE CAMBIE ALGO "Do-Loop until"

Este proceso permite repetir algo (un subproceso) mientras se cumplan unas condiciones. Si dejan de cumplirse seguirá leyendo el código que siga tras esto. Para ello el comando es: Do –código- loop until (condición).

En este ejemplo, se va incrementando el valor de una variable y eso sirve para posicionar un servo. Cuando el valor de la variable sea mayor o igual a 150, se irá a otro subproceso.






23. CONVERTIR SALIDAS EN ENTRADAS "input"

En ocasiones es necesario cambiar una salida por entrada debido al tipo de automatización que realizemos.
Para ello debemos emplear el comando input seguido de la salida que queremos cambiar a entrada.
La salida que hemos convertido en entrada tenemos que sacarla directamente de los pines "machos" de la parte central de la placa, ya que si los obtenemos directamente de las salidas no funcionará debido a que unas son amplificadas y otras pasan por el L293D (inversor).

Ejemplo:



24. RECIBIR Y EMITIR PULSOS "pulsin y pulsout"

Se emplea en sensores de ultrasonidos como el HC-SR04, este utiliza el sonar para determinar la distancia a un objeto. Ofrece una precisión excelente y lecturas estables. Su funcionamiento no se ve afectado por la luz solar o materiales oscuros.

Conexión a la placa Picaxe


La conexión a la placa Picaxe es muy simple. Sólo es necesario:

  • Vcc: Positivo de la placa. 5V
  • GND: Negativo de la placa. 0V
  • Trigger: necesitamos una conexión que sea reversible (Input y Output) y analógica. En este caso hemos tomado C.1.
  • Echo: Está conectada indirectamente a través de la resistencia de 10KOhm.
HC-SR04 con placa Picaxe

Para programar este sensor con el chip Picaxe 18M2+, lo que hay que hacer es básicamente:

  1. Cambiar la frecuencia a 8MHz. (La frecuencia habitual de Picaxe es 4MHz).
  2. Enviar un pulso de 2ms mediante pulsout (Trigger).
  3. Recibir el pulso durante 1ms (Echo) y almacenar el valor capturado en una variable w0.
  4. Operar para transformar ese valor en la distancia al objeto en cm.
  5. Visualizarlo en pantalla, si fuera necesario.


25. SONAR CANCIÓN "PLAY"
El comando se emplea con el siguiente formato:
PLAY pin, tono
Pin: Es la salida donde está conectado el zumbador.
Tono: Es una variable (0-3) que especifica el tono que queremos hacer sonar.
0 - Happy Birthday
1 - Jingle Bells
2 - Silent Night
3 - Rudolph the Red Nosed Reindeer
26. TAREAS O PROCESOS EN PARALELO "start"
El sistema Picaxe permite programar realizando tareas que se realicen de forma simultánea, para ello se emplea el comando "start".

Así, lo único que debemos hacer es utilizar este comando añadiendo los números 0, 1, 2... sucesivamente hasta 7, que son las tareas que puede realizar al mismo tiempo.

En este ejemplo va a controlar simultáneamente 2 led conectados a las salidas B.0 y B.1, cada uno con una frecuencia de parpadeo diferente.

Tareas en paralelo en Picaxe

27. MÓDULO BLUETOOTH CON SMARTPHONE "serin"
 La comunicación con un módulo Bluetooth para recibir la información e introducirla en la placa Picaxe a través de un Smartphone se realiza a través del comando "serin" y habitualmente cambiando la frecuencia a 8MHz.


El código requerido es:


setfreq m8 'Cambiamos la frecuencia a 8MHz


inicio:
serin C.0, T9600_8, b1 'recibimos en C.0 el dato y lo almacenamos en b0
pause 50
debug b0
goto inicio


28. CONSTANTES.

Las constantes declaradas pueden ser de cuatro tipos: decimal, hexadecimal, binario y ASCII.Los números decimales se escriben directamente sin ningún prefijo.Los números hexadecimales se preceden del símbolo dólar ($).Los números binarios de preceden del símbolo tanto por ciento (%).Los valores ASCII se colocan tre comilla (“…”).

Ejemplos: 100 es el número 100 en decimal 
$64 es el número 64 en hexadecimal 
%01100110 ‘ número binario: 01100110
 “A”  es la letra “A” en código ASCII (65)
 “Hello” ‘ ”Hello” equivalente a “H”, “e”, “l”, “l”, “o”B1 = B0 ^ $AA ‘ operación XOR entre la variable B0 com AA en hex.


29. VARIABLES.


El sistema PICAXE da soporte a las siguientes variables:
  • Words: W0, W1, W2, W3, W4, W5, W6 (Valores:0-65335)
    • W0=B1:B0, W1=B3:B2, W2=B5:B4,... (Ej: W0=2317, B1=23 y B0=17)
  • Bytes: DIRS, PINS (solo PICAXE-08), INFRA, KEYVALUE
  • B0, B1, B2, B3, B4, B5, B6, B7, B8, B9, B10, B11, B12, B13 (Valores: 0-255)
  • Bits: PIN0, PIN1, PIN2, PIN3, PIN4, PIN5, PIN6, PIN7 (conjuntamente igual PINS)
  • BIT0, BIT1, BIT2, BIT3, BIT4, BIT4, BIT5, BIT6, BIT7 (conjuntamente igual B0)
  • BIT8, BIT9, BIT10, BIT11, BIT12, BIT13, BIT14, BIT15 (conjuntamente igual B1)
  • In/Out añade los pseudo nombres:
  • INPUT0, INPUT1, etc. puede usarse en lugar de PIN0, PIN1, tec.
  • OUTPUT0, OUTPUT1, etc. puede usarse en lugar de 0, 1, 2, etc.



2 comentarios:

  1. hay alguna manera de cambiar la velocidad de 9600 a 57600 cuando trabajamos con bluetooth? tengo un dispositivo que trabaja a esa velocidad y necesito saber si puedo hacer algo en la programación para utilizarlo, gracias

    ResponderEliminar
    Respuestas
    1. Hola: Con el chip 18M2+ se puede llegar hasta 32MHz con una velocidad desde 4800-38400. Le velocidad que tú necesitas está por encima pero puedes probar a ver que tal.
      Un saludo

      Eliminar

En este espacio puedes comentar la entrada publicada o hacer preguntas o sugerencias