ผมใช้โปรแกรมนี้เป็นตัวตั้งเวลาให้ตัว RTC ตอนแรก
#include <DS3231.h>
DS3231 rtc(SDA, SCL);
Time t;
void setup()
{
Serial.begin(115200);
rtc.begin();
rtc.setDOW(MONDAY);
rtc.setTime(21, 20,30);
rtc.setDate(24, 11, 2014);
}
void loop()
{
t = rtc.getTime();
Serial.print(t.hour, DEC);
Serial.print(" : ");
Serial.print(t.min, DEC);
Serial.print(" : ");
Serial.print(t.sec, DEC);
delay (1000);
}
พอได้เวลาที่ต้องการแล้ว ผมใชัโ)รแกรมต่อไปนี้ให้มันแสดงออกจอLCD
// include the library code:
#include <LiquidCrystal.h>
#include <DS3231.h>
#include "TM1637.h"
#define ON 1
#define OFF 0
int8_t TimeDisp[] = {0x00,0x00,0x00,0x00};
unsigned char ClockPoint = 1;
unsigned char Update;
unsigned char halfsecond = 0;
unsigned char second;
unsigned char min = 0;
unsigned char hour = 0;
DS3231 rtc(SDA, SCL);
Time t;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
rtc.begin();
lcd.begin(16, 2);
}
void loop() {
t = rtc.getTime();
lcd.setCursor(0, 0);
lcd.print ("TIME ");
lcd.print(rtc.getTimeStr());
lcd.setCursor(0, 1);
lcd.print("DATE ");
lcd.print(rtc.getDateStr());
delay (1000);
}
มันแสดงเวลาและวันที่ออกมาได้แล้ว แต่ผมอยากจะต่อสวิทช์เพื่อที่จะใช้ตั้งเวลาจากภายนอกโดยไม่ต้องมาเขียนโปรแกรมใหม่ ต้องเริ่มตรงไหน ช่วยแนะนำหน่อยครับ
เยี่ยมเลยครับ ทำออกแล้ว ติดนิดหน่อยผมขอแนะนำประมาณนี้ครับ
โฟกัสที่ วิธีตั้งค่า ปกติเซตที่โคดนี้ ตามที่บอกผมนะครับ
rtc.setDOW(MONDAY);
rtc.setTime(21, 20,30);
rtc.setDate(24, 11, 2014);
แล้วต้องการใช้สวิตช์เป็นอินพุตการตั้งค่า ออกแบบการกดสวิตช์ตามต้องการครับ อาจจะกดแบบแช่ไว้ 3 วิ หรือกด 2 ปุ่มพร้อมกันเพื่อเซตค่าต่าง ๆ
คอนเซฟคือ จะมีอยู่ 3 ปุ่ม บางปุ่มสามารถยุบรวมกันได้
1. ปุ่มกดเพื่อเซต/เซฟ โหมด
2. ปุ่มกดขึ้น
3. ปุ่มกดลง
สมมุติผมออกแบบว่า กดปุ่มเซต 1 ครั้งจะมาเซตที่โหมดวันที่ กดอีกครั้งมาที่โหมดเวลา กดอีกครั้งมาที่โหมดวัน
กดปุ่มขึ้นลงเพื่อเปลี่ยนค่าตัวเลข กด ปุ่มเซตอีกครั้งเพื่อไปเซตค่าเลขชุดถัดไป ประมาณนี้ครับ
คำสั่งที่ใช้งานก็ digitalRead(PIN) กับ ใช้ IF ในการเช็คเงื่อนไข ต่าง ๆ ครับ
ขอถามครับ ว่าการต่อไมโครสวิตช์กดติดปล่อยดับแบบ 4 ขา เข้ากับตัวบอร์ด arduino ต่อแบบไหน ช่วยแนะนำหน่อยครับ
ตอนนี้ผมเปลี่ยนมาใช้จอ LCD แบบ 1602 LCD (Blue Screen) 16x2 LCD with backlight of the LCD screen พร้อม I2C Interface ครับ อีกนิดนะครับ
ขอบคุณครับ
2004 LCD (Blue Screen) 20x4 LCD with backlight of the LCD screen พร้อม I2C Interface ขนาด 20 ตัวอักษร 4 แถว
จอ LCD ตัวนี้ครับ ขอโทษทีครับ
สวิตช์ต่อวงจรและเขียนโคดตามนี้ครับ
ตัวอย่างการใช้งานจอ LCD แบบ I2C ดูตามบทความนี้ครับ
คือตอนนี้ติดตรงที่ว่าไม่รู้ว่าจะเลือกหลักเวลายังไง
เช่น เลือกปรับชั่วโมง ปรับนาที วินาที แบบไหนครับ
ไม่ยากครับ เราโฟกัสกันที่โคดนี้
rtc.setDOW(MONDAY);
rtc.setTime(21, 20,30);
rtc.setDate(24, 11, 2014);
สังเกตว่าจะเป็นตัวเลขแต่ละตัว
เราจะใช้ตัวแปรแทน เช่น
int mm, ss,hr
แล้วเซตตัวแปรแต่ละตัวโดยการกดปุ่ม จากนั้นก็เอาตัวแปรไปแทนในโคด rtc.setTime(hr, mm,ss);
ตอนนี้ตั้งค่าเวลาได้ทุกหลักแล้วครับ
แต่มาติดตรงที่การตั้งค่าวันที่ เดือน ปี กดตั้งค่าและเพิ่มค่าของวันที่ เดือน ปี ได้
แต่ไม่จำค่าที่ตั้งไป จะกลับไปเป็นค่าเดิมก่อนหน้า ครับ
เยี่ยมเลยครับ ผมว่าดูโคดอีกนิดหน่อยก็น่าจะได้แล้วครับ
ทำได้แล้วครับ ขอบคุณมากสำหรับคำแนะนำดีๆครับ