release 1 leonardo muñoz

26
wiiproject Documentation Release 1 Leonardo Muñoz September 20, 2015

Upload: others

Post on 19-Jun-2022

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Release 1 Leonardo Muñoz

wiiproject DocumentationRelease 1

Leonardo Muñoz

September 20, 2015

Page 2: Release 1 Leonardo Muñoz
Page 3: Release 1 Leonardo Muñoz

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

Page 4: Release 1 Leonardo Muñoz

ii

Page 5: Release 1 Leonardo Muñoz

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

Page 6: Release 1 Leonardo Muñoz

wiiproject Documentation, Release 1

2 Contents

Page 7: Release 1 Leonardo Muñoz

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

Page 8: Release 1 Leonardo Muñoz

wiiproject Documentation, Release 1

4 Chapter 1. WiiProject

Page 9: Release 1 Leonardo Muñoz

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

Page 10: Release 1 Leonardo Muñoz

wiiproject Documentation, Release 1

6 Chapter 2. Snake

Page 11: Release 1 Leonardo Muñoz

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

Page 12: Release 1 Leonardo Muñoz

wiiproject Documentation, Release 1

8 Chapter 3. Food

Page 13: Release 1 Leonardo Muñoz

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

Page 14: Release 1 Leonardo Muñoz

wiiproject Documentation, Release 1

10 Chapter 4. WiiNunchuck

Page 15: Release 1 Leonardo Muñoz

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

Page 16: Release 1 Leonardo Muñoz

wiiproject Documentation, Release 1

12 Chapter 5. WiiData

Page 17: Release 1 Leonardo Muñoz

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

Page 18: Release 1 Leonardo Muñoz

wiiproject Documentation, Release 1

14 Chapter 6. Display

Page 19: Release 1 Leonardo Muñoz

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

Page 20: Release 1 Leonardo Muñoz

wiiproject Documentation, Release 1

16 Chapter 7. Point

Page 21: Release 1 Leonardo Muñoz

CHAPTER 8

Indices and tables

• genindex

• modindex

• search

17

Page 22: Release 1 Leonardo Muñoz

wiiproject Documentation, Release 1

18 Chapter 8. Indices and tables

Page 23: Release 1 Leonardo Muñoz

Python Module Index

dDisplay, 13

fFood, 7

pPoint, 15

sSnake, 5

wWiiData, 11WiiNunchuck, 9WiiProject, 3

19

Page 24: Release 1 Leonardo Muñoz

wiiproject Documentation, Release 1

20 Python Module Index

Page 25: Release 1 Leonardo Muñoz

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

Page 26: Release 1 Leonardo Muñoz

wiiproject Documentation, Release 1

WiiData (module), 11WiiNunchuck (class in WiiNunchuck), 9WiiNunchuck (module), 9WiiProject (module), 3

22 Index