Vamos exercitar a cachola e visualizar as horas no relógio binário!
Como já está mostrando no vídeo, as horas são exibidas na primeira linha de leds, os minutos na linha do centro e os segundos na linha de baixo.
Temos dois push-buttons no circuito para o ajuste de horas e minutos. Como o controle de horas está sendo feito somente pelo microcontrolador sem um circuito RTC, sempre que desligarmos a alimentação será necessário o ajuste do relógio.
Segue o esquema elétrico e o código fonte:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | /*--------------------------------------------------------- Programa : RELÓGIO BINÁRIO Autor : Fellipe Couto [ http://www.efeitonerd.com.br ] Data : 11/05/2013 ---------------------------------------------------------*/ /*----- VARIAVEIS -----*/ long previousMillis = 0; long interval = 1000; int hour = 0; int minute = 0; int second = 0; int ledHour[5] = {1, 2, 3, 4, 5}; //Leds das horas int ledMinute[6] = {6, 7, 8, 9, 10, 11}; //Leds dos minutos int ledSecond[6] = {12, 13, 14, 15, 16, 17}; //leds dos segundos /*----- SETUP -----*/ void setup() { for (int i = 0; i < 5; i++) { pinMode(ledHour[i], OUTPUT); } for (int i = 0; i < 6; i++) { pinMode(ledMinute[i], OUTPUT); pinMode(ledSecond[i], OUTPUT); } } /*----- LOOP PRINCIPAL -----*/ void loop() { unsigned long currentMillis = millis(); //Intervalo de 1 segundo if (currentMillis - previousMillis > interval) { previousMillis = currentMillis; if (analogRead(4) == 1023) { //Ajuste de horas hour++; second = 0; } if (analogRead(5) == 1023) { //Ajuste de minutos minute++; second = 0; } clockDec(); //Relógio decimal clockBin(); //Relogio binario } } /*----- RELOGIO DECIMAL -----*/ void clockDec() { second++; if (second == 60) { second = 0; minute++; } if (minute == 60) { minute = 0; hour++; } if (hour == 24) { hour = 0; } } /*----- RELOGIO BINARIO -----*/ void clockBin() { //Segundos for (int j = 0; j < 6; j++) { if (decToBin(second, 6).substring(j, j + 1) == "0") { digitalWrite(ledSecond[j], LOW); } else { digitalWrite(ledSecond[j], HIGH); } } //Minutos for (int j = 0; j < 6; j++) { if (decToBin(minute, 6).substring(j, j + 1) == "0") { digitalWrite(ledMinute[j], LOW); } else { digitalWrite(ledMinute[j], HIGH); } } //Horas for (int j = 0; j < 5; j++) { if (decToBin(hour, 5).substring(j, j + 1) == "0") { digitalWrite(ledHour[j], LOW); } else { digitalWrite(ledHour[j], HIGH); } } } /*----- CONVERTE DECIMAL PARA BINARIO -----*/ String decToBin(int num, int qtd) { //Retorna uma string de 'qtd' posições. int zeros = qtd - String(num, BIN).length(); String str; for (int i = 0; i < zeros; i++) { str = str + "0"; } return str = str + String(num, BIN); } |
Nova postagem:
Relógio Binário de Mesa
Oi Fellipe, gostaria de saber se você teria uma opção de relogio binario para uma matriz de 5x7
ResponderExcluirOlá! Boa tarde!
ExcluirNão fiz para matriz.
Abraços!
Boa noite Felipe, gostaria saber se o relógio funcionou corretamente. Poderias dizer a lista de materiais usados, me pareceu muito interessante.
ResponderExcluirFico aguardando a tua resposta, meu email é choyosc@gmail.com
Um grande abraço
Christian
Oi Christian! Bom dia!
ExcluirO relógio funciona sim! Como está no vídeo.
Como não fiz o circuito com RTC, se desligar terá que fazer o ajuste das horas novamente.
Os componentes utilizados são os descritos na imagem do esquema elétrico. Leds, resistores de 220 ohms e 10Kohms, dois botões para ajustes de hora/minuto, e um arduino. Arduino pode ser montado stand-alone (recomendo assim).
Abraços!
Este comentário foi removido pelo autor.
ResponderExcluirom dia amigo,
ResponderExcluirEstou iniciando agora no "mundo" do Arduino e estou com uma dúvida; Você citou que está usando um Arduino montado stand-alone, por acaso o modelo seria Atmega328 Bootloader Gravado?
Posso substituir nesse caso, por Arduino Uno R3 Rev3 Atmega32?
Muito obrigado.
Bom dia!
ExcluirIsso mesmo. Stand alone é o arduino funcionando montado fora da placa Arduino.
Poderia montar utilizando o Arduino Uno, ou qualquer modelo de Arduino baseado no ATmega.
Abraços!
Boa Tarde amigo,
ResponderExcluirGostaria de tirar mais uma dúvida;
Estou utilizando o AutoDesk Circuits (https://circuits.io), para simular o Relógio Binário, e estou com um problema; Ao Executar a Simulação do circuito (Start Simulation), o AutoDesk executa a aplicação utilizando milionésimos de segundos, o que além de demorar para ascender os LED's (por exemplo, para executar 1 segundo a aplicação demora em torno de 23 segundos), alguns LED's simplesmente não acendem devido a conversão binária dos milionésimos de segundos.
Sabe me dizer no Arduino essa execução de milionésimos de segundos é padrão, ou é somente no AutoDesk Circuits?
Observei que em alguns fontes de Relógio Binário, os programadores utilizam o comando delay.
Obrigado desde já.
Olá Fellipe, tenho um cubo de led 4x4x4 funcionando, gostaria de saber se é possível fazer esta programação do relógio binário para rodar no cubo, sendo que as quatro fileiras ligariam simultaneamente, olhando a face superior do cubo poderiamos ver as hora em binário. O que acha? Aguardo resposta, obrigado.
ResponderExcluirBom dia!
ExcluirÉ possível. Algumas mudanças, pois nesse somente os leds do circuito são ativados e para o cubo seria necessário utilizar o valor de clockBin() para jogar na matriz de leds.