Saldações amigos Garagistas. Aqui vai meu primeiro post.

Componentes necessários:

  1. Arduino Uno
  2. Protoboard
  3. 2 resistores 10kΩ
  4. 2 potenciometros 10kΩ
  5. 2 botões (tipo liga/desliga do estabilizador de um pc)
  6. Display 16x02
  7. Jumpers

Segue o esquema de ligações dos componentes ao Arduino:

O display mostrará:

Branco 00  Preto

10:00   00  10:00

Piscará 5 vezes e iniciara a contagem do tempo.

Progressiva no meio e regressiva do lado Branco.

após o botão do jogador das peças brancas for alterado o relógio do lado Branco para e passa para o lado Preto quando o botão do jogador das peças pretas for alterado o relógio do lado preto para e passa para o lado Branco e, assim, sucessivamente.

segui o sketch (códio fonte) ja na versão 0.3

#include <LiquidCrystal.h>

LiquidCrystal lcd(7, 6, 5, 4, 3, 2); /* cria um objeto lcd e atribui os pinos. os pinos 11 e 12 foram alterados para 6 e 7 respectivamente */
int branco = 8; // atribui o pino para o botão do jogador das peças brancas
int preto = 9; // atribui o pino para o botão do jogador das peças pretas

int ultimoTempo= 0; // variável para controle do tempo
int tempoGeral; // variável responsavel por registrar o tempo Geral
int statusBranco; // variável para verificar se o botão do jogador das peças brancas foi precionado
int statusPreto; // variável para verificar se o botão do jogador das peças pretas foi precionado
String status; // variável responsavel por armazenar o jogador da vez

/* inicializa os valores do tempo para os dois jogadores */

int minutoBranco = 10;
int segundoBranco = 0;
int minutoPreto = 10;
int segundoPreto = 0;
int minutoGeral = 0;
int segundoGeral = 0;

void setup(){
  lcd.begin(16, 2); // define o display com 16 colunas e 2 linhas
  pinMode(branco, INPUT); // define o botão do jogador das peças brancas como entrada
  pinMode(preto, INPUT); // define o botão do jogador das peças pretas como entrada

  /* inicializa o display */

  lcd.setCursor(0, 0);
  lcd.print("Branco 00 Preto");
  lcd.setCursor(0, 1);
  lcd.print("10:00 00 10:00");

  /* pisca o display 5 vezes antes de iniciar a contagem */

  for(int x = 0; x < 5; x++){
    lcd.noDisplay();
    delay(500);
    lcd.display();
    delay(500);
  }

  /* aguada 1 segundo para iniciar a contagem*/

  tempoGeral = int(millis()/1000);
  delay(1000);
}

void loop(){

  /* Enquanto for a vez do jogador das peças brancas o tempo é verificado e impresso a cada mudança */

  status = "Branco";
  do{
    efetuaMudanca(verifCont());
    imprimeMudanca();

    statusBranco = digitalRead(branco);
  }
  while(statusBranco == LOW);

  /* Enquanto for a vez do jogador das peças pretas o tempo é verificado e impresso a cada mudança */

  status = "Preto";
  do{
    efetuaMudanca(verifCont());
    imprimeMudanca();

    statusPreto = digitalRead(preto);
  }
  while(statusPreto == LOW);

  /* Enquanto for a vez do jogador das peças brancas o tempo é verificado e impresso a cada mudança */

  status = "Branco";
  do{
    efetuaMudanca(verifCont());
    imprimeMudanca();

    statusBranco = digitalRead(branco);
  }
  while(statusBranco == HIGH);

  /* Enquanto for a vez do jogador das peças pretas o tempo é verificado e impresso a cada mudança */

  status = "Preto";
  do{
    efetuaMudanca(verifCont());
    imprimeMudanca();

    statusPreto = digitalRead(preto);
  }
  while(statusPreto == HIGH);
}

/* Verifica se houve mudança */

int verifCont(){
  do{
    ultimoTempo = int(millis()/1000);
  }
  while(ultimoTempo <= tempoGeral);
  tempoGeral++;
  return 0;
}

/* Efetua mudança nas variaveis caso hajam */

void efetuaMudanca(int x){
  if(!x){
    if(status == "Branco"){
      segundoGeral++;
      if(segundoGeral == 60){
        minutoGeral++;
        segundoGeral = 0;
      }
      segundoBranco--;
      if(segundoBranco < 0){
        minutoBranco--;
        segundoBranco = 59;
      }
    }
    if(status == "Preto"){
      segundoGeral++;
      if(segundoGeral == 60){
        minutoGeral++;
        segundoGeral = 0;
      }
      segundoPreto--;
      if(segundoPreto < 0){
        minutoPreto--;
        segundoPreto = 59;
      }
    }
  }
  if(x == 1){
    lcd.setCursor(0, 0);
    lcd.print("Error ");
    lcd.setCursor(11, 0);
    lcd.print("Error");
  }
}

/* Impreme as mudanças caso hajam */

void imprimeMudanca(){
  if(segundoGeral < 10){
    lcd.setCursor(7, 1);
    lcd.print("0");
    lcd.print(segundoGeral);
  }
  else{
    lcd.setCursor(7, 1);
    lcd.print(segundoGeral);
  }
  if(minutoGeral < 10){
    lcd.setCursor(8, 0);
    lcd.print(minutoGeral);
  }
  else{
    lcd.setCursor(7, 0);
    lcd.print(minutoGeral);
  }
  if(segundoBranco > 9){
    lcd.setCursor(3, 1);
    lcd.print(segundoBranco);
  }
  else{
    lcd.setCursor(3, 1);
    lcd.print("0");
    lcd.print(segundoBranco);
  }
  if(minutoBranco > 9){
    lcd.setCursor(0, 1);
    lcd.print(minutoBranco);
  }
  else{
    lcd.setCursor(0, 1);
    lcd.print("0");
    lcd.print(minutoBranco);
  }
  if(segundoPreto > 9){
    lcd.setCursor(14, 1);
    lcd.print(segundoPreto);
  }
  else{
    lcd.setCursor(14, 1);
    lcd.print("0");
    lcd.print(segundoPreto);
  }
  if(minutoPreto > 9){
    lcd.setCursor(11, 1);
    lcd.print(minutoPreto);
  }
  else{
    lcd.setCursor(11, 1);
    lcd.print("0");
    lcd.print(minutoPreto);
  }
}

A versão 0.1 continha apenas um botão e a contagem parava em menos de 3 minutos.

A versão 0.2 foi corrigido o problena da contagem de tempo mas continuava com apenas um botão.

Nestas versão com apenas um botão cada vez que o botão era precionado passava a vez para o proximo jogador

Já a versão 0.3 cada jogador tem o seu próprio botão.

Referência:

  • Arduino Básico

Exibições: 1960

Comentar

Você precisa ser um membro de Laboratorio de Garagem (arduino, eletrônica, robotica, hacking) para adicionar comentários!

Entrar em Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)

Comentário de Eduardo Capatti em 11 abril 2016 às 16:54

Montei o programa, mas o lado das pretas ficou em binário... não entendi

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço