Ir ao conteúdo
  • Cadastre-se

Dado eletrônico em Arduino


Ir à solução Resolvido por aphawk,

Posts recomendados

Olá, ingressei no mundo dos microcontroladores a pouco tempo, indicado pelo pessoal do fórum. Tenho um Arduino UNO R3, e um LCD 16x2 com botões e um teclado matricial. Por enquanto, fiz apenas um mini semáfaro de leds com meu próprio código por ser algo simples. Agora, gostaria de fazer um dado eletrônico. Vi na internet esse material:

 

http://arduinobymyself.blogspot.com.br/2012/03/dado-eletrônico-led-dice.html

 

O código não consegui compreender ainda mesmo com os comentários, teria que fazer um estudo em C, ou algo mais próximo da linguagem usada. 

 

Vi outras fontes, mas não funcionou. Gostaria da ajuda para compreender o código usado e suas funções.

 

Obrigado!

 

PS: 

 

Aqui está o código da página para quem não quiser ver no site

 

/*  Este exemplo é um código de domínio público. */// define os pinos onde conectados os LEDsint ledPins[7] = {2, 3, 4, 5, 6, 7, 8}; // define o padão do LED, qual LED será aceso para cada númeroint dicePatterns[7][7] = {{0, 0, 0, 0, 0, 0, 1}, // 1{0, 0, 1, 1, 0, 0, 0}, // 2{0, 0, 1, 1, 0, 0, 1}, // 3{1, 0, 1, 1, 0, 1, 0}, // 4{1, 0, 1, 1, 0, 1, 1}, // 5{1, 1, 1, 1, 1, 1, 0}, // 6{0, 0, 0, 0, 0, 0, 0} // BLANK};int switchPin = 9; // define o pino do botão de int blank = 6; // quando cair Blank define como 6// inicialização do Arduinovoid setup(){  for (int i = 0; i < 7; i++) // gera loop para definição de pinos    {      pinMode(ledPins[i], OUTPUT); // define o pino (i) como saída      digitalWrite(ledPins[i], LOW); // apaga o LED do pino (i)    }  randomSeed(analogRead(0)); // lê porta analógica 0 e gera um                             // número aleatório}// loop principal do programavoid loop(){  if (digitalRead(switchPin)) // lê o estado do botão, se pressionado (1)(5V)    {      rollTheDice(); // roda o Dado    }  delay(100); // espera 100ms e executa novamente}// roda o Dadovoid rollTheDice(){  int result = 0; // inicializa a variável "result" com 0  int lengthOfRoll = random(15, 25); // gera comprimento da rodada, quantos números passarão  for (int i = 0; i < lengthOfRoll; i++) // loop de 0 até comprimento da rodada    {      result = random(0, 6); // gera número de 0 a 6, devido ao indexda matriz começar em 0                             // e ser preciso 7 números      show(result); // mostra resultado      delay(50 + i * 10); // atraso    }  for (int j = 0; j < 3; j++) // gera loop para piscar 3 vezes o resultado final    {      show(blank);  // mostra branco      delay(500);   // espera 500ms      show(result); // mostra resultado      delay(500);   // espera 500ms    }}// mostra o resultado nos LEDsvoid show(int result){  for (int i = 0; i < 7; i++) // gera loop para 7 resultados    {      digitalWrite(ledPins[i], dicePatterns[result][i]); // escreve no pino do LED (i) o resuldado de cada LED    }}// Fim da Compilação

 

Link para o comentário
Compartilhar em outros sites

  • Solução

@nick4xd,

Pode montar que esse circuito funciona, com uma pequena alteração...

O esquema tem de ser mudado, o pino 7 do 555 não pode ser ligado ao pino 2 e 6 .... Ele tem de estar ligado apenas ao resistor de 10K. O que tem de ser feito é colocar um outro resistor, por exemplo um de 1k, entre os pinos 7 e os pinos 6 e 2.

Quanto aos Leds, repare que cada Led no esquema tem um número nele, e em baixo do 555 tem um desenho de um quadrado, com os Leds numerados dentro, que é exatamente como voce tem de montar eles.

Quanto ao resistor extra, faltou o cara atualizar o esquema.... Ele tem um resistor de 1 Mohm que fica entre a junção do capacitor de 1 uF com o resistor de 10 Mohm, e a outra ponta vai até o touch plate, na parte de cima dele.

Para simular melhor no Proteus, sempre use um resistor de no mínimo 50k entre a parte inferior do touch plate e o terra, ou realmente o circuito vai ficar um bom tempo rodando sem parar....

Vou tentar simular e posto de novo o circuito com as alterações.

Paulo

Link para o comentário
Compartilhar em outros sites

Hum legal, reparei em algumas coisas. Mas na procura de novos materiais, fiz um que deu certo, postarei o link de onde achei o projeto. Provavelmente são iguais porém com o esquemático completo.

 

http://www.kitsrus.com/pdf/k3.pdf

 

Vi que mesmo assim o tempo era grande, então resolvi mudar o valor de 10M Ohm para 100K, e ficou na simulação por 3 segundos, creio eu que está ótimo.

No esquema não tinha o touch plate, porém apenas adicionei um botão em paralelo ao outro botão, onde substituirei por conn-sil para o ARES reconhecer. Outro inconveniente é que os leds em série na própria simulação estão acendendo mais fraco. Não sei se vai ocorrer na realidade com a mesma intensidade que na simulação, mas queria corrigir isso. Creio que diminuindo o valor do resistor desses leds o brilho aumenta, mas pouco. Alguma sugestão?

 

PS: Comparei os dois circuitos e vi realmente que são iguais, mudando um pouco a disposição de uns resistores e na mesma quantidade (16), ou seja, um parece ser visivelmente mais fácil de entender. E quanto a essas ligações incorretas que me disse, não deu problemas, está igual ao circuito do PDF e há o sorteio, o único impasse por enquanto é a luminosidade dos leds em série. (Vi apenas no PDF o esquema do posicionamento dos leds, que é igual ao primeiro link que acabou de me dizer).

Dado new.rar

Link para o comentário
Compartilhar em outros sites

Irei editar o tópico, mantendo somente a parte do arduino, e o outro irei mover para uma página antes, já que não envolve microcontrolador.

 

Segue o link do novo tópico:

 

http://forum.clubedohardware.com.br/forums/topic/1079010-dado-eletr%C3%B4nico/

 

Ele está um pouco diferente, somente com a dúvida que sobrou. Por favor, de uma olhada.

 

Obrigado!

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...