
여러 가지 아두이노 코딩을 하면서도 한번씩 별도의 하드웨어가 필요치 않는 순수 코딩 변경으로가능한 시계 코딩을 때때로 재미삼아 해보자. 나중에 와이파이 코딩이나 블루투스 코딩이나 앱 인벤터 코딩 과정에서도 심심치 않게 비슷한 작업이 이루어질 것이다.
시리얼 모니터를 사용하는 아두이노 시계 코드는 별도의 하드웨어나 센서 부품을 전혀 사용하지 않는다. 따라서 앞서 만든 미세먼지 측정기에 i2c lcd 디스플레이가 이미 설치되어 있다면 Wire.h 라이브러리와 LiquidCrystal_I2C.h 라이브러리를 불러오고 클라스 명령 LiquidCrystal_I2C lcd(0x3F,16,2)을 선언하자.

setup()에서 lcd 초기화 및 backlight 지원 선언이 추가된다.

loop()에서 다음과 같이 lcd 출력 명령을 추가하자.

수정한 코드를 저장 후 컴파일 업로드 하자. 업로딩 후 시리얼 모니터를 오픈해서 현재의 시간 분 데이타를 아래와 같이 입력하자. 일분 마다 한번씩 시간 정보를 갱신해주는 lcd를 볼 수 있다.

연관된 블로그를 참조하자.
초보자를 위한 아두이노 코딩 입문-19: 아두이노 코딩 시계 종류와 시리얼 모니터 시계 코딩
https://steemit.com/kr/@codingart/19
//i2c_lcd_clock_01
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,16,2);
unsigned long currentHr = 0;
unsigned long currentMin = 0;
void setup() {
Serial.begin(9600);
Serial.println("Clock setting data with 0000 in HR & Min");
while( Serial.available() == 0 ) {
}
lcd.init();
lcd.backlight();
int hrmin = Serial.parseInt();
currentHr = hrmin/100;
Serial.print(currentHr);
Serial.print(" ");
currentMin = hrmin%100;
Serial.println(currentMin);
}
void loop() {
unsigned long currentMillis = millis();
unsigned long hr = currentHr + currentMillis/3600000;
currentMillis = currentMillis%3600000;
unsigned long minute = currentMin + currentMillis/60000;
unsigned long second = currentMillis%60000;
unsigned long sec = second/1000;
if( hr <12 ) {
lcd.setCursor(3,0);
lcd.print("AM");
Serial.println("AM");
}
else if( hr <24 ) {
lcd.setCursor(3,0);
lcd.print("PM");
Serial.print("PM ");
}
else {
hr = hr -24;
lcd.setCursor(3,0);
lcd.print("AM");
Serial.print("AM ");
}
if( minute >= 60 ) {
hr = hr + 1;
minute = minute - 60;
}
Serial.print((unsigned long)hr);
Serial.print(":");
Serial.println((unsigned long)minute);
lcd.print(hr);
lcd.print(":");
lcd.print(minute);
delay(60000);
}//끝