ข้ามไปที่เนื้อหาหลัก

ส่งงานครั้งที่ 2


Project Arduino Clock Set Date Time
Code
//************libraries**************//
#include <Wire.h>
#include <RTClib.h>
#include <LiquidCrystal_I2C.h>

//************************************//
LiquidCrystal_I2C lcd(0x3F,16,2); // เป็นการตั้งให้จอมีขนาด16ตัว2แถว
RTC_DS1307 RTC;

//************Button*****************//
int P1=6; // ปุ่ม SET MENU
int P2=7; // ปุ่ม +
int P3=8; // ปุ่ม -

//************Variables**************//
int hourupg; //กำหนดตัวแปรต่างๆ
int minupg;
int yearupg;
int monthupg;
int dayupg;
int menu =0;

void setup()
{

  lcd.begin(); //ตั้งให้จอเริ่มที่ตำแหน่ง 0x0
  lcd.backlight(); //ใช้Blacklight
  lcd.clear(); //ล้างหน้าจอ

  pinMode(P1,INPUT); //ให้P1 เป็น Input
  pinMode(P2,INPUT);//ให้P2 เป็น Input
  pinMode(P3,INPUT);//ให้P3 เป็น Input

  Serial.begin(9600); // การรับส่งข้อมูลที่ 9600 บิทต่อวินาที
  Wire.begin();
  RTC.begin();

  if (! RTC.isrunning()) {
    Serial.println("RTC is NOT running!");
    // ตั้งวันและเวลาที่ compile time
    RTC.adjust(DateTime(__DATE__, __TIME__));
  }
  // RTC.adjust(DateTime(__DATE__, __TIME__)); //removing "//" to adjust the time
    // ตั้งให้หน้าจอปกติแสดงวันและเวลา
  int menu=0;
}
void loop()
// เช็คถ้ากดปุ่มSetและเพิ่มmenu index 
  if(digitalRead(P1))
  {
   menu=menu+1;
  }
  if (menu==0)
    {
     DisplayDateTime(); // ไปที่ Class ชื่อ DisplayDateTime
    }
  if (menu==1)
    {
    DisplaySetHour();  // ไปที่ Class ชื่อ DisplaySetHour
    }
  if (menu==2)
    {
    DisplaySetMinute(); // ไปที่ Class ชื่อ DisplaySetMinute
    }
  if (menu==3)
    {
    DisplaySetYear(); // ไปที่ Class ชื่อ DisplaySetYear
    }
  if (menu==4)
    {
    DisplaySetMonth(); // ไปที่ Class ชื่อ DisplaySetMonth
    }
  if (menu==5)
    {
    DisplaySetDay(); // ไปที่ Class ชื่อ DisplaySetDay
    }
  if (menu==6) //ถ้าmenu=6ให้หน่วงเวลาครึ่งวิแล้วเซ็ตค่าmenu=0
    {
    StoreAgg(); 
    delay(500);
    menu=0;
    }
    delay(100);
}

void DisplayDateTime ()
{  // เป็นClassที่โชว์วันและเวลา
  DateTime now = RTC.now();

  lcd.setCursor(0, 1);
  lcd.print("Hour:");
  if (now.hour()<=9)
  {
    lcd.print("0");
  }
  lcd.print(now.hour(), DEC);
  hourupg=now.hour();
  lcd.print(":");
  if (now.minute()<=9)
  {
    lcd.print("0");
  }
  lcd.print(now.minute(), DEC);
  minupg=now.minute();
  lcd.print(":");
  if (now.second()<=9)
  {
    lcd.print("0");
  }
  lcd.print(now.second(), DEC);

  lcd.setCursor(0, 0);
  lcd.print("Date: ");
  if (now.day()<=9)
  {
    lcd.print("0");
  }
  lcd.print(now.day(), DEC);
  dayupg=now.day();
  lcd.print("/");
  if (now.month()<=9)
  {
    lcd.print("0");
  }
  lcd.print(now.month(), DEC);
  monthupg=now.month();
  lcd.print("/");
  lcd.print(now.year(), DEC);
  yearupg=now.year();
}

void DisplaySetHour()
{  // ใช้ตั้งเวลาชั่วโมง
  lcd.clear();
  DateTime now = RTC.now();
  if(digitalRead(P2)==HIGH)
  {
    if(hourupg==23)
    {
      hourupg=0;
    }
    else
    {
      hourupg=hourupg+1;
    }
  }
   if(digitalRead(P3)==HIGH)
  {
    if(hourupg==0)
    {
      hourupg=23;
    }
    else
    {
      hourupg=hourupg-1;
    }
  }
  lcd.setCursor(0,0);
  lcd.print("Set time:");
  lcd.setCursor(0,1);
  lcd.print(hourupg,DEC);
  delay(200);
}

void DisplaySetMinute()
{
//  ใช้ตั้งเวลานาที
  lcd.clear();
  if(digitalRead(P2)==HIGH)
  {
    if (minupg==59)
    {
      minupg=0;
    }
    else
    {
      minupg=minupg+1;
    }
  }
   if(digitalRead(P3)==HIGH)
  {
    if (minupg==0)
    {
      minupg=59;
    }
    else
    {
      minupg=minupg-1;
    }
  }
  lcd.setCursor(0,0);
  lcd.print("Set Minutes:");
  lcd.setCursor(0,1);
  lcd.print(minupg,DEC);
  delay(200);
}
  
void DisplaySetYear()
{
// ใช้ตั้วปี
  lcd.clear();
  if(digitalRead(P2)==HIGH)
  {    
    yearupg=yearupg+1;
  }
   if(digitalRead(P3)==HIGH)
  {
    yearupg=yearupg-1;
  }
  lcd.setCursor(0,0);
  lcd.print("Set Year:");
  lcd.setCursor(0,1);
  lcd.print(yearupg,DEC);
  delay(200);
}

void DisplaySetMonth()
{
// ใช้ตั้งเดือน
  lcd.clear();
  if(digitalRead(P2)==HIGH)
  {
    if (monthupg==12)
    {
      monthupg=1;
    }
    else
    {
      monthupg=monthupg+1;
    }
  }
   if(digitalRead(P3)==HIGH)
  {
    if (monthupg==1)
    {
      monthupg=12;
    }
    else
    {
      monthupg=monthupg-1;
    }
  }
  lcd.setCursor(0,0);
  lcd.print("Set Month:");
  lcd.setCursor(0,1);
  lcd.print(monthupg,DEC);
  delay(200);
}

void DisplaySetDay()
{
// ตั้งวัน
  lcd.clear();
  if(digitalRead(P2)==HIGH)
  {
    if (dayupg==31)
    {
      dayupg=1;
    }
    else
    {
      dayupg=dayupg+1;
    }
  }
   if(digitalRead(P3)==HIGH)
  {
    if (dayupg==1)
    {
      dayupg=31;
    }
    else
    {
      dayupg=dayupg-1;
    }
  }
  lcd.setCursor(0,0);
  lcd.print("Set Day:");
  lcd.setCursor(0,1);
  lcd.print(dayupg,DEC);
  delay(200);
}

void StoreAgg()
{
// เซฟการตั้งค่า
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("SAVING IN");
  lcd.setCursor(0,1);
  lcd.print("PROGRESS");
  RTC.adjust(DateTime(yearupg,monthupg,dayupg,hourupg,minupg,0));
  delay(200);
}


Credit By : https://create.arduino.cc/projecthub/Tittiamo/clock-set-date-time-0d46a4?ref=tag&ref_id=clocks&offset=9

ความคิดเห็น