“Desenvolvendo jogos com Arduino” Leandro Ramos Leonardo Toledo Robson Machado
Agenda
10:00 – boas-vindas
10:30 – introdução a plataforma Arduino
11:30 – biblioteca Tvout e o jogo tic-tac-toe (jogo da velha) 12:30 – intervalo
13:30 – divisão dos grupos e atividades práticas 17:00 - encerramento
Arduino Day 2014
Este evento é uma celebração mundial dos primeiros 10 anos do Arduino.
Arduino
• Arduino é uma plataforma de hardware e software open source • Linguagem de programação compatível com C/C++ • Ambiente de desenvolvimento integrado 4 http://www.eaduino.com.brArduino
• Baixo custo
comparado a outras plataformas de
Microcontrolador
• Um microcontrolador é um computador em uma única pastilha.
• É programado para tarefas
específicas, diferentemente de um microprocessador de
propósito geral.
6
Shields
• Placas que ampliam e extendem as funcionalidades da placa base.
• http://www.shieldlist.org/
8
Ambiente de Desenvolvimento
• O ambiente de desenvolvimento Arduino contém um editor de texto com os recursos necessários para
escrever um programa, compilá-lo e transferí-lo para a placa Arduino.
• Os programas escritos para Arduino são chamados de
Ciclo de Desenvolvimento
10
“Hello World”
/*
Blink
Turns on an LED on for one second, then off for one second, repeatedly.
This example code is in the public domain. */
void setup() {
// initialize the digital pin as an output.
// Pin 13 has an LED connected on most Arduino boards pinMode(13, OUTPUT);
}
void loop() {
digitalWrite(13, HIGH); // set the LED on delay(1000); // wait for a second digitalWrite(13, LOW); // set the LED off delay(1000); // wait for a second }
TVout
• Biblioteca responsável por gerar sinais a partir de um microcontrolador Atmel AVR.
• Conexão extremamente simples: um cabo coaxial e dois resistores.
• Utiliza apenas dois pinos digitais e terra.
• Página do projeto: http://code.google.com/p/arduino-tvout/
TVout
– “Hello World”
#include <TVout.h> #include <fontALL.h> TVout TV; void setup() { TV.begin(PAL,120,96); TV.select_font(font6x8); TV.println("Hello World"); TV.println("Arduino Day 2014"); TV.delay(10000); TV.clear_screen(); TV.println("Fatec SCS - EADuino"); } void loop() { }Tic-Tac-Toe
– Jogo da Velha
• Um jogo com regras bem simples
• Um tabuleiro ou uma folha de papel com nove lacunas
• Cada jogador escolhe jogar (marcar) xis ou círculo (Noughts = O, Crosses = X)
• Ganha que conseguir marcar três xis ou três círculos em linha (horizontal, vertical ou diagonal)
Hardware
• Nove chaves tácteis, utilizando apenas um pino analógico.
Software - sketch inicial
1. Declara uma matriz unidimensional com 9 elementos
(tabuleiro)
2. Declara demais variáveis globais 3. Exibe mensagem de boas vindas
4. Verifica se é jogador 1 (X) ou jogador 2 (O) 5. Aguarda o pressionar de um botão
6. Verifica a qual posição no tabuleiro corresponde o
botão pressionado
7. Marca com X ou O a posição no tabuleiro 8. Verifica se há vencedor
9. Volta ao passo 4
Software - sketch inicial
char board[] = {
' ',' ',' ',' ',' ',' ',' ',' ',' '}; byte pinButton = 0;
byte button = 255;
Software - sketch inicial
void setup() { Serial.begin(9600); Welcome(); } http://www.eaduino.com.br 18Software - sketch inicial
void Welcome() {
Serial.println("+=========================+"); Serial.println("Tic-Tac-Toe");
Serial.println("EADuino - Arduino Day 2014");
Serial.println("+=========================+"); }
Software - sketch inicial
void loop() { int value;
if( player1 ) Serial.print("Player 1"); else Serial.print("Player 2"); Serial.print("\tWait..."); delay(2000); Serial.println("\tGo!"); while( button == 255 ) { http://www.eaduino.com.br 20
Software - sketch inicial
value = analogRead( pinButton );if( value >= 900 ) button = 6;
if( value >= 800 && value < 900 ) button = 7; if( value >= 700 && value < 800 ) button = 8; if( value >= 600 && value < 700 ) button = 3;
if( value >= 500 && value < 600 ) button = 4; if( value >= 400 && value < 500 ) button = 5; if( value >= 300 && value < 400 ) button = 0;
if( value >= 200 && value < 300 ) button = 1; if( value >= 100 && value < 200 ) button = 2;
Software - sketch inicial
if( button != 255 ) { if( board[button] == ' ' ) { if( player1 ) { board[ button ] = 'X'; player1 = false; } else {board[ button ] = 'O'; player1 = true; } } } } button = 255; Verify(); } http://www.eaduino.com.br 22
void Verify() { boolean winner;
winner = VerifyPlayer( 'X' );
if( winner ) Serial.println("Player 1 wins!"); else {
winner = VerifyPlayer( 'O' );
if( winner ) Serial.println("Player 2 wins!"); }
if( winner ) {
for( byte x = 0; x <= 8; x++ ) board[x] = ' '; player1 = true;
Welcome(); }
Software - sketch inicial
boolean VerifyPlayer( char player ) {
if( board[0] == player && board[1] == player && board[2] == player ) return true;
if( board[0] == player && board[4] == player && board[8] == player ) return true;
if( board[0] == player && board[3] == player && board[6] == player ) return true;
if( board[3] == player && board[4] == player && board[5] == player ) return true;
if( board[6] == player && board[7] == player && board[8] == player ) return true;
if( board[6] == player && board[4] == player && board[3] == player ) return true;
return false; }
Atividades Práticas
• Coding Dojo
• treino coletivo de desenvolvimento
• usos:
• treinar novas práticas
• aprender novas APIs
• Randori Kata: Treino Livre
• Duplas resolvendo o problema usando TDD e baby steps
• piloto opera o teclado
• copiloto ajuda na solução
• Enquanto o teste não passa, a plateia não pode se manifestar (exceto a pedido dos pilotos)
• Quando o teste passa, pessoas da plateia podem sugerir o próximo passo
• Prepared Kata: Solução completa
• TDD e BabySteps também
• Inicia de um rascunho
• Cada etapa é bem explicada
• Plateia somente interrompe quando não entende algo
Como treinar
http://www.eaduino.com.br 26
TDD?
• Test Driven Development (design)
• Escrever testes antes de implementar qualquer nova funcionalidade
Baby Steps
• Para avançar com segurança e
constância, cada passo deve ser bem simples
• resista à tentação de resolver o problema todo de uma vez só, ou partir direto para abstração e
generalização
Não tenha medo de sugerir passos bem pequenos e triviais
TDD e Arduino
• Testes não serão automatizados
• Cartões verdes e vermelhos (o quadro branco é nossa documentação dos testes manuais)
Dojo de hoje
• Ideias?
• montar o tabuleiro na tela
• posicionar o X ou O na coordenada correta (lacuna no tabuleiro)
• verificar quando há empate (no sketch atual, somente verifica vencedores).
Mãos à obra
1. Escolher a funcionalidade para o grupo trabalhar 2. Seleção do piloto
3. Seleção do Copiloto
4. Escrita do teste de aceitação (baby step) 5. Codificação para passar no teste
6. Volta ao passo 2