BASIC4MCU | 질문게시판 | 타이머 관련 질문입니다.
페이지 정보
작성자 adui 작성일2022-12-06 13:31 조회680회 댓글0건본문
LCD를 이용해 시계를 만들었습니다.
LCD판에 2022/12/06 00:00:00으로 나옵니다.
하지만 초를 나타내는 부분이 1초씩 증가가 아니라 1초 증가, 2초 증가하는 방법으로 반복해서 증가합니다. ex) 01 -> 03 ->04 -> 06 처럼 됩니다.
초가 59초를 넘어 60초가 되면 1분이 되도록 했는데 1분이 되지 않고 있으며, 요일이 30을 넘어가는데 월도 변하지 않습니다.
초가 2번 증가하면 요일도 1씩 증가가 됩니다.
ex) 초가 01 -> 03 -> 04 -> 06씩 증가한다면 03과 06 때 요일이 07, 08로 증가합니다.
버튼 14, 15, 16, 17을 연결하여 14는 시간과 연도를, 15는 분과 월을, 16은 요일과 초를 증가 할 수 있도록 버튼을 사용했으며 처음에는 시,분,초만 증가하도록 하고 버튼 17을 누를 경우 연,월,일 증가하도록 하며 다시 버튼 17을 누르면 시,분,초만 증가하도록 하고 싶습니다.
현재는 버튼을 누르면 14에 해당하는 연도와 시간이 같이 증가합니다. 다른 버튼 15, 16도 해당하는 거는 같이 증가가 됩니다.
어떻게 코드를 수정해야 할까요?
#include
// 핀 번호 (RS, E, DB4, DB5, DB6, DB7)
LiquidCrystal lcd(44, 45, 46, 47, 48, 49); // LCD 연결
char str[30];
int year=2022, month=12, day=06;
int seconds=0, minutes=0, hours=0, toggle=0, Date=0, Time=0;
unsigned long time_previous, time_current;
void setup(){
lcd.begin(16,2); //LCD 크기 설정
lcd.clear(); //LCD 화면 지우기
}
void button_date() {
if(digitalRead(14)) {
year++;
}
if(digitalRead(15)) {
if(++month>12)
month=1;
}
if(digitalRead(16)) {
if(++day>30)
day=1;
}
}
void button_time() {
if(digitalRead(14)) {
if(++hours>24)
hours=0;
}
if(digitalRead(15)) {
if(++minutes>59)
minutes=0;
}
if(digitalRead(16)) {
if(++seconds>59)
seconds=0;
}
}
void loop() {
time_current = millis();
if(time_current - time_previous>=1000) {
time_previous = time_current;
seconds++;
if(seconds ==60) {
seconds=0;
minutes++;
}
if(minutes ==60) {
minutes=0;
hours++;
}
if(hours ==24 ) {
hours=0;
}
lcd.setCursor(2,0);
sprintf(str, "%04d/%02d/%02d", year, month, day);
lcd.print(str);
lcd.setCursor(4,1);
sprintf(str,"%02d:%02d:%02d", hours, minutes, seconds);
lcd.print(str);
Date=digitalRead(17);
if(Date==1&&Time==0) {
toggle^=1;
}
Date=Time;
if(toggle)
button_date();
else
button_time();
}
}
댓글 0
조회수 680등록된 댓글이 없습니다.