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.

menu