Diferencia entre revisiones de «Taller-skybot:Sesión4:Programación Skybot:Ejemplos»

De WikiRobotics
Saltar a: navegación, buscar
(<font color="#0000FF">Lectura de los 4 sensores</font>)
(Ejemplos sueltos)
Línea 36: Línea 36:
 
| Prueba de los 4 sensores. Se lee su estado y se envía al puerto A. Si se conectan 4 leds externos se podrá ver en ellos el estado de los sensores.
 
| Prueba de los 4 sensores. Se lee su estado y se envía al puerto A. Si se conectan 4 leds externos se podrá ver en ellos el estado de los sensores.
 
|---------
 
|---------
| []
+
| [http://svn.iearobotics.com/taller_skybot/trunk/prog/ejemplos/motores-sensor3.c motores-sensor3.c]
| []
+
| [http://www.iearobotics.com/downloads/taller-skybot/ejemplos/motores-sensor3.hex motores-sensor3.hex]
|  
+
| Prueba de motores y sensores. El robot avanza cuando le sensor 3 lee negro. Se para si lee blanco
 
|---------
 
|---------
 
| []
 
| []

Revisión del 03:46 25 jun 2010

Introducción

El objetivo de este capítulo es mostrar ejemplos de programas en C para manejar diferentes recursos del robot. Editando, compilando, probando y modificando los ejemplos se aprenderá muy rápidamente a manejar el robot y en poco tiempo se podrá dar rienda suelta a la imaginación para hacer otras cosas... ¡Qué comience la fiesta!

Descargas

Todos los ejemplos

Ejemplos sueltos

ledon.c ledon.hex Encender el led de la Skypic
ledp.c ledp.hex Hacer que el led de la Skypic parpadee
pulsador-led.c pulsador-led.hex Mostrar por el led el valor negado del pulsador de pruebas
motor-on.c motor-on.hex Activar los motores del Skybot para que avance
sensor4.c sensor4.hex Ejemplo de lectura del sensor 4. Su estado se refleja en el led. Si lee blanco el led se apaga, si lee negro se enciente.
sensores.c sensores.hex Prueba de los 4 sensores. Se lee su estado y se envía al puerto A. Si se conectan 4 leds externos se podrá ver en ellos el estado de los sensores.
motores-sensor3.c motores-sensor3.hex Prueba de motores y sensores. El robot avanza cuando le sensor 3 lee negro. Se para si lee blanco
[] []
[] []
[] []
[] []
[] []
[] []
[] []

Repositorio

Ejemplos básicos

Encender el led de la Skypic

  • Fichero: ledon.c
  • Descripción: Encender el led de la Skypic
  • Explicación:

Este es el ejemplo "hola mundo" pero con modificaciones para hacerlo más legible.

La directiva #define nos permite definir constantes. En este ejemplo se definen las constantes ENTRADA, LED y ON:

#define ENTRADA 1
#define LED     RB1
#define ON      1

Esto nos permite poder usar estas nuevas constantes en vez de sus valores. Ahora ya no nos tenemos que acordar de que el led de la skypic está en el bit RB1 ni de que para encenderlo hay que escribir un 1. Ahora simplemente haciendo:

LED = ON;

Se encenderá el led de la Skypic

Led parpadeante

  • Fichero: ledp.c
  • Descripción: Este ejemplo hace parpadear el led de la Skypic
  • Explicación:

En la función main() nos encontramos con:

LED=LED^1;

Esta línea cambia de estado el LED. Si estaba encendido lo apaga y vice-versa. El símbolo ^ es el operador XOR (O exclusivo).

pausa(RETRASO);    //-- Pausa

A continuación se llama a la función pausa() que la hemos definido nosotros para hacer una pausa. El microcontrolador ejecuta instrucciones muy rápido. Si cambiamos de estado el led muy rápidamente, nuestro ojo no lo apreciará y dará la impresión de que el led está siempre encendido. Por ello hay que introducir una pausa. En la función de pausa se decrementa una variable hasta llegar a 0. Cambiando el parámetro que se le paso conseguimos una pausa mayor o menor.

  • Ejercicios para practicar:
EJERCICIO 1: Modificar el valor de la constante RETRASO. Poniendo diferentes valores. Por ejemplo 0x8000, 0x4000... ¿Qué sucede?
EJERCICIO 2: Eliminar la llamada a la función pausa(). ¿Qué sucede?

Leyendo el pulsador de pruebas

  • Fichero: pulsador-led.c
  • Descripción: Mostrar por el LED de la skypic el estado del pulsador de pruebas
  • Explicación:

El pulsador de pruebas de la Skypic se encuentra en el bit RB1. Para hacer el programa más legible se define la constante PULSADOR:

 #define PULSADOR  RB0

El bucle principal simplemente lee el valor del PULSADOR y saca por el led el estado contrario: si esta apretado se enciende y se apaga en caso contrario:

LED = PULSADOR^1;

Ejemplos de motores y sensores

Activar los motores para que el robot avance

  • Fichero: motor-on.c
  • Descripción: Activar los motores del Skybot para que avance
  • Explicación:

Ejemplo de cómo activar los motores para que el Skybot se desplace hacia adelante. Esto se consigue enviando valores por el puerto B

Para hacer la programación más sencilla, se ha definido la constante SKYBOT:

#define SKYBOT PORTB

y las siguientes constantes contienen los valores necesarios para que el robot realice el resto de movimiento: Adelante, atrás, izquierda y derecha. Están definidos en hexadecimal por comodidad

 #define   AVANZA     0x1C
 #define   ATRAS      0x16
 #define   IZQUIERDA  0x1E
 #define   DERECHA    0x14
 #define   STOP       0x00

Para hacer que el robot avance bastará con ejecutar el siguiente comando:

SKYBOT=AVANZA;
  • Ejercicios para practicar:
EJERCICIO 3: Modificar el programa para que el Skybot gire, se pare o vaya hacia atrás.

Lectura del sensor 4

  • Fichero: sensor4.c
  • Descripción: Ejemplo de lectura del sensor 4. Su estado se refleja en el led. Si lee blanco el led se apaga, si lee negro se enciente.
  • Explicación:

Los sensores están conectados en los bits RB7, RB6, RB5 y RB0 del puerto B. Utilizaremos las siguientes constantes para usarlos:

#define   SENSOR1  RB0
#define   SENSOR2  RB5
#define   SENSOR3  RB6
#define   SENSOR4  RB7

Definimos la constante SENSOR para indicar el sensor que utilizaremos en el ejemplo, que en este caso será el 4:

#define   SENSOR SENSOR4

El programa principal es muy sencilla. Sólo hay que enviar al LED la lectura del sensor mediante al instrucción:

LED = SENSOR;
  • Ejercicios para practicar:
EJERCICIO 4: Modificar el programa para utilizar el sensor 3 en vez del 4

Lectura de los 4 sensores

  • Fichero: sensores.c
  • Descripción: Prueba de los 4 sensores. Se lee su estado y se envía al puerto A.
  • Explicación:

Este ejemplo es similar al sensor4 pero en este caso se leen todos los sensores y su estado se muestra por el PUERTO A. Como la Skypic tiene sólo un led, para poder probar este programa habrá que conectar 4 leds externos o bien utilizar alguna placa que ya los lleve, como por ejemplo la Freeleds.

Los bits del puerto A se configuran para salida:

 TRISA=0;

El puerto A puede funcionar como digital o analógico. En este ejemplo lo queremos usar como digital. Se configura con la siguiente instrucción:

 ADCON1=0x06;

El bucle principal muestra el estado de los sensores en los bits del puerto A usando las instrucciones:

RA0 = SENSOR1;
RA1 = SENSOR2;
RA2 = SENSOR3;
RA3 = SENSOR4;

  • Fichero: [ ]
  • Descripción:
  • Explicación:

Temporización

  • Fichero: [ ]
  • Descripción:
  • Explicación:

Puerto serie en el PIC

Mezclando de todo un poco

Ejemplos de comportamientos sencillos

Enlaces

Noticias