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).
Durante 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: