Você está na página 1de 31

29/março/2014

Fatec – São Caetano do Sul

“Desenvolvendo jogos com Arduino”

Leandro Ramos
Leonardo Toledo
Robson Machado
http://www.eaduino.com.br 2

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
http://www.eaduino.com.br 3

Arduino Day 2014

Este evento é uma celebração mundial dos primeiros 10


anos do Arduino.
http://www.eaduino.com.br 4

Arduino
• Arduino é uma
plataforma de
hardware e software
open source
• Linguagem de
programação
compatível com C/C++
• Ambiente de
desenvolvimento
integrado
http://www.eaduino.com.br 5

Arduino
• Baixo custo
comparado a outras
plataformas de
desenvolvimento
http://www.eaduino.com.br 6

Microcontrolador
• Um microcontrolador é um
computador em uma única
pastilha.
• É programado para tarefas
específicas, diferentemente de
um microprocessador de
propósito geral.
http://www.eaduino.com.br 7

Arduino UNO
http://www.eaduino.com.br 8

Shields
• Placas que ampliam e extendem as funcionalidades da
placa base.

• http://www.shieldlist.org/
http://www.eaduino.com.br 9

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


sketches (esboços).
http://www.eaduino.com.br 10

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

“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
}
http://www.eaduino.com.br 12

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/
http://www.eaduino.com.br 13

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 14

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

Hardware
• Nove chaves tácteis, utilizando apenas um pino
analógico.
• Divisor de tensão
http://www.eaduino.com.br 16

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
http://www.eaduino.com.br 17

Software - sketch inicial


char board[] = {
' ',' ',' ',' ',' ',' ',' ',' ',' '};
byte pinButton = 0;
byte button = 255;
boolean player1 = true; // X, player2 = O
http://www.eaduino.com.br 18

Software - sketch inicial


void setup() {
Serial.begin(9600);
Welcome();
}
http://www.eaduino.com.br 19

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 20

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 21

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 22

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 23

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 24

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 25

Atividades Práticas
• Coding Dojo

• treino coletivo de desenvolvimento


• usos:
• treinar novas práticas
• aprender novas APIs
• integrar membros ao time
http://www.eaduino.com.br 26

Como treinar
• 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
codingdojo.org
http://www.eaduino.com.br 27

TDD?
• Test Driven Development (design)

• Escrever testes antes de implementar qualquer nova


funcionalidade
http://www.eaduino.com.br 28

• Para avançar com segurança e


constância, cada passo deve ser bem
Baby Steps simples
Não tenha medo de
• resista à tentação de resolver o
sugerir passos bem problema todo de uma vez só, ou
pequenos e triviais
partir direto para abstração e
generalização
http://www.eaduino.com.br 29

TDD e Arduino
• Testes não serão automatizados
• Cartões verdes e vermelhos (o quadro branco é nossa
documentação dos testes manuais)
• Testes antes da implementação
http://www.eaduino.com.br 30

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 31

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

• Candidatos?

Você também pode gostar