Bem dessa vez vamos brincar um pouco com arduíno, e juntamente nessa experiência vamos precisar dos seguintes componentes:
- Um Arduíno;
- Uma protoboard;
- Um resistor (90 ohm);
- Um led;
- Um controle remoto de infra-vermelho (IR);
- Um receptor de IR;
- Alguns fios.
arduino |
controle remoto |
sensor IR |
protoboard |
led |
Com esses componentes precisaremos montar todo o equipamento, para isso segue essa pequena ilustração logo abaixo como dica de montagem.
esquema de conexão |
Nessa experiência faremos um jogo bem simples, onde você apertará um botão do controle, e na tela mostrará 4 quadrados, e a cada clique um dos quadrados acenderá como um toque de magica, porem quando apertado o mesmo botão novamente outro quadrado poderá acender no lugar do primeiro. Algo relativamente simples, porem foi muito trabalhosa.
Agora vamos aos códigos tanto do processing quanto do arduíno.
Código do Processing
import cc.arduino.*; import processing.serial.*; //#define R1 FF28CF //#define G2 FF10E7 //#define B3 FF7285 //#define Y4 FF08EF Serial myPort; int val; //variáveis das cores float r = 0; float g = 0; float b = 0; boolean button = false; boolean flashred = false; boolean flashgreen = false; boolean flashblue = false; boolean flashyellow = false; boolean redpress = false; boolean greenpress = false; boolean bluepress = false; boolean yellowpress = false; //variáveis do sorteio; int R1 = 54; int G2 = 50; int B3 = 57; int Y4 = 53; //int R1 = 16724175; //int G2 = 16718055; //int B3 = 16743045; //int Y4 = 16716015; //int [] cor = { R1, G2, B3, Y4 }; //int [4] cor = { R1, G2, B3, Y4}; //int [] sequencia = new int [100]; //int rodada_atual = 0; //int passo_atual = 0; //int perdeu = false; void setup(){ size (700, 700); frameRate (120); //background //select port println(Serial.list()); myPort = new Serial(this, Serial.list()[1], 9600); myPort.bufferUntil('\n'); } void draw(){ println(val); //fundo background (r, g, b); fill(255,150,150); rect(0, 0, width/2, height/2); fill(150,255,150); rect(width/2, 0, width/2, height/2); fill(150,150,255); rect(0, height/2, width/2, height/2); fill(255,255,150); rect(width/2, height/2, width/2, height/2); //recebe os valores da serial e armazena na variável. Se ficar posicionado nessa parte do código, as cores apenas piscam. //if( myPort.available() > 0) { //val = myPort.read(); //} //Compara o valor das variáveis if ( val == R1 ){ flashred = true; redpress = true; } else if ( val == G2 ){ flashgreen = true; greenpress = true; } else if ( val == B3 ){ flashblue = true; bluepress = true; } else if ( val == Y4 ){ flashyellow = true; yellowpress = true; } //muda a cor dos quadrados if (flashgreen) { fill(0,255,0); rect(width/2, 0, width/2, height/2); flashgreen = false; } else if (flashred) { fill(255,0,0); rect(0, 0, width/2, height/2); flashred = false; } else if (flashblue) { fill(0,0,255); rect(0, height/2, width/2, height/2); flashblue = false; } else if (flashyellow) { fill(255,255,0); rect(width/2, height/2, width/2, height/2); flashyellow = false; } } void serialEvent (Serial myPort){ //recebe os valores e armazena na variável. Se ficar nessa parte do código, pode ocorrer da cor só mudar quando um botão for pressionado, como também pode piscar uma cor e outra ficar fixa. if( myPort.available() > 0) { val = myPort.read(); } }
Alguns detalhes do código do processing:
- Linha 61. Ele começa a ler a porta serial do arduíno. Resumindo, ele se prepara para receber os dados que o arduíno vai mandar para ele;
- Linha 93. Começa a fazer comparativos, para iniciar a piscar ou não se apertar o botão;
- Linha 114. Muda a cor dos quadrados;
- Linha 145. Recebendo os valores e armazenando para deixar aceso o quadrado ou não do joguinho.
Código do Arduíno
int RECV_PIN = 2; IRrecv irrecv(RECV_PIN); decode_results results; void setup() { Serial.begin(9600); irrecv.enableIRIn(); // Start the receiver } void loop() { if (irrecv.decode(&results)) { Serial.println(results.value, DEC); irrecv.resume(); // Receive the next value } }
Detalhes do código arduíno
- Linha 5. Recebe os dados do botão apertado de decodifica para computar os valores referente ao botão do controle;
- Linha 12. Inicia o recebimento de dados do receptor IR;
- Linha 17. Decodifica para decimal o código hexadecimal formado;
- Linha 18. Deixa pronto para receber os próximos valores.
Uma breve conclusão do que esta acontecendo:
O processing ficou responsável por rodar o jogo em si, desde de criar os quadrado e acendê-los, agora o arduíno fica responsável por decodificar os códigos e mandar para o processing decodificado.