Saldações amigos Garagistas. Aqui vai meu primeiro post.
Componentes necessários:
Segue o esquema de ligações dos componentes ao Arduino:
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:
Comentar
Montei o programa, mas o lado das pretas ficou em binário... não entendi
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por
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)