Página 1 de 1
DADO ELETRÔNICO

Enviado:
10 Mai 2015 14:02
por Pask
Amigos, vi num livro a sugestão de um autor para elaborar um "dado eletrônico" usando um display de leds de 7 segmentos apresentando números aleatórios de 1 a 6 e parando em um deles após pressionar o botão "JOGAR". Estou tentando desenvolver esse código em C mas ainda não consegui. O circuito já está montado e o display funciona perfeitamente com o Atmega8. O problema está na contagem do tempo após pressionar o botão para gerar os números aleatoriamente. Alguém teria uma ideia de como fazer isto?
Re: DADO ELETRÔNICO

Enviado:
10 Mai 2015 15:02
por andre_luis
Pra ter um valor realmente aleatório, poderia fazer um contador cíclico de 0 até o valor limite estabelecido de 6 a uma velocidade de contagem muito alta. Como voce mencionou, se há o fator humano envolvido, ou seja, se o disparo é feito por botão isso garante que realmente não há nenhuma relação entre os valores, sendo realmente aleatórios.
Pra geração dos tempos, pode usar algum tipo de embaralhamento lógico, tipo um filtro digital( tipo, CRC ) pra gerar uma duração que parecesse aleatória.
Re: DADO ELETRÔNICO

Enviado:
11 Mai 2015 11:22
por Alexandro
Em C tem uma função chamada RAMD que faz isso.
Re: DADO ELETRÔNICO

Enviado:
11 Mai 2015 12:16
por Pask
No MikroC esta função se chama rand( ), mas gera número muito grandes de até 16 bits de tamanho.
Re: DADO ELETRÔNICO

Enviado:
11 Mai 2015 12:40
por eletroinf
A solução mais fácil, no meu entender, é a sugestão do andre_teprom.
A função rand() que gere 16 bit é outra alternativa que poderia ser usada sem nenhum problema, bastando limitar o número de bit desejado e fazendo algum artifício qualquer como soma no caso do valor estar acima, embora dentro do limite de bits.
Re: DADO ELETRÔNICO

Enviado:
11 Mai 2015 13:14
por andre_luis
A função rand() exige uma semente, que no caso do disparo manual já seria por si só um valor aleatório, pois é assincrono com o valor atual do contador.
Ou seja, o proprio 'dedo' do camarada após pressionar o botão "JOGAR" já é uma função randomica.
Re: DADO ELETRÔNICO

Enviado:
11 Mai 2015 18:39
por tcpipchip
implementa um press any key e acumula uma variavel...
usa ele como seed quando pressionar a tecla
Re: DADO ELETRÔNICO

Enviado:
12 Mai 2015 19:07
por Pask
RESOLVIDO: Criei um laço while e incrementei uma variável entre 1 e 6 sem usar a função "random" e criei um jeito de sair do laço de forma imprevisível com um desses valores carregados na variável. Deu certo.
Re: DADO ELETRÔNICO

Enviado:
14 Mai 2015 10:40
por MOR_AL
Um pequeno detalhe.
No loop, a alteração do 6 para o 1, pode demorar mais que as outras alterações. Aí o dado pode ficar viciado. Tem que garantir as mesmas chances para todas as 6 opções.
Tente lançar o dado muitas vezes (algo maior que 100), para ver se ele distribui 1/6 de probabilidade para cada número e mostre o resultado para a gente acompanhar.
Um detalhe. Há muitos anos, na aula de estatística na faculdade, o professor tinha um recipiente com muitas bolinhas com apenas duas cores. Muitas, mas muitas mesmo, brancas e pouquíssimas azuis. Com uma colher para pegar apenas 6 dessas bolinhas ele mostrava que a chance de vir mais que uma bolinha azul, dentre as muito mais brancas era quase zero. A turma caiu na carótida do professor, quando na amostra vieram muitas azuis.
Moral da história.
Dados estatísticos são verdadeiros quando o número de amostras tende ao infinito, QUANDO DEIXA DE SER ESTATÍSTICA E SE TORNA UM FATO.
MOR_AL
Re: DADO ELETRÔNICO

Enviado:
14 Mai 2015 12:37
por Pask
Não. O dado não está viciado. Ele realmente apresenta todos os números entre 1 e 6 aleatoriamente. Ficou muito bom.