Você está na página 1de 31

29/maro/2014

Fatec So Caetano do Sul



Desenvolvendo jogos com Arduino

Leandro Ramos
Leonardo Toledo
Robson Machado
Agenda

10:00 boas-vindas
10:30 introduo a plataforma Arduino
11:30 biblioteca Tvout e o jogo tic-tac-toe (jogo da velha)
12:30 intervalo
13:30 diviso dos grupos e atividades prticas
17:00 - encerramento
http://www.eaduino.com.br 2
Arduino Day 2014


Este evento uma celebrao mundial dos primeiros 10
anos do Arduino.

http://www.eaduino.com.br 3
Arduino
Arduino uma
plataforma de
hardware e software
open source
Linguagem de
programao
compatvel com C/C++
Ambiente de
desenvolvimento
integrado
4 http://www.eaduino.com.br
Arduino
Baixo custo
comparado a outras
plataformas de
desenvolvimento

5 http://www.eaduino.com.br
Microcontrolador
Um microcontrolador um
computador em uma nica
pastilha.
programado para tarefas
especficas, diferentemente de
um microprocessador de
propsito geral.

6 http://www.eaduino.com.br
Arduino UNO
7 http://www.eaduino.com.br
Shields
Placas que ampliam e extendem as funcionalidades da
placa base.

http://www.shieldlist.org/

8 http://www.eaduino.com.br
Ambiente de Desenvolvimento
O ambiente de desenvolvimento Arduino contm um
editor de texto com os recursos necessrios para
escrever um programa, compil-lo e transfer-lo para a
placa Arduino.

Os programas escritos para Arduino so chamados de
sketches (esboos).

9 http://www.eaduino.com.br
Ciclo de Desenvolvimento


10 http://www.eaduino.com.br
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
}
11 http://www.eaduino.com.br
TVout
Biblioteca responsvel por gerar sinais a partir de um
microcontrolador Atmel AVR.
Conexo extremamente simples: um cabo coaxial e dois
resistores.
Utiliza apenas dois pinos digitais e terra.
Pgina do projeto: http://code.google.com/p/arduino-tvout/

http://www.eaduino.com.br 12
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() {

}
http://www.eaduino.com.br 13
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 crculo
(Noughts = O, Crosses = X)
Ganha que conseguir marcar trs xis ou trs crculos em
linha (horizontal, vertical ou diagonal)


http://www.eaduino.com.br 14
Hardware
Nove chaves tcteis, utilizando apenas um pino
analgico.
Divisor de tenso
http://www.eaduino.com.br 15
Software - sketch inicial
1. Declara uma matriz unidimensional com 9 elementos
(tabuleiro)
2. Declara demais variveis globais
3. Exibe mensagem de boas vindas
4. Verifica se jogador 1 (X) ou jogador 2 (O)
5. Aguarda o pressionar de um boto
6. Verifica a qual posio no tabuleiro corresponde o
boto pressionado
7. Marca com X ou O a posio no tabuleiro
8. Verifica se h vencedor
9. Volta ao passo 4
http://www.eaduino.com.br 16
Software - sketch inicial
char board[] = {
' ',' ',' ',' ',' ',' ',' ',' ',' '};
byte pinButton = 0;
byte button = 255;
boolean player1 = true; // X, player2 = O
http://www.eaduino.com.br 17
Software - sketch inicial
void setup() {
Serial.begin(9600);
Welcome();
}
http://www.eaduino.com.br 18
Software - sketch inicial
void Welcome() {
Serial.println("+=========================+");
Serial.println("Tic-Tac-Toe");
Serial.println("EADuino - Arduino Day 2014");
Serial.println("+=========================+");
}
http://www.eaduino.com.br 19
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;
http://www.eaduino.com.br 21
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();
}
}
http://www.eaduino.com.br 23
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;
}
http://www.eaduino.com.br 24
Atividades Prticas
Coding Dojo

treino coletivo de desenvolvimento
usos:
treinar novas prticas
aprender novas APIs
integrar membros ao time
http://www.eaduino.com.br 25
Randori Kata: Treino Livre
Duplas resolvendo o problema usando TDD e baby steps
piloto opera o teclado
copiloto ajuda na soluo
Enquanto o teste no passa, a plateia no pode se manifestar
(exceto a pedido dos pilotos)
Quando o teste passa, pessoas da plateia podem sugerir o
prximo passo

Prepared Kata: Soluo completa
TDD e BabySteps tambm
Inicia de um rascunho
Cada etapa bem explicada
Plateia somente interrompe quando no entende algo
Como treinar
http://www.eaduino.com.br 26
codingdojo.org

TDD?
Test Driven Development (design)

Escrever testes antes de implementar qualquer nova
funcionalidade

http://www.eaduino.com.br 27
Baby Steps
Para avanar com segurana e
constncia, cada passo deve ser bem
simples
resista tentao de resolver o
problema todo de uma vez s, ou
partir direto para abstrao e
generalizao








No tenha medo de
sugerir passos bem
pequenos e triviais

http://www.eaduino.com.br 28
TDD e Arduino
Testes no sero automatizados
Cartes verdes e vermelhos (o quadro branco nossa
documentao dos testes manuais)
Testes antes da implementao
http://www.eaduino.com.br 29
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).
http://www.eaduino.com.br 30
Mos obra

1. Escolher a funcionalidade para o grupo trabalhar
2. Seleo do piloto
3. Seleo do Copiloto
4. Escrita do teste de aceitao (baby step)
5. Codificao para passar no teste
6. Volta ao passo 2

Candidatos?
http://www.eaduino.com.br 31

Você também pode gostar