Arduino – Pisca luzes binomial

DSC04419

E mais um pequeno projetinho bem bobo com Arduino.

Domingo, sem nada para fazer, eu tentei ver como faz para ler dados do Arduino no computador.
Na linguagem dele existe um comando Serial e o modelo Uno tem uma porta serial para transmitir ou receber dados do computador, que da para fazer via o cabo usb.

Bem eu fiz um pequeno programinha, ainda de piscar luzes, mas agora eu fiz elas piscarem de forma aleatória. Usando o gerador do números aleatórios que vem no c, o random(), eu gerava um número, ai testava se ele era par ou impar, se for par eu acendo uma luz azul, senão eu acendo a luz amarela no caso de impar. Ele vai ficar no fim do post.

DSC04423

Até ai não tem muita coisa, mas o legal é que agora eu criei duas variáveis, para manter uma contagem de quantas vezes cada luz ficava acesa, depois eu imprimia no monitor do ide do Arduino.

Captura de tela de 2013-06-09 13:53:29

Assim eu conseguia receber um dado direto do Arduino.

Falta aprender melhor como fazer um esquema para o computador ir lendo os dados e salvando num arquivo, isso seria bem útil, e parece que não será uma tarefa muito árdua ja que muita gente quer fazer isso.

Em python, eu vi aqui que existe uma library chamada pyserial exatamente para fazer isso, so que não especifica para Arduino. Na verdade essa é uma pergunta bem recorrente como vemos nos posts aqui e aqui por exemplo, para iniciar.

Bom é isso, bom domingo.

//Apenas para usar um define para aprender, agora toda pausa vale 700
//So mudar o valor aqui para pausas diferentes
#define pausa 700L
 
//Iniciando as variáveis que serão usadas
int carapin = 13 , coroapin = 12 ;
int cara = 0 , coroa = 0 , n = 100 , numero , i;
 
void setup() {
//Aqui a gente inicia tantos os pinos como a porta serial
//para comunicar com o computador
  Serial.begin(9600);
  pinMode(carapin, OUTPUT);
  pinMode(coroapin, OUTPUT);
  randomSeed(analogRead(0));
}
 
// Aqui é o loop que vai ficar em modo infinito.
void loop() {
 
  //Vamos fazer contagens de 100 vezes apenas, para ver o final
  for(i=1;i<=n;i++) {
    //Aqui geramos um número pseudo-aleatório
    numero = random(0,1000);
 
// Se ele for par, a gente acende a luz por 700 milisegundos de pausa
// Mas veja que antes eu incremento o contador de cara
// Imprimo o número de caras e pulo uma linha.
// Aqui eu apanhai um pouco porque achei que tudo era igual o printf do C
    if((numero % 2) == 0) {
      cara++;
      Serial.print("Cara = ");
      Serial.print(cara);
      Serial.print("\n");
      digitalWrite(carapin, HIGH);
      delay(pausa);
      digitalWrite(carapin, LOW);
      delay(250);
    } else {
      coroa++;
      Serial.print("Coroa = ");
      Serial.print(coroa);
      Serial.print("\n");
      digitalWrite(coroapin, HIGH);
      delay(pausa);
      digitalWrite(coroapin, LOW);
      delay(250);
    }
  }
 
//Depois de 100 vezes no loop acendendo e apagando luzes e contando
// Eu imprimo a contagem final de cara e coroa e reinicio as variáveis
// Antes de começar a contar denovo. 
  Serial.print("Final");
  Serial.print("\n");
  Serial.print("Cara = ");
  Serial.print(cara);
  Serial.print(" e Coroa =");
  Serial.print(coroa);
  Serial.print("\n");
  Serial.print("--------------------------");
  Serial.print("\n");
 
  cara = 0;
  coroa= 0;
  delay(1000);
 
}

Leave a Reply

Your email address will not be published. Required fields are marked *