Release 1 Leonardo Muñoz
Transcript of Release 1 Leonardo Muñoz
wiiproject DocumentationRelease 1
Leonardo Muñoz
September 20, 2015
Contents
1 WiiProject 3
2 Snake 5
3 Food 7
4 WiiNunchuck 9
5 WiiData 11
6 Display 13
7 Point 15
8 Indices and tables 17
Python Module Index 19
i
ii
wiiproject Documentation, Release 1
Juego de Snake para Raspberry Pi controlado por un control Wii Nunchuck.
El juego consiste en controlar una serpiente con el joystick del control para llevarla hacia la comida y hacer que crezca.Si la serpiente llegara a chocar consigo misma el juego termina.
Para poder utilizar el control Wii Nunchuck con la Raspberry Pi se debe configurar el puerto I2C, instalar los módulosde Python par su uso y habilitarlos para que sean cargados al inicial la Raspberry Pi. Todo esto se puede hacerutilizando el script configuracion.sh, o bien, por medio del comando make en la carpeta raíz. La instalación requierede permisos de administrador, por lo que es necesario ejecutar el script con permisos sudo.
Cualquier tema realcionado con este proyecto puede contactar con el autor: Leonardo Muñoz [email protected]
Para ver un video demostrativo de este proyecto ve a: http://bit.ly/1F4Kg6V
Puedes encontrar este proyecto en GitHub: https://github.com/leomunozr/wiiproject
Contents:
Contents 1
wiiproject Documentation, Release 1
2 Contents
CHAPTER 1
WiiProject
Programa principal Snake.
Para salir, presionar botón C del Wii Nunchuck.
class WiiProject.ProgramBases: object
TODO: Mejorar el tiempo de refresco de pantalla
__init__()Inicialización del juego.
change_direction()Interpreta la dirección del joystick para cambiar la dirección en la que avanza la serpiente.
check_collisions()Revisar si la cabeza de la serpiente colisionó con el resto del cuerpo o con comida
game_over(end_code)Controla cómo terminará el juego. Al perder, espera 3 seg y luego saldrá.
Args:
end_code: Un número entero negativo usado para saber por qué terminó el juego.
keep_playing = True
make_food()Mientras el juego siga activo, actualiza la posición del objeto de comida cada 3 seg.
read_control()Mientras el juego siga activo, lee el control de Wii y mueve la serpiente o termina el juego.
update_screen()Mientras el juego siga activo, refresca la pantalla con la posición de la serpiente y de la comida
update_snake()Mientras el juego siga activo, actualiza la posición de la serpiente moviéndola hacia adelante cada 0.2 segy verifica colisiones.
3
wiiproject Documentation, Release 1
4 Chapter 1. WiiProject
CHAPTER 2
Snake
class Snake.Snake(length)Bases: object
Clase para representar la serpiente
Controla el movimiento de la serpiente y la acción de comer para aumentar de tamaño.
Attributes: body: Arreglo de objetos Point para representar la posición del cuerpo. direction: String que indicala dirección del movimiento.
[UP | DOWN | RIGHT | LEFT]
__init__(length)Dibuja una serpiente de longitud length.
Args: length: número entero mayor a 0 y menor a 8.
direction = ‘RIGHT’
eat()Agrega un nuevo punto al final del cuerpo de la serpiente.
forward(direction)Calcula y regresa la nueva posición de la cabeza a partir de la dirección del movimiento.
Args: direction: string [UP | DOWN | RIGHT | LEFT]
Returns: Un objeto Point con las coordenadas resultantes de avanzar en el sentido de la dirección.
move(direction)Mueve un paso el cuerpo de la serpiente hacia la dirección que apunte.
Args: direction: string [UP | DOWN | RIGHT | LEFT]
Returns: String con el valor del sentido en el que se avanzó.
show()Muestra en pantalla las coordenadas de cada punto del cuerpo. (Usado para debug)
5
wiiproject Documentation, Release 1
6 Chapter 2. Snake
CHAPTER 3
Food
class Food.FoodBases: object
Clase para crear un objeto de comida.
Attributes: x: Posición horizontal de la comida en la matriz. y: Posición vertical de la comida en la matriz.
__init__()Crea comida en posición aleatoria Las coordenadas pueden variar de (0,0) a (7,7)
7
wiiproject Documentation, Release 1
8 Chapter 3. Food
CHAPTER 4
WiiNunchuck
class WiiNunchuck.WiiNunchuckBases: object
Clase para leer los sensores y botones del Wii Nunchuck
Inicializa y controla la lectura del Wii Nunchuck. Requiere del uso del puerto I2C, por lo que éste debió serpreviamente configurado ejecutando el script configuration.sh.
Attributes:
port_i2c: Número del puerto I2C. Para versiones de Raspberry Pi superiores a la versión de 512Mel número del puerto I2C es el 1.
dir_i2c: Dirección I2C del dispositivo Wii Nunchuck. Por default es 0x52.
__init__()Inicializa el Wii Nunchuck para que atienda solicitudes de lectura.
dir_i2c = 82
port_i2c = 1
read_data()Lee los valores de los sensores y botones del Wii Nunchuck. En caso de no encontrar el dispositivo en ladirección 0x52, arroja una excepción.
wii_init()Envía la secuencia de inicialización al Wii Nunchuck por I2C para que atienda solicitudes de lectura. Encaso de no encontrar el dispositivo en la dirección 0x52, arroja una excepción.
9
wiiproject Documentation, Release 1
10 Chapter 4. WiiNunchuck
CHAPTER 5
WiiData
class WiiData.WiiData(data)Bases: object
Clase envoltorio para los datos leídos del Wii Nunchuck
Envoltorio que representa los datos del Wii Nunchuck
Attributes
joystick_x Movimiento horizontal del joystick. Número entero de 0 a 255.
joystick_y Movimiento vertical del joystick. Número entero de 0 a 255.
button_c Botón C presionado. 0: no presionado, 1: presionado.
button_z Botón Z presionado. 0: no presionado, 1: presionado.
raw Datos en “crudo”. Arreglo de 6 valores: [ joystick_x, joystick_y, acc_x, acc_y,acc_z, buttons ]
(En la práctica, los valores del joystick en los límites nunca llegan a ser 0 ó 255.)
__init__(data)Inicializa las propiedades de la clase según una cadena de datos en “crudo”
Args:
data: Arreglo de datos en crudo: [ joystick_x, joystick_y, acc_x, acc_y, acc_z, buttons ]
button_c = None
button_z = None
joystick_x = None
joystick_y = None
show_data()Muestra en pantalla los valores de las propiedades. (Usada para debugging.)
show_raw_data()Muestra en pantalla el arreglo de los valores en “crudo”. (Usada para debugging.)
11
wiiproject Documentation, Release 1
12 Chapter 5. WiiData
CHAPTER 6
Display
Clase para controlar una matriz de leds de 8x8.
Controla la visualización de coordenadas (representadas por objetos Point) en una matriz de leds de 8x8. Implementaun registro de corrimientos 74HC595 para el control individual de cada led en la matriz. El registro de corrimientosA controla las columnas y el registro B controla los renglones. Ambos registros son controlados por 3 GPIO c/u en laRaspberry Pi. Éstos son: SER - A: Pin 11, B: Pin 12. SRCLK - A: Pin 13, B: Pin 16. RCLK - A: Pin15, B: Pin 18. Elregistro A tiene también: SRCLR - Pin 7.
class Display.DisplayBases: object
NUM_COLS = 8
NUM_ROWS = 8
__init__()Inicialización de los registros de salida en la Raspberry Pi.
clean_screen()Limpia la configuración de los GPIO de la Raspberry Pi.
matrix_driver(bits_matrix)Muestra en la matriz de leds el arreglo de bits.
Args:
bits_matrix: arreglo multidimensional de enteros 0 ó 1. El primer nivel del arreglo representa losrenglones de la matriz, y el segundo nivel el estado de los leds (on/off).
points_to_bits(array_points)Método que traduce las coordenadas de un objeto Punto a un arreglo de bits (estados on/off) para usar enla matriz de leds.
Args: array_points: arreglo de coordenadas representadas por un objeto Point.
Returns: Un arreglo de renglones correspondientes a cada renglón de leds en la matriz de leds, que a suvez es un arreglo de estados (0:off, 1:on) de cada led en el renglón.
show(array_points)Muestra en el display un arreglo de puntos.
Args: array_points: arreglo de coordenadas representadas por un objeto Point.
Display.wait_ns(nanoseconds)Pone en espera el hilo por los nanosegundos indicados.
Args: nanoseconds: número decimal positivo de nanosegundos a esperar
13
wiiproject Documentation, Release 1
14 Chapter 6. Display
CHAPTER 7
Point
class Point.Point(x, y)Bases: object
Clase para representar un punto en la matriz
Attributes: x: Coordenada horizontal del punto y: Coordenada vertical del punto
__init__(x, y)Crea un objeto Punto con coordenadas x y y.
Args: x: numero entero mayor a 0. y: numero entero mayor a 0.
15
wiiproject Documentation, Release 1
16 Chapter 7. Point
CHAPTER 8
Indices and tables
• genindex
• modindex
• search
17
wiiproject Documentation, Release 1
18 Chapter 8. Indices and tables
Python Module Index
dDisplay, 13
fFood, 7
pPoint, 15
sSnake, 5
wWiiData, 11WiiNunchuck, 9WiiProject, 3
19
wiiproject Documentation, Release 1
20 Python Module Index
Index
Symbols__init__() (Display.Display method), 13__init__() (Food.Food method), 7__init__() (Point.Point method), 15__init__() (Snake.Snake method), 5__init__() (WiiData.WiiData method), 11__init__() (WiiNunchuck.WiiNunchuck method), 9__init__() (WiiProject.Program method), 3
Bbutton_c (WiiData.WiiData attribute), 11button_z (WiiData.WiiData attribute), 11
Cchange_direction() (WiiProject.Program method), 3check_collisions() (WiiProject.Program method), 3clean_screen() (Display.Display method), 13
Ddir_i2c (WiiNunchuck.WiiNunchuck attribute), 9direction (Snake.Snake attribute), 5Display (class in Display), 13Display (module), 13
Eeat() (Snake.Snake method), 5
FFood (class in Food), 7Food (module), 7forward() (Snake.Snake method), 5
Ggame_over() (WiiProject.Program method), 3
Jjoystick_x (WiiData.WiiData attribute), 11joystick_y (WiiData.WiiData attribute), 11
Kkeep_playing (WiiProject.Program attribute), 3
Mmake_food() (WiiProject.Program method), 3matrix_driver() (Display.Display method), 13move() (Snake.Snake method), 5
NNUM_COLS (Display.Display attribute), 13NUM_ROWS (Display.Display attribute), 13
PPoint (class in Point), 15Point (module), 15points_to_bits() (Display.Display method), 13port_i2c (WiiNunchuck.WiiNunchuck attribute), 9Program (class in WiiProject), 3
Rread_control() (WiiProject.Program method), 3read_data() (WiiNunchuck.WiiNunchuck method), 9
Sshow() (Display.Display method), 13show() (Snake.Snake method), 5show_data() (WiiData.WiiData method), 11show_raw_data() (WiiData.WiiData method), 11Snake (class in Snake), 5Snake (module), 5
Uupdate_screen() (WiiProject.Program method), 3update_snake() (WiiProject.Program method), 3
Wwait_ns() (in module Display), 13wii_init() (WiiNunchuck.WiiNunchuck method), 9WiiData (class in WiiData), 11
21
wiiproject Documentation, Release 1
WiiData (module), 11WiiNunchuck (class in WiiNunchuck), 9WiiNunchuck (module), 9WiiProject (module), 3
22 Index