Como exibir a Hora para a Sua Arduino Project Clock
Uma vez que você tem algo na tela para o seu Project Clock Arduino, é hora de ler o tempo a partir do módulo RTC e exibi-lo. Mais tarde, você adicionar botões para programar o alarme, e um interruptor para alternar entre Time Display, Set Alarme e Alarme modos Armadas.
Há realmente apenas duas coisas que você pode mostrar com este relógio: ou a hora actual ou o tempo que você deseja que o alarme dispare. Em vez de incluir o código para ambos no principal loop (), faz sentido colocar o procedimento de exposição em sua própria função.
Adicione o seguinte código para a secção de declarações variável na parte superior do seu código:
RTC_DS1307 rtc- // Criar um relógio de tempo real chamado rtcLiquidCrystal lcd (12, 11, 5, 4, 3, 2) - // Criar um LCD chamado lcdDateTime agora-
Isso cria um objeto DateTime chamado agora. O objeto DateTime é parte da biblioteca RTC e é a única maneira de obter o tempo fora do módulo RTC, embora ele tem um monte de opções e pode proporcionar horas, minutos, segundos, e no ano, mês e dia.
Em seguida, adicione o código em seu loop principal que lê a hora atual do módulo RTC, e adicionar uma função para atualizar a exibição com o tempo atual:
void loop () {agora = rtc.now () - // Obter a hora atual // Atualizar a displayupdateDisplay () -}
o agora DateTime objeto armazena o tempo atual retirado do rtc.now () função para exibir a hora e verificar se é hora de disparar o alarme.
Para manter o código modular, actualizar a apresentação é feita em sua própria função, fora do loop principal. Depois de fechar o loop principal, adicione o updateDisplay () função digitando o seguinte código:
anular updateDisplay () {int h = now.hour () - // Obter as horas agora e armazená-los em um número inteiro chamado dica m = now.minute () - // Obter os minutos agora e armazená-los em um número inteiro chamado de hortelã s = now.second () - // Obter os segundos agora e armazená-los em um número inteiro chamado slcd.setCursor (0, 0) - // Definir o cursor na coluna zero, linha superior ... lcd. print ( "a hora é:") - // ... com espaços para limpar caracteres a partir da criação alarm.lcd.setCursor (4, 1) - // Move o cursor para a coluna quatro, menor rowif (HLT; 10) { // Adicionar um zero, se necessário, como abovelcd.print (0) -} lcd.print (h) - // Mostrar a hourlcd.setCursor corrente (6, 1) - // Move para a próxima columnlcd.print ( " : ") - // E imprimir o colonlcd.setCursor (7, 1) - // Move para a próxima columnif (MLT; 10) {// Adicionar um zero, se necessário, como abovelcd.print (0) -} lcd .print (m) - // Mostrar a atual minutelcd.setCursor (9, 1) - // Move para a próxima columnlcd.print ( ":") - // E imprimir o colonlcd.setCursor (10, 1) - / / Mover para o próximo columnif (SLT; 10) {// Adicionar um zero, se necessário, como abovelcd.print (0) -} lcd.print (s) - // Mostrar a atual segunda}
Enviar este código ao seu Arduino e ver o que acontece. Se tudo está bem e seu código compila corretamente, você deve estar no negócio! O display deve mostrar uma vez que coincide com o um em seu computador.
No código, o tempo atual é solicitado ao agora objeto e colocado em três variáveis inteiras utilizados apenas no updateDisplay função. Essas variáveis têm uma âmbito local, significando que só pode ser usado dentro updateDisplay (), eo resto do programa não sabe nada sobre eles - o que explica por que eles não são declarados no início do seu código.
Você solicitar minutos de tempo, horas e segundos separadamente com now.hours (), now.minutes (), e now.seconds (). A atribuição de cada um destes separadamente a sua própria variável inteiro (H, M e S) é muito mais fácil do que a hora actual requerente de uma só vez.
Tendo analisado o tempo em três variáveis, a principal coisa acontecendo em updateDisplay () está posicionando o cursor no LCD e imprimir o texto relevante. Quando o cursor é feito com lcd.setCursor (), que recebe dois parâmetros: número de coluna eo número da linha. Definir o cursor só coloca-lo na posição correta.
Em seguida, você tem que dizer ao visor o que imprimir. A numeração começa em zero, de modo que o personagem superior mais à esquerda é na coluna 0 e linha 0. O cursor é posicionado no canto superior esquerdo da tela e a primeira linha de texto é impresso com lcd.print (# 147-A é: # 148-).
Você pode usar a lcd.clear () função, que apaga todo o texto na tela inteira. No entanto, o seu relógio está constantemente atualizando o visor, para limpar o LCD cada vez que o updateDisplay () Executa a função pode introduzir um pouco de cintilação perceptível. Uma abordagem mais simples (que usa um a menos instrução) é apenas para escrever os caracteres de espaço sobre o que poderia ter sido já no visor.
Em seguida, o cursor é movido quatro espaços para a direita e na segunda fila, de modo a que o tempo é centrado no ecrã:
lcd.setCursor (4,1) -
Um pouco complicado sobre o uso de números inteiros para obter as horas, minutos e segundos, é que eles não têm um zero à esquerda para valores abaixo de 10. Você precisa adicionar aqueles em manualmente, tanto para fazer o relógio olhar direito (por exemplo, 01 : 05), e para manter os minutos horas e segundos no mesmo lugar na tela.
Adicionando os zeros à esquerda é realizado da mesma forma para horas, minutos e segundos:
if (HLT; 10) {// Adicionar um zero, se necessário, como abovelcd.print (0) -} lcd.print (h) - // Mostrar a hora atual
a condicional E se testes declaração sobre se o tempo atual é inferior a 10, e em caso afirmativo, o impressão() declaração imprime um zero. Depois disso, o LCD avança automaticamente para a posição da coluna seguinte, por isso, quando você imprime a hora corrente, armazenado na variável inteiro h, ele terá um zero à esquerda. O mesmo vale para minutos e segundos.
Você também deve avançar o cursor para a posição correta para o zero à esquerda para minutos e segundos. Você inserir uma vírgula entre elas com o lcd.print (# 147 - # 148 -) - declaração.