• Nenhum resultado encontrado

29/março/2014. Fatec São Caetano do Sul. Desenvolvendo jogos com Arduino. Leandro Ramos Leonardo Toledo Robson Machado

N/A
N/A
Protected

Academic year: 2021

Share "29/março/2014. Fatec São Caetano do Sul. Desenvolvendo jogos com Arduino. Leandro Ramos Leonardo Toledo Robson Machado"

Copied!
31
0
0

Texto

(1)

“Desenvolvendo jogos com Arduino” Leandro Ramos Leonardo Toledo Robson Machado

(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

(3)

Arduino Day 2014

Este evento é uma celebração mundial dos primeiros 10 anos do Arduino.

(4)

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

(5)

Arduino

• Baixo custo

comparado a outras plataformas de

(6)

Microcontrolador

• Um microcontrolador é um computador em uma única pastilha.

• É programado para tarefas

específicas, diferentemente de um microprocessador de

propósito geral.

6

(7)
(8)

Shields

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

• http://www.shieldlist.org/

8

(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

(10)

Ciclo de Desenvolvimento

10

(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 }

(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/

(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() { }

(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)

(15)

Hardware

• Nove chaves tácteis, utilizando apenas um pino analógico.

(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

(17)

Software - sketch inicial

char board[] = {

' ',' ',' ',' ',' ',' ',' ',' ',' '}; byte pinButton = 0;

byte button = 255;

(18)

Software - sketch inicial

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

(19)

Software - sketch inicial

void Welcome() {

Serial.println("+=========================+"); Serial.println("Tic-Tac-Toe");

Serial.println("EADuino - Arduino Day 2014");

Serial.println("+=========================+"); }

(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 20

(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;

(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 22

(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(); }

(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; }

(25)

Atividades Práticas

• Coding Dojo

• treino coletivo de desenvolvimento

• usos:

• treinar novas práticas

• aprender novas APIs

(26)

• 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

(27)

TDD?

• Test Driven Development (design)

• Escrever testes antes de implementar qualquer nova funcionalidade

(28)

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

(29)

TDD e Arduino

• Testes não serão automatizados

• Cartões verdes e vermelhos (o quadro branco é nossa documentação dos testes manuais)

(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).

(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

Referências

Documentos relacionados

• Ativação de IPv6 em outros peers já presentes sobre IPv4 • Estudo sobre a gerência sobre IPv6. • Aprofundamento no impacto na segurança em IX do IPv6 • Implementação

O principal objetivo deste trabalho foi a realização de um diagnóstico quali-quantitativo da fração inorgânica dos resíduos sólidos domiciliares gerados no

São trabalhos em sítios específicos, conhecidos e sondados anteriormente à produção de imagens, estas, foram produzidas em ateliê através da análise das fotografias

Estamos em um nível pré-expressivo 1 , onde o ator trabalha, em seu treinamento cotidiano, sua energia, sua presença, “o bios de suas ações e não seu significado” como nos

Nessa situação temos claramente a relação de tecnovívio apresentado por Dubatti (2012) operando, visto que nessa experiência ambos os atores tra- çam um diálogo que não se dá

The patient presented for cataract surgery with an inferior congenital combined iris and lens coloboma with a small pupil.. A Malyugin Ring (MTS, Seattle, USA) was inserted to

In conclusion, posterior keratoconus is a rare entity, and its association with high myopia and high refractive astigmatism due to the anterior irregular elevation map is fairly

Descrição de um caso em paciente programada para cirurgia de catarata extra-capsular com implante de lente, que após o bloqueio anestésico peribulbar apresentou parada