LusoRobótica - Robótica em Português
Sistemas específicos => Arduino / AVR => Tópico iniciado por: duaron em 30 de Outubro de 2014, 12:38
-
Boas
Venho aqui deixar uma pequena experiencia que fiz para explorar um display de segmentos com 4 digitos que veio com o meu kit de arduino.
Como podem ver no video está a fazer uma contagem automatica e um loop que fiz no final.
Deixo o codigo tambem para verem e comentarem.
Código: http://pastebin.com/qEWTte3d (http://pastebin.com/qEWTte3d)
Video demo: https://www.youtube.com/watch?v=oxRiAR9Wl3w (https://www.youtube.com/watch?v=oxRiAR9Wl3w)
Pseudo esquema (o fritzing nao tinha o meu display exato)
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi.imgur.com%2FIcSxnk3.png&hash=00f049b9ebb66acfff59b0a800be2d62846292a3)
Cumprimentos
duaron
-
Permite-me alguns comentários:
Deves colocar as resistêncais nos segmentos (fios azuis) e não nos fios comuns (amarelos) como fizeste, para que o brilho não varie consoante o nº de segmentos iluminados (como está a acontecer e vê-se bem no vídeo que o 1 e o 7 são mais brilhantes).
O código ficava melhor com umas otimizações: os padrões para os numeros deviam estar num array de arrrays.
Em vez de:
int one[] = {0,0,1,1,0,0,0};
int two[] = {1,1,0,1,1,0,1};
int three[] = {0,1,1,1,1,0,1};
int four[] = {0,0,1,1,0,1,1};
int five[] = {0,1,1,0,1,1,1};
int six[] = {1,1,1,0,1,1,1};
int seven[] = {0,0,1,1,1,0,0};
int eight[] = {1,1,1,1,1,1,1};
int nine[] = {0,0,1,1,1,1,1};
int zero[] = {1,1,1,1,1,1,0};
passavas a ter:
int numeros[][7] = {{1,1,1,1,1,1,0}, //0
{0,0,1,1,0,0,0}, //1
{1,1,0,1,1,0,1}, //2
{0,1,1,1,1,0,1}, //3
{0,0,1,1,0,1,1}, //4
{0,1,1,0,1,1,1}, //5
{1,1,1,0,1,1,1}, //6
{0,0,1,1,1,0,0}, //7
{1,1,1,1,1,1,1}, //8
{0,0,1,1,1,1,1}}; //9
O que te permitia simplificar a função printNumber() para:
void printNumber(int n, int index){
clearLeds();
if (n>=0 && n<=9) {
lightNumber(numeros[n]);
} elseif (n==99) {
int test[] = {1,1,0,1,1,0,1};
lightNumber(test);
}
digitalWrite((10+index),LOW);
}
Não fiz uma análise esxaustiva do código, mas quando vejo muito cut&paste de código como no caso do printNumber, torna-se obvio que dá para otimizar.
-
Muito obrigado pelo comment, parece me que realmente pode ficar muito mais simples. Daqui a pouco já vou experimentar essas alterações e depois posto aqui o resultado.
Mais uma vez obrigado.