การต่อสวิตซ์ตั้งเวลา DS1307

คือผมจะตั้งเวลา โดยใช้สวิตต่อออกมาครับ นี้คือโค้ดที่ได้เขียนทั้งหมด



#include "DHT.h"

#include <Wire.h>

#include "RTClib.h"







#include <LiquidCrystal_I2C.h> //ประกาศ Library ของจอ I2C

// Set the LCD address to 0x27 for a 16 chars and 2 line display

LiquidCrystal_I2C lcd(0x3F, 20, 4);

#define DHTPIN 2 // what pin we're connected to



// Uncomment whatever type you're using!

#define DHTTYPE DHT11 // DHT 11

//#define DHTTYPE DHT22 // DHT 22 (AM2302)

//#define DHTTYPE DHT21 // DHT 21 (AM2301)



// Connect pin 1 (on the left) of the sensor to +5V

// Connect pin 2 of the sensor to whatever your DHTPIN is

// Connect pin 4 (on the right) of the sensor to GROUND

// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor



DHT dht(DHTPIN, DHTTYPE);



RTC_DS1307 RTC;



#define speed1 4   

#define speed2 5  

#define speed3 6

#define motor  7

void setup() {

  pinMode(speed1, OUTPUT);

  pinMode(speed2, OUTPUT);

  pinMode(speed3, OUTPUT);

  pinMode(motor, OUTPUT);

  lcd.begin();

// Print a message to the LCD.

//lcd.print("%"); //ฟังก์ชั่นในการกำหนดข้อความที่ต้องการแสดงผล

lcd.setCursor(0, 1); //ฟังก์ชั่นในการกำหนดตำแหน่ง Cursor

//lcd.print("c");

Serial.begin(9600);

Serial.println("DHTxx test!");



dht.begin();

Serial.begin(9600);

    Wire.begin();

   

    RTC.begin();

    //RTC.adjust(DateTime(__DATE__, __TIME__));



  if (! RTC.isrunning()) {

    Serial.println("RTC is NOT running!");

    // following line sets the RTC to the date & time this sketch was compiled

    //RTC.adjust(DateTime(__DATE__, __TIME__));

}

}



void loop() {



// Reading temperature or humidity takes about 250 milliseconds!

// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)

   float h = dht.readHumidity();

   float t = dht.readTemperature();

   

// check if returns are valid, if they are NaN (not a number) then something went wrong!

if (isnan(t) || isnan(h)) {

    Serial.println("Failed to read from DHT");

  } else {

    Serial.print("Humidity: ");

    Serial.print(h);

    Serial.print(" %\t");

    Serial.print("Temperature: ");

    Serial.print(t);

    Serial.println(" *C");

  lcd.setCursor(0, 0); //ฟังก์ชั่นในการกำหนดตำแหน่ง Cursor

lcd.print((float)h);lcd.print("\%");

  lcd.setCursor(0, 1); //ฟังก์ชั่นในการกำหนดตำแหน่ง Cursor

lcd.print((float)t);lcd.print("\c");

lcd.setCursor(1, 0); //ฟังก์ชั่นในการกำหนดตำแหน่ง Cursor



DateTime now = RTC.now();

int Y = now.year();

  int M =now.month();

   int d =now.day();

    int H =now.hour();

      int m =now.minute();

      int s =now.second();



    Serial.print(now.year(), DEC);

    Serial.print('/');

    Serial.print(now.month(), DEC);

    Serial.print('/');

    Serial.print(now.day(), DEC);

    Serial.print(' ');

    Serial.print(now.hour(), DEC);

    Serial.print(':');

    Serial.print(now.minute(), DEC);

    Serial.print(':');

    Serial.print(now.second(), DEC);

    Serial.println();



    Serial.print(" since 1970 = ");

    Serial.print(now.unixtime());

    Serial.print("s = ");

    Serial.print(now.unixtime() / 86400L);

    Serial.println("d");



    // calculate a date which is 7 days and 30 seconds into the future

    DateTime future (now.unixtime() + 7 * 86400L + 30);



    Serial.print(" now + 7d + 30s: ");

    Serial.print(future.year(), DEC);

    Serial.print('/');

    Serial.print(future.month(), DEC);

    Serial.print('/');

    Serial.print(future.day(), DEC);

    Serial.print(' ');

    Serial.print(future.hour(), DEC);

    Serial.print(':');

    Serial.print(future.minute(), DEC);

    Serial.print(':');

    Serial.print(future.second(), DEC);

    Serial.println();



    Serial.println();

    delay(100);

lcd.setCursor(6,2); //ฟังก์ชั่นในการกำหนดตำแหน่ง Cursor

lcd.print(Y);lcd.print(" "); //แสดงปีออกทางหน้าจอ

lcd.setCursor(4,2); //ฟังก์ชั่นในการกำหนดตำแหน่ง Cursor

lcd.print(M);lcd.print("/"); //แสดงเดือนออกทางหน้าจอ

lcd.setCursor(1,2); //ฟังก์ชั่นในการกำหนดตำแหน่ง Cursor

lcd.print(d);lcd.print("/"); //แสดงวันออกทางหน้าจอ

lcd.setCursor(0,3); //ฟังก์ชั่นในการกำหนดตำแหน่ง Cursor

lcd.print(H);lcd.print(":"); //แสดงชั่วโมงออกทางหน้าจอ

lcd.setCursor(3,3); //ฟังก์ชั่นในการกำหนดตำแหน่ง Cursor

lcd.print(m);lcd.print(":"); //แสดงนาทีออกทางหน้าจอ

lcd.setCursor(6,3); //ฟังก์ชั่นในการกำหนดตำแหน่ง Cursor

lcd.print(s);lcd.print(" "); //แสดงวินาที



  }

}

คือผมอยากให้มีสวิตซ์คอยตั้งเวลา ปิด-เปิด มอเตอร์ได้นะครับ ตอนนี้ทำได้แค่แสดงเวลาขึ้น LCD นะครับ จะแนะนำหรือแก้ไขตรงไหนรบกวนผู้รู้ด้วยนะครับ ขอบคุณครับ
คำตอบที่ได้รับเลือกจากเจ้าของกระทู้
ความคิดเห็นที่ 1
ดูจาก code น่าจะเขียน Arduino
ถ้าต้องการตั้งค่า ก็เก็บค่าไว้ใน EEPROM เพื่อเวลาเปิดเครื่องใหม่จะได้เอาค่าเดิมที่ตั้งไว้มาใช้  หรือจะเขียนค่าพื้นฐานไว้กับตัวโปรแกรมเลยก็ได้
ถ้าต้องการสวิตซ์สำหรับตั้งเวลา เมื้อกดสวิตซ์ ก็เข้าสู่ code ในการแก้ไขเวลา แล้วเอาค่าที่แก้ไขสำหรับตรวจสอบว่าถึงเวลาที่ตั้งหรือยัง

EEPROM
https://www.arduino.cc/en/Reference/EEPROM
แสดงความคิดเห็น
โปรดศึกษาและยอมรับนโยบายข้อมูลส่วนบุคคลก่อนเริ่มใช้งาน อ่านเพิ่มเติมได้ที่นี่