Upload
tranduong
View
237
Download
0
Embed Size (px)
Citation preview
29/março/2014
Fatec – São Caetano do Sul
“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
http://www.eaduino.com.br 2
Arduino Day 2014
Este evento é uma celebração 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
programação
compatível 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
específicas, diferentemente de
um microprocessador de
propósito 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 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).
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 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 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 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 14
Hardware
• Nove chaves tácteis, utilizando apenas um pino
analógico.
• Divisor de tensão
http://www.eaduino.com.br 15
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 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 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 25
• 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
codingdojo.org
TDD?
• Test Driven Development (design)
• Escrever testes antes de implementar qualquer nova
funcionalidade
http://www.eaduino.com.br 27
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
http://www.eaduino.com.br 28
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 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
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?
http://www.eaduino.com.br 31