Utilizando o módulo controle de video game para micro:bit
Deixe um comentárioNesta aula, vamos explorar o módulo controle de video game para micro:bit, um acessório que transforma sua placa em um console portátil. Ele conta com sete botões, um joystick analógico de dois eixos e até mesmo um buzzer para sons e efeitos, além de suporte para bateria recarregável.
O que é o módulo controle de video game para micro:bit?
O módulo controle de video game para micro:bit transforma sua placa em um console portátil, permitindo criar jogos interativos de forma prática e divertida. Ele foi desenvolvido para estudantes, makers e entusiastas de tecnologia que querem unir programação, lógica e entretenimento em projetos educativos.

Principais recursos do módulo controle de video game:
- 7 botões: Quatro principais no lado direito e dois acima, além de um botão no joystick.
- Joystick analógico de dois eixos: Permite movimentação precisa em qualquer direção, além de contar com um botão press.
- Buzzer integrado: Para efeitos sonoros ou música dentro dos jogos.
- Suporte para bateria 14500: Alimentação portátil, com circuito de carga e indicador de nível.
- Conector micro:bit: Mantém a matriz de LEDs voltada para o usuário, funcionando como display para jogos simples.
Dica: Mesmo com a matriz de LEDs limitada, é possível criar jogos como Pong, Snake ou outros mini games educativos.
Pinos do módulo controle de video game para micro:bit
Conhecer os pinos do módulo é essencial para programar corretamente os botões, joystick e buzzer da micro:bit. A tabela abaixo resume cada pino e sua função:

