Boa tarde a todos,
O meu nome é Ricardo e informo desde já que não tenho qualquer experiência com codificação ou placas arduino ou outras.... sou um iniciante a zeros...
Como sou um pouco curioso, e o clube de basquete onde joga o meu filho mais novo precisa de um placar electronico, pensei em fazer um ... talvez com um pouco de loucura ...
Então o que pretendo é um placard electronico que conte a pontuação das equipas e controle o tempo de jogo.
Medidas do placar – 42 cm X 29,5 cm ( folha A3 ) alimentado por transformador ou baterias
Medidas dos dígitos ( pontos e tempo ) – 10 cm X 5 cm em led’s ou fitas de led
Contador de pontos ( independente para cada equipa )
O contador de pontos será constituído por 3 digitos para cada equipa, a começar no 000 e a terminar no 999.
O contador deve ser accionado por um do botão acrescentando sempre e só um valor de cada vez.
Deverá também existir um botão para retirar valores ( um e cada vez ) em caso de engano.
Contador de tempo
O contador de tempo ( cronómetro ) deverá ter 4 digitos e deverá funcionar em contagem decrescente.
Deverá também, ter as seguintes opções ( recorrendo a botão ) :
1 – Fazer reset colocando a zeros
2 – Colocação pelo utilizador do tempo que for decidido ( o tempo não é fixo )
3 – Quando a contagem decrescente tiver a decorrer, poder efectuar paragem de tempo e posteriormente continuar a mesma sequência.
4 – Quando chegar a um ( 01:00 ) minuto do tempo final, o cronometro deverá contar as decimas de segundo até chegar a zero ( 00:00 )
5 – Quando atingir os zero ( 00:00 ) acciona um buzz de 3 segundos
Espero que tenha colocado a informação toda necessário e que me possam ajudar.
Mais uma vez, não "pesco" nada do assunto ... ;)
Obrigado a todos
Ricardo Alexandre
Tags:
Teoricamente, a interface RS-485 suporta 1000 metros !
Acho que dá ! KKKK
Biblioteca de comunicação serial RS-485:
Depois de testes em algumas bibliotecas e tutoriais, encontrei essa biblioteca que funcionou corretamente !
Do jeito que eu queria. Excelente ! Ela envia um buffer de 20 caracteres.
Podemos usar esse buffer, para enviar os comandos para o Placar.
https://github.com/Protoneer/RS485-Arduino-Library
char Message[maxMsgLen+1] ;
strcpy(Message,"Msg12345678901234567");
if(RS485_SendMessage(Message,fWrite,ENABLE_PIN))
Analisando a Biblioteca BasketScoreboard do Miguel Pynto :
Esta na hora da gente decidir como serão enviados os dados da Console Arduino para o Placar Arduino.
Na console Arduino, deverá ter um display LCD 4x20, um teclado matricial , uma interface RS-485 e um relógio RTC para controlar os displays Timer e Shoot Clock(futuro).
Acho que usando um RTC, a console ficará mais simples.
Se for possível depois, a gente poderá descartar o RTC e usar os timers internos do Arduino. (não vejo como boa opção).
Biblioteca BasketScoreboard:
https://github.com/MiguelPynto/BasketScoreboard
Comandos já definidos para controle do ScoreBoard :
https://github.com/MiguelPynto/BasketScoreboard/blob/master/commands.h
SET_POINTS_HOME,
SET_POINTS_VISIT,
SET_FOULS_HOME,
SET_FOULS_VISIT,
SET_PERIOD,
SET_POSSESSION_HOME,
SET_POSSESSION_VISIT,
CLEAR_POSSESSION,
TOGGLE_TIMER,
RESET_TIMER,
BUZZ
Variáveis definidas na Console Arduino :
https://github.com/MiguelPynto/BasketScoreboard/blob/master/control...
volatile int pointsHome, pointsVisit;
volatile int foulsHome, foulsVisit;
volatile bool possessionHome, possessionVisit;
volatile int period;
Precisamos definir a variável do Timer .
Nos meus testes com o RTC DS3231 , usei essas duas bibliotecas :
Continuando a reflexão de como os dados serão enviados, penso em duas opções.
1) envio de comandos . Um comando para cada display como :
SET_TIMER, 14:27
SET_POINTS_HOME, 005
SET_POINTS_VISIT, 002
etc
2) Envio de uma String de caracteres com todos as informações do Placar.
ST1427SPH005SPV002 etc
Depois essa string seria descodificada e cada variável seria recebida.
Pensei nessa opção, pois assim todo o Placar seria re-atualizado sempre que recebesse qualquer dado.
Qual seria a melhor opção ? O que acham ?
Peço desculpa, tenho andado com pouco tempo devido a problemas pessoais.
A opção 1 fará mais sentido neste nível de abstracção. No scoreboard.ino está a função receiveEvent() para este caso, falta apenas definir a leitura de acordo com o protocolo que será usado.
Cada (payload da) mensagem tem 2 bytes, 1 para o comando e outro para o argumento (se existir).
Pensei que o estado do cronometro seria mantido no placar, e a consola trataria apenas dos comandos (pausa, reset, avançar, etc). Não é este o caso?
Boa tarde, Miguel.
Considerando que somos voluntários, que gentilmente estamos ajudando no projeto do placar, não tem necessidade de pedir desculpas.
1) Refletindo depois, a opção 1 é a mais sensata, mesmo. Concordo com você.
=> envio de comandos . Um comando para cada display.
2) "Cada (payload da) mensagem tem 2 bytes, 1 para o comando e outro para o argumento (se existir)."
Estou achando pouco o numero de bytes para cada comando. Dá para aumentar ?
por exemplo :
- set_Timer 14:00
- set_Points_Home 115
3) Acho mais adequado todo o controle do placar ficar na Console. Inclusive do Timer.
Vai facilitar o nosso trabalho. O Placar somente servirá para display.
Imagine se o timer fosse no Placar. No caso de um reajuste de tempo, o placar teria que enviar os dados para a console e depois a console enviaria os dados para o placar.
Na outra opção , o placar somente receberia informação. A princípio, nunca terá que enviar dados para a console. Concorda ?
Uma questão: o timer também deve ser mostrado na Console?
Boas Miguel,
Sim o timer tambem é mostrado na Consola, a ideia é ter o reflexo do que está no placar na consola, imagina o cado em que o placard está por cima de quem controla a consola, setá complicado estar a ver o que se passa no placard...
Pensei que não fosse.
Então sim, a lógica do timer fica na console e o placar apenas recebe e mostra.
1 byte (0 a 255 em decimal)
Usando o exemplo SET_POINTS_HOME 199
O comando tem o valor decimal 0 (Command.SET_POINTS_HOME em commands.h) que é possivel representar com 1 byte, e o 199 já em decimal e menor que 255 também é possível representar com 1 byte.
Com o SET_TIMER 9999 já é preciso 2 bytes para o argumento.
Desenvolvimento do projeto da CONSOLE :
Em outros tópicos, já tinha feito alguns testes com a Console, com um teclado e um display LCD 20x4.
O desafio agora é maior ! Inseri um módulo DS3231 e uma interface RS-485 para a comunicação com o outro Arduino (Placar).
http://labdegaragem.com/forum/topics/placar-eletr-nico-port-til-bas...
http://labdegaragem.com/forum/topics/placar-eletr-nico-port-til-bas...
Acho que essa é a configuração inicial para testes. Mãos à obra !
https://www.flickr.com/photos/jgustavoam/26745312799/in/album-72157...
Desenvolvimento do projeto da CONSOLE : (continuação)
https://create.arduino.cc/editor/Gustavo_Murta/2ee9bd02-8f48-4a41-a...
Bibliotecas sugeridas (já testei com sucesso) :
Para teclado matricial e Display LCD 20x4
https://github.com/mathertel/LiquidCrystal_PCF8574
http://playground.arduino.cc/Code/Keypad
Para RTC DS321 :
https://github.com/JChristensen/DS3232RTC
https://github.com/jarzebski/Arduino-DS3231
Para Comunicação Serial RS-485 :
Desenvolvimento do projeto da CONSOLE : (continuação)
Boa noite,
No Sketch da console eu já consegui :
1) Pontuação do time Home (+2,+1,-1) = OK
2) Pontuação do do time Visit (+2,+1,-1) = OK
3) Posse de Bola, Home e Visit = OK
4) Contagem de Faltas , Home e Visit = OK
6) Só falta o controle do Timer !
Link do Sketch :
https://create.arduino.cc/editor/Gustavo_Murta/66e217c1-c018-41a5-b...
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por