浪浪餵食器 優化版
多配置了 LCD螢幕
方便了解目前時鐘模組情況
以及上次餵食的紀錄時間
/*
浪浪自動餵食器
固定每日 0600 1200 1800 透過SG90 開啟飼料口N秒後關閉
*/
#include <Servo.h>
#include <RtcDS1302.h>
#include <LiquidCrystal_PCF8574.h>
//建立馬達對象 feederServo
Servo feederServo;
//連接DS1302模組的3線(IO,SCLK,CE) , 引腳配置 4,5,2
ThreeWire myWire(4,5,2);
//使用模ThreeWire配置建立 RtcDS1302 物件
RtcDS1302<ThreeWire> Rtc(myWire);
//設定I2C位址 配置在 A4 A5 接地 5V
LiquidCrystal_PCF8574 lcd(0x27); //一般記憶體位址都在0x27 如果失敗就改成0x3F
//伺服馬達的連接在~9 WPM引腳
const int servoPin = 9;
const int openDuration = 5000; //設定每次開啟時間為5秒鐘
char dateTimeString[20]; //定義字串緩衝區, 用來容納日期時間
char eatTime[10]="Null";
void setup() {
//Serial.begin(9600); // 初始化串行通信, 用於輸出調適信息
feederServo.attach(servoPin); //將伺服馬達連接到指定的PWM
feederServo.write(0); // 確認馬達角度初始在0度
Rtc.Begin(); //初始化DS1302 模組
pinMode(LED_BUILTIN,OUTPUT); //關閉燈
digitalWrite(LED_BUILTIN,0);
lcd.begin(20,2); //初始化LED面板寬20, 兩行
lcd.setBacklight(1); //設定背板亮度 最大255
lcd.clear();//清除顯示器內容
}
void loop() {
RtcDateTime now = Rtc.GetDateTime(); //獲取當前的日期和時間
//使用sprintf()函數將RtcDateTime型態轉換成字串
sprintf(dateTimeString,"%02d/%02d %02d:%02d",now.Month(),now.Day(),now.Hour(),now.Minute());
lcd.clear();//清除顯示器內容
lcd.setCursor(0,0);//設定游標位置 (字,行)
lcd.print("Now:");
lcd.print(dateTimeString);
lcd.setCursor(0,1);//設定游標位置
lcd.print("Ate:");
lcd.print(eatTime);
lcd.print("STP:6H");
delay(60000);
//觸發條件 6點、12點、18點
if ((now.Hour()==6 && now.Minute()<3)||(now.Hour()==12 && now.Minute()<3)||(now.Hour()==18 && now.Minute()<3)){
feed();
sprintf(eatTime,"%02d:%02d",now.Hour(),now.Minute());
delay(60000); //測試時等待1分鐘
}
}
void feed(){
//Serial.println("Feeding..."); //輸出餵食開始的調適信息
feederServo.write(180); //打開飼料開口
delay(openDuration);
feederServo.write(0); //關閉飼料開口
delay(1000); //等待1秒
//Serial.println("Feeding complete."); //輸出餵食完成
}
標籤: Arduino

0 個意見:
張貼留言
訂閱 張貼留言 [Atom]
<< 首頁