| Pino | Função | Descrição |
| A (Pin5) | Button A | Botão principal, usado em jogos para ações como pular ou atirar. |
| B (Pin11) | Button B | Segundo botão principal, pode ser programado para ações adicionais. |
| C (Pin15) | Button C | Terceiro botão, geralmente usado em combinação com outros botões. |
| D (Pin14) | Button D | Quarto botão, permite mais opções de controle. |
| E (Pin13) | Button E | Botão lateral superior esquerdo, usado para funções extras. |
| F (Pin12) | Button F | Botão lateral superior direito, funções extras ou secundárias. |
| X (Pin1) | Joystick eixo X | Retorna posição horizontal do joystick (esquerda/direita). |
| Y (Pin2) | Joystick eixo Y | Retorna posição vertical do joystick (cima/baixo). |
| P (Pin8) | Joystick Press | Botão integrado no joystick, pode ser programado para ação extra. |
| Buzzer (Pin0) | Buzzer | Emite sons e efeitos sonoros dentro do jogo. |
Dicas práticas:
- Use os pinos correspondentes no MakeCode ou MicroPython para monitorar botões e joystick.
- O joystick analógico retorna valores contínuos para X e Y, permitindo movimentos suaves.
- O buzzer pode ser programado para tocar notas ou melodias usando os blocos de música do MakeCode ou funções MicroPython.
- Sempre verifique se a micro:bit está bem encaixada no módulo antes de testar os pinos.
Programando o módulo controle de video game no MakeCode
O MakeCode é a plataforma oficial para programação visual da micro:bit, permitindo criar jogos interativos de forma intuitiva usando blocos, Typescript ou MicroPython.
- Abra o MakeCode.
- Clique em Projects → New Project e dê um nome ao projeto.
- Para adicionar o módulo, clique em Advanced → Add Package, e cole o URL: https://github.com/waveshare/JoyStick
- O pacote WSJoyStick será adicionado e os blocos específicos do módulo ficarão disponíveis no editor.
Exemplo prático: criando o jogo Snake na micro:bit
Neste exemplo, vamos criar um mini game Snake usando o joystick, botões e display da micro:bit.
Código completo (MicroPython):
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 |
rom microbit import * from random import randrange DIR = { 'NONE': 0, 'U': 1, 'D': 2, 'L': 3, 'R': 4, 'U_L': 5, 'U_R': 6, 'D_L': 7, 'D_R': 8 } class JOYSTICK(): def __init__(self): self.Read_X = pin1.read_analog() self.Read_Y = pin2.read_analog() def Listen_Dir(self, Dir): Get_Rocker = DIR['NONE'] New_X = pin1.read_analog() New_Y = pin2.read_analog() Dx = abs(self.Read_X - New_X) Dy = abs(self.Read_Y - New_Y) Right = New_X - self.Read_X Left = self.Read_X - New_X Up = New_Y - self.Read_Y Down = self.Read_Y - New_Y Precision = 256 if Right > Precision and Dy < Precision: Get_Rocker = DIR['R'] elif Left > Precision and Dy < Precision: Get_Rocker = DIR['L'] elif Up > Precision and Dx < Precision: Get_Rocker = DIR['U'] elif Down > Precision and Dx < Precision: Get_Rocker = DIR['D'] elif Right > Precision and Up > Precision: Get_Rocker = DIR['U_R'] elif Right > Precision and Down > Precision: Get_Rocker = DIR['D_R'] elif Left > Precision and Up > Precision: Get_Rocker = DIR['U_L'] elif Left > Precision and Down > Precision: Get_Rocker = DIR['D_L'] else: Get_Rocker = DIR['NONE'] return Dir == Get_Rocker class Snake(): def __init__(self): self.length = 2 self.direction = "down" self.head = (2, 2) self.tail = [] def move(self): self.tail.append(self.head) if len(self.tail) > self.length - 1: self.tail = self.tail[-(self.length - 1):] if self.direction == "left": self.head = ((self.head[0] - 1) % 5, self.head[1]) elif self.direction == "right": self.head = ((self.head[0] + 1) % 5, self.head[1]) elif self.direction == "up": self.head = (self.head[0], (self.head[1] - 1) % 5) elif self.direction == "down": self.head = (self.head[0], (self.head[1] + 1) % 5) def grow(self): self.length += 1 def collides_with(self, position): return position == self.head or position in self.tail def draw(self): display.set_pixel(self.head[0], self.head[1], 9) brightness = 8 for dot in reversed(self.tail): display.set_pixel(dot[0], dot[1], brightness) brightness = max(brightness - 1, 5) class Fruit(): def __init__(self): self.position = (randrange(0, 5), randrange(0, 5)) def draw(self): display.set_pixel(self.position[0], self.position[1], 9) class Game(): def __init__(self): self.player = Snake() self.place_fruit() self.joystick = JOYSTICK() def place_fruit(self): while True: self.fruit = Fruit() if not self.player.collides_with(self.fruit.position): break def handle_input(self): self.dir = self.player.direction if self.joystick.Listen_Dir(DIR['U']): self.dir = "up" elif self.joystick.Listen_Dir(DIR['D']): self.dir = "down" elif self.joystick.Listen_Dir(DIR['L']): self.dir = "left" elif self.joystick.Listen_Dir(DIR['R']): self.dir = "right" self.player.direction = self.dir def update(self): self.player.move() if self.player.head in self.player.tail: self.game_over() elif self.player.head == self.fruit.position: self.player.grow() if self.player.length < 5*5: self.place_fruit() else: self.game_over() def score(self): return self.player.length - 2 def game_over(self): display.scroll("Score: %s" % self.score()) reset() def draw(self): display.clear() self.player.draw() self.fruit.draw() game = Game() while True: game.handle_input() game.update() game.draw() sleep(500) |
Explicando o exemplo:
- Classe JOYSTICK: Monitora a posição do joystick em 8 direções (U, D, L, R e diagonais).
- Classe Snake: Controla o movimento da cobrinha, crescimento e colisões.
- Classe Fruit: Define a fruta que a cobrinha precisa comer.
- Classe Game: Integra joystick, cobrinha e fruta, atualizando a tela e verificando pontuação ou fim de jogo.
- Loop principal: Lê os movimentos do joystick, atualiza o jogo e redesenha o display a cada 500ms.
Recursos e links úteis
Para facilitar o aprendizado e a exploração do módulo controle de video game para micro:bit, reunimos alguns materiais de referência, códigos de demonstração e documentação técnica. Estes recursos ajudam tanto iniciantes quanto usuários avançados a aprofundar seus projetos.