336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
97-1.txt 0.00MB I2C통신을하는 0.91인치 OLED디스플레이에 디지털 시계를 한번 뛰워보자!
관련라이브러리(ssd1306) https://github.com/adafruit/Adafruit_SSD1306 관련라이브러리(DS1302) https://github.com/Makuna/Rtc/wiki 공유하기 게시글 관리 구독하기파워 유튜버저작자표시 비영리 변경금지 '프로그래밍 > 아두이노 호작질' 카테고리의 다른 글[아두이노#110] 내장 EEPROM에 데이터 읽고 쓰고(녹칸다/포로리야공대가자) (0)2020.10.15[아두이노#109] 열전사 영수증 프린터(Thermal Printer)와 아두이노 연동(튜토리얼)(녹칸다/포로리야공대가자) (0)2020.10.14[아두이노#96] RTC모듈(DS1302)와 도트매트릭스(MAX7219)로 시계만들기 (0)2020.08.03[아두이노#95] RTC모듈(DS1302)와 FND모듈(TM1637)로 시계만들기 (0)2020.08.03[아두이노#94] RTC모듈 DS1302로 시계만들기(튜토리얼) (3)2020.08.03 신한카드2,3개월 (5만원↑)7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22개월 (100만원↑, SK pay 결제 시) KB국민카드2,3개월 (5만원↑) 8,9,10,11,12,13,14,15,16,17,18,19,20,21,22개월 (100만원↑, SK pay 결제 시) 현대카드2,3개월 (1만원↑) 8,9,10,11,12,13,14,15,16,17,18,19개월 (100만원↑, SK pay 결제 시) 삼성카드2,3개월 (5만원↑) 7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22개월 (100만원↑, SK pay 결제 시) 하나카드2,3,4,5,6,7,8개월 (5만원↑) 롯데카드6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22개월 (100만원↑, SK pay 결제 시) 농협[NH페이]카드2,3,4,5,6,7,8개월 (5만원↑) 12개월 (100만원↑, SK pay 결제 시) 사진과 같은 시계 제작이 필요하신 분은 준비물만 있으면 바로 가능하다. 부품류는 한국에서 모두 구할 수 있지만 가격대가 좀 나가기 때문에 시간적 여유를 두고 알리같은 직구를 이용하길 권한다. OLED만 봐도 한국은 1~2만원 선이고 알리는 무료배송에 3천원 정도한다. [준비물] 아두이노 보드 128*64 OLED(SSD1306타입, i2c통신) RTC(DS1307 또는 DS3231), 시간 오차가 적은 DS3231 추천.(현재 코드는 1307에 맞춰져 있으므로 다른 부품 사용시 코드 변경 필요) 10K옴 저항 버튼 [첨부파일] U8glib.h RTClib.h 상기 2개 라이브러리 설치 code.ino [아두이노 배선정보] A4<- 시계,OLED 모듈의 SDA A5<- 시계,OLED 모듈의 SLC 4<- 버튼 입력용 [시작하기] 첨부파일의 라이브러리를 스케치에 설치한다. code.ino파일을 열어 업로드한다. 하기 소스는 참고용으로 확인할 것. 코딩은 기초 함수를 썼고 최적화 같은건 난 모른다. 소스시작 #include //다른 모델의 OLED라면 u8glib 예제 파일로 가서 //여러 타입 중 자신에게 맞는 타입을 복사,붙여넣기 할것 const uint8_t oclimg[] PROGMEM= { const uint8_t tikimg[] PROGMEM= { const uint8_t hamimg[] PROGMEM= { //HAMTRO-1000 이미지(초기 부팅이미지) const uint8_t minimg[] PROGMEM= { // 시간 설정시 뜨는 문구, 이하 동일 const uint8_t himg[] PROGMEM= { const uint8_t modeimg[] PROGMEM= { const uint8_t dayimg[] PROGMEM= { const uint8_t setimg[] PROGMEM= { const uint8_t cho[] PROGMEM= { const uint8_t week0[] PROGMEM= { const uint8_t week1[] PROGMEM= { const uint8_t week2[] PROGMEM= { const uint8_t week3[] PROGMEM= { const uint8_t week4[] PROGMEM= { const uint8_t week5[] PROGMEM= { const uint8_t week6[] PROGMEM= { int gmnt=0;
//버튼 연결 핀 int h12=1; //시간 표시모드 전환. 1이면 1~12시, 0이면 0~23시 표시.
void setup() { //초기 날짜 세팅부분. 날짜를 직접 입력하거나 연결된 컴퓨터의 날짜 정보를 가져옴 //처음 한번만 실행하고 그 이후로는 주석 처리 후 다시 업로드 pinMode(bt_pin,INPUT); u8g.setFont(u8g_font_fub20); u8g.firstPage(); //초기 HAMTRO-1000 로고 출력 delay(2500); int daymsg=now.day()%8; u8g.firstPage(); //오늘 날짜 기반으로 8개의 메세지중 하나를 띄움. 좌표를 변화시켜 위에서 아래로 내려오는 효과.
} DateTime now=RTC.now(); if(stat==1){ //일상 시계 표시 모드 nowh=now.hour(); if(nowm==0 && nows<5){ nowh=nowh%12; hh=String(nowh,DEC); }else{ if(h12==1){ if(nowh<10){ u8g.drawBitmapP(36, 13, 8, 8, tikimg); u8g.drawStr(27,52, chh); u8g.drawStr(73,52, cmm); }while(u8g.nextPage()); if(sec==1){ } }else{ stat=13; if(stat==2){ int week=now.dayOfTheWeek(); gmnt=now.month(); int wx=98; const char* mnt=(const char*) imnt.c_str(); if(stat==13){ if(stat==14){ }while(u8g.nextPage()); if(sec==1){ } if(stat==15){ } u8g.drawStr(60,50, "/"); if(sec==1){ } if(stat==3){ } inputt++; } if(stat==4){ }while(u8g.nextPage()); if(sec==1){ } if(stat==5){ u8g.drawStr(60,46, ":"); }while(u8g.nextPage()); if(sec==1){ } delay(50); } 소스 끝 다음은 회로도 상 버튼 저항이 필요없도록 수정된 코드입니다. 회로도에 보이는 저항은 제거하시고, 버튼의 한쪽다리는 GND 나머지 다리는 아두이노의 4번핀으로 연결하시면 됩니다. #include //다른 모델의 OLED라면 u8glib 예제 파일로 가서 //여러 타입 중 자신에게 맞는 타입을 복사,붙여넣기 할것 const uint8_t oclimg[] PROGMEM= { const uint8_t tikimg[] PROGMEM= {
const uint8_t hamimg[] PROGMEM= { //HAMTRO-1000 이미지(초기 부팅이미지) const uint8_t minimg[] PROGMEM= { // 시간 설정시 뜨는 문구, 이하 동일 const uint8_t himg[] PROGMEM= { const uint8_t modeimg[] PROGMEM= { const uint8_t dayimg[] PROGMEM= { const uint8_t setimg[] PROGMEM= { const uint8_t cho[] PROGMEM= { const uint8_t week0[] PROGMEM= { const uint8_t week1[] PROGMEM= { const uint8_t week2[] PROGMEM= { const uint8_t week3[] PROGMEM= { const uint8_t week4[] PROGMEM= { const uint8_t week5[] PROGMEM= { const uint8_t week6[] PROGMEM= { int gmnt=0;
//버튼 연결 핀 int h12=1; //시간 표시모드 전환. 1이면 1~12시, 0이면 0~23시 표시.
void setup() { //초기 날짜 세팅부분. 날짜를 직접 입력하거나 연결된 컴퓨터의 날짜 정보를 가져옴 //처음 한번만 실행하고 그 이후로는 주석 처리 후 다시 업로드 pinMode(bt_pin,INPUT_PULLUP); u8g.firstPage(); //초기 HAMTRO-1000 로고 출력 delay(2500); int daymsg=now.day()%8; u8g.firstPage(); //오늘 날짜 기반으로 8개의 메세지중 하나를 띄움. 좌표를 변화시켜 위에서 아래로 내려오는 효과.
} DateTime now=RTC.now();
if(stat==1){ //일상 시계 표시 모드 nowh=now.hour();
nowh=nowh%12; hh=String(nowh,DEC); }else{
if(h12==1){ if(nowh<10){ u8g.drawBitmapP(36, 13, 8, 8, tikimg); u8g.drawStr(27,52, chh); u8g.drawStr(73,52, cmm); }while(u8g.nextPage()); if(sec==1){ } }else{ stat=13;
if(stat==2){ int week=now.dayOfTheWeek(); gmnt=now.month(); int wx=98;
if(stat==14){ }while(u8g.nextPage()); if(sec==1){ }
} u8g.drawStr(60,50, "/"); if(sec==1){ } if(stat==3){ } inputt++; }
}while(u8g.nextPage()); if(sec==1){ } if(stat==5){ u8g.drawStr(60,46, ":"); }while(u8g.nextPage()); if(sec==1){ } delay(50); } |