terça-feira, 15 de dezembro de 2009

Genius-ME é programado em DOJO na Globalcode

Como programado, aconteceu na semana passada (10/12) o DOJO com Programe-ME e Arduino no auditório da Globalcode em São Paulo. A dinâmica realizada não poderia ter sido melhor! Todos os presentes puderam colocar a mão na massa (exceto as meninas, que apenas ficaram como ouvintes) e durante uma hora em meia em rodadas de 7 minutos cada um contribuiu com um pedaço do código para uma simulação/protótipo do brinquedo Genius (seguindo a onda, chamado aqui de Genius-ME).

Clique para ampliarDurante o evento tivemos acesso a um Genius original da Estrela e a sua versão mais nova chamada de Simon Trickster. Assim, os participantes puderam ter uma idéia muito mais clara do problema que deveria ser programado através do Program-ME e Genius-ME.

O vídeo a seguir mostra o Genius original em ação:



Veja também o Simon Trickster em ação aqui!

Ao final de uma hora e meia a platéia conseguiu desenvolver o programa a seguir:

int leds[] = {11, 9, 3, 5};
int botoes[] = {12, 10, 4, 6};
int bip = 13;
char state = 'S'; // S = Start, P = Play, B = Read button, ...
int sequencia[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int currentRound = 0;
int currentPosition = 0;
int tamanho = 8;
boolean fimJogo = true;

void setup() {
for (int i = 0; i < 4; i++) {
pinMode(leds[i], OUTPUT);
pinMode(botoes[i], INPUT);
}
pinMode(bip, OUTPUT);
Serial.begin(9600);
}

void acendeluzesdarodada() {
for (int i = 0; i <= currentRound;i++){
digitalWrite(leds[sequencia[i]],HIGH);
delay(1000);
digitalWrite(leds[sequencia[i]], LOW);
delay(500);
}
}

int leBotao() {
int timeout = 0;
Serial.println("teste");
int botao = -1;
while (botao == -1 && timeout <= 30) {
for(int i = 0; i < 4; i++) {
if(digitalRead(botoes[i]) == HIGH) {
Serial.println(botoes[i]);
botao = i;break;
}
delay(100);
timeout++;
}
}
digitalWrite(leds[botao], HIGH);
while (digitalRead(botoes[botao]) == HIGH);
digitalWrite(leds[botao], LOW);
return botao;
}

void beep() {
digitalWrite(bip, HIGH);
delay(1000);
digitalWrite(bip, LOW);
}

void inicio() {
randomSeed(analogRead(0));
for (int i = 0; i < tamanho; i++) {
sequencia[i] = (int) random(0, 4);
Serial.print("Posicao.: " + sequencia[i]);
}
}

void loop() {
if (state == 'S') {
inicio();
fimJogo = false;
currentRound = 0;
state = 'P';
}
if (state == 'P') {
acendeluzesdarodada();
state = 'B';
}
if (state == 'B') {
for (int i = 0; i <= currentRound; i++){
int botao = leBotao();
Serial.println(botao);
if (sequencia[i] != botao || botao==-1) {
state = 'S';
fimJogo = true;
beep();
break;
}
}
if (!fimJogo) {
currentRound++;
state = 'P';
}
}
delay(3000);
}

Esta versão do programa funcionou e os desenvolvedores puderam experimentar a sensação de missão cumprida. Foi muito bom ver a empolgação durante o desenvolvimento do código, o medo de participar, a equipe externa dando pitacos no código, o piloto usando um computador miúdo e as observações finais da própria platéia sobre a dinâmica do DOJO. Agoram vejam o Genius-ME em ação com este código instalado no microcontrolador do Program-ME: Imaginem a situação de um desenvolvedor que não tem muita experiência ou nenhum conhecimento de programação em C e deve pegar um código deixado por outro desenvolvedor e continuar a manutenção ou evolução. Este desenvolvedor tem que entregar um código compilável, responder as perguntas do co-piloto (em pair programming), escrever o código, filtrar os pitacos externos, atender a pressão do prazo de uma rodada de 7 minutos e, além de tudo, ser observado por uma platéia de outros desenvolvedores, já que o código estava visível para todos via projetor ligado ao computador. Definitivamente, o DOJO com o Program-ME na Globalcode foi um sucesso e muito bom! Vale a pena conferir as próximas edições. By Spock http://blog.spock.com.br/
P.S.: Caso tenha participado deste DOJO e tenha fotos, please, publica na rede e manda o link para nós aqui via comentários.

3 comentários:

  1. Nossa Spock, este post ficou sensacional. Este DOJO deve ter sido muito interessante.

    Ficou riquissimo, com texto, código, videos e fotos.

    No dia do DOJO teve a trilha sonora também ?

    Um abraço!
    Yara

    ResponderExcluir
  2. Spock,

    Escrevi um post a respeito do evento, e nele estão fotos que estou disponibilizando, como você pediu.

    Acesse lá: http://templariodatecnologia.wordpress.com

    ResponderExcluir
  3. Olá Spock e pessoal,
    Realmente foi muito divertido esse DOJO.
    Foi legal perceber no pessoal e em mim também claro, o fato de todos estarem imaginando o programa rodando e o mesmo dando alguns bugs, e por isso o pessoal ficava olhando num ponto fixo do infinito se perguntando em uníssono: "O que pode estar errado?".

    Você não poderia ter deixado mesmo de fazer o comentário "filtrar os pitacos externos " pois se o pessoal não conseguisse fazê-lo o código não teria saído.

    Parabéns pelo DOJO e Post.

    Wesley Seidel
    @wseidel

    ResponderExcluir