#include <Arduino.h>
#include <SoftwareSerial.h>
#include "Timer.h"
#include <LiquidCrystal.h>
Timer t;
const int buttonPin = 32; // the number of the pushbutton pin
const int motorPin = 13;
const int FeedTime = 10;
const int WatSent = 30;
const int LigPin = 34;
const byte Set = 22, Next= 24, up = 26, down = 28;
// LCD 接腳: rs, enable, d4, d5, d6, d7
// 對應到 Arduino 接腳: 12, 11 , 5, 4, 3, 2
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
// variables will change:
byte buttonState,Seting,Nexting,uping,downing = 0;// variable for reading the pushbutton status
int outreg=0;
int day,hour,minu,sec=0;//conter
int menuChg,SetMode,SetMenuSW=0;//Lcd menu
int Norlin2_hour,Norlin2_minu,Norlin2_sec=0;//LCD Normal line2 desplay
byte Lcd_lin2_En=1;
byte lcd_blink_en=0;
int Fed_en,Wat_en,Lig_en=0; //Output EN
int FeedSpace=8,FedSpinTime=15,WatLigON_Max=500;//Output
int WatLigOF_Max=550,WatLigON_Min=0,WatLigOF_Min=250,LigSpace=4,LigSpinTime=4;
int WatlinNow,WatING=0; //Water
int WatTimer,WatTime_day,WatTime_hour,WatTime_minu,WatTime_sec;
int WatLsTime_day,WatLsTime_hour;
int FeedTimer,SpiningTimer,FedRecipro;//Feed
int LigTimer,LigRecipro=3600,LigSpiningTimer; //Light
void setup() {
// initialize the LED pin as an output:
pinMode(motorPin, OUTPUT);
pinMode(FeedTime, OUTPUT);
pinMode(WatSent, OUTPUT);
pinMode(LigPin, OUTPUT);
pinMode(buttonPin, INPUT);
pinMode(Set, INPUT);
pinMode(Next, INPUT);
pinMode(up, INPUT);
pinMode(down, INPUT);
// 設定 LCD 的行列數目 (2 x 16)
lcd.begin(16, 2);
t.every(2000, LCD_lin2); //call LCD function
t.every(1000, Conter_main);
t.every(1000, WaterSensor);
t.every(1000, Water_main);
t.every(1000, Feed_main);
t.every(1000, Light);
t.every(100, LCD_main); //call LCD function
t.every(100, Debounce_main); //call LCD function
Serial.begin(9600); //串列埠功能使用初始化
}
void loop(){
t.update();
}
void Project_main() {
// check if the pushbutton is pressed.
// if it is, the buttonState is HIGH:
if (buttonState == HIGH) {
digitalWrite(motorPin,1);
digitalWrite(FeedTime,1);
}
else {
analogWrite(FeedTime,map(hour, 0, 7, 0, 255));
digitalWrite(motorPin,0);
Conter_main(); //call Conter function
}
}
void LCD_main() {
// 將游標設到 column 0, line 0
lcd.setCursor(0, 0);
switch(Seting) {
case 0:
lcd.noBlink();
Lcd_lin2_En=1;
LCD_Hompage();
break;
case 255:
Lcd_lin2_En=0;
Setting();
LCD_Setpage();
break;
}
if (Lcd_lin2_En==1){
// 將游標設到 column 0, line 1
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
switch(menuChg) {
case 0:
NorFed_Disp();
break;
case 1:
NorWat_Disp();
break;
case 2:
NorLig_Disp();
break;
case 3:
NorWatLin_Disp();
break;
}
if (menuChg<=2){
switch(menuChg) {
case 0://Feed
Norlin2_hour=FedRecipro/60 /60;
Norlin2_minu=FedRecipro/60 %60;
Norlin2_sec =FedRecipro %60 %60;
break;
case 1://Water
Norlin2_hour=0;
Norlin2_minu=WatLsTime_day;
Norlin2_sec=WatLsTime_hour;
break;
case 2://Lig
Norlin2_hour=LigRecipro/60 /60;
Norlin2_minu=LigRecipro/60 %60;
Norlin2_sec=LigRecipro %60 %60;
break;
}
lcd.setCursor(7, 1);
lcd.print("_");
lcd.print(Norlin2_hour);
lcd.setCursor(10, 1);
lcd.print(":");
lcd.print(Norlin2_minu);
lcd.setCursor(13, 1);
lcd.print(":");
lcd.print(Norlin2_sec);
}
else{
lcd.print(WatlinNow);
}
}
}
void LCD_Hompage() {
lcd.print("Day:");
lcd.print(day);
lcd.setCursor(7, 0);
lcd.print("_");
lcd.print(hour);
lcd.setCursor(10, 0);
lcd.print(":");
lcd.print(minu);
lcd.setCursor(13, 0);
lcd.print(":");
lcd.print(sec);
}
void Setting(){ //reflash time = 100ms
if (Nexting==1){
lcd.clear();
if (SetMode==7){
SetMode=0;
}
else{
SetMode=SetMode+1;
}
Serial.println(SetMode);
}
SetMenuSW=SetMode/2;
switch(SetMode){
case 0: //hour
if (FeedSpace>=9 && (uping==1) || (FeedSpace<=0)&&(downing==1)){
lcd.blink();
}
else{
if (uping==1){
FeedSpace=FeedSpace+1;
}
else if (downing==1){
FeedSpace=FeedSpace-1;
}
}
break;
case 1://sec
if (FedSpinTime>=59 && (uping==1)|| FedSpinTime<=0&&(downing==1)){
lcd.blink();
}
else{
if (uping==1){
FedSpinTime=FedSpinTime+1;
}
else if (downing==1){
FedSpinTime=FedSpinTime-1;
}
}
break;
case 2://
if (WatLigON_Max>=999 && (uping==1) || WatLigON_Max<=WatLigON_Min+10&&(downing==1)){
lcd.blink();
}
else{
if (uping==1){
WatLigON_Max=WatLigON_Max+10;
}
else if (downing==1){
WatLigON_Max=WatLigON_Max-10;
}
}
break;
case 3:
if (WatLigOF_Max>=999 && (uping==1) || WatLigOF_Max<=WatLigOF_Min+10&&(downing==1)){
lcd.blink();
}
else{
if (uping==1){
WatLigOF_Max=WatLigOF_Max+10;
}
else if (downing==1){
WatLigOF_Max=WatLigOF_Max-10;
}
}
break;
case 4:
if (WatLigON_Min>=WatLigON_Max-10 && (uping==1) || WatLigON_Min<=0&&(downing==1)){
lcd.blink();
}
else{
if (uping==1){
WatLigON_Min=WatLigON_Min+10;
}
else if (downing==1){
WatLigON_Min=WatLigON_Min-10;
}
}
break;
case 5:
if (WatLigOF_Min>=WatLigOF_Max-10 && (uping==1) || WatLigOF_Min<=0&&(downing==1)){
lcd.blink();
}
else{
if (uping==1){
WatLigOF_Min=WatLigOF_Min+10;
}
else if (downing==1){
WatLigOF_Min=WatLigOF_Min-10;
}
}
break;
case 6://hour
if (LigSpace>=23 && (uping==1) || LigSpace<=0&&(downing==1)){
lcd.blink();
}
else{
if (uping==1){
LigSpace=LigSpace+1;
}
else if (downing==1){
LigSpace=LigSpace-1;
}
}
break;
case 7://hour
if (LigSpinTime>=23 && (uping==1) || LigSpinTime<=0&&(downing==1)){
lcd.blink();
}
else{
if (uping==1){
LigSpinTime=LigSpinTime+1;
}
else if (downing==1){
LigSpinTime=LigSpinTime-1;
}
}
break;
}
}
void LCD_Setpage() {
switch(SetMenuSW){
case 0 :
SetFed_Disp();
break;
case 1:
SetWat_Disp();
break;
case 2:
SetWat2_Disp();
break;
case 3:
SetLig_Disp();
break;
}
lcd_blink_en=lcd_blink_en+1; //游標閃爍智能
if (lcd_blink_en%2==0){
switch(SetMode){
case 0:
lcd.setCursor(10, 0);
break;
case 1:
lcd.setCursor(10, 1);
break;
case 2:
lcd.setCursor(13, 0);
break;
case 4:
lcd.setCursor(13, 0);
break;
case 3:
lcd.setCursor(13, 1);
break;
case 5:
lcd.setCursor(13, 1);
break;
case 6:
lcd.setCursor(9, 0);
break;
case 7:
lcd.setCursor(9, 1);
break;
}
lcd.blink();
}
else{
lcd.noBlink();
}
}
void SetFed_Disp(){
lcd.print("FeedSpace:");
lcd.print(FeedSpace);
lcd.setCursor(12, 0);
lcd.print("Hour");
lcd.setCursor(0, 1);
lcd.print("SpinTime :");
lcd.print(FedSpinTime);
lcd.setCursor(13, 1);
lcd.print("Sec");
}
void SetWat_Disp(){
lcd.print("WatLigON_Max:");
lcd.print(WatLigON_Max);
lcd.setCursor(0, 1);
lcd.print("WatLigOF_Max");
lcd.setCursor(12, 1);
lcd.print(":");
lcd.print(WatLigOF_Max);
}
void SetWat2_Disp(){
lcd.print("WatLigON_Min:");
lcd.print(WatLigON_Min);
lcd.setCursor(0, 1);
lcd.print("WatLigOF_Min");
lcd.setCursor(12, 1);
lcd.print(":");
lcd.print(WatLigOF_Min);
}
void SetLig_Disp(){
lcd.print("LigSpace:");
lcd.print(LigSpace);
lcd.setCursor(12, 0);
lcd.print("Hour");
lcd.setCursor(0, 1);
lcd.print("SpinTime:");
lcd.print(LigSpinTime);
lcd.setCursor(12, 1);
lcd.print("Hour");
}
void LCD_lin2() {
if (menuChg==3){
menuChg=0;
}
else{
menuChg=menuChg+1;
}//Change page
}
void NorFed_Disp(){
lcd.print("Fed:");
if (Fed_en==1){
lcd.print(" ON");
}
else{
lcd.print("OFF");
}
}
void NorWat_Disp(){
lcd.print("Wat:");
if (Wat_en==1){
lcd.print(" ON");
}
else{
lcd.print("OFF");
}
lcd.setCursor(9, 1);
}
void NorLig_Disp(){
lcd.print("Lig:");
if (Lig_en==1){
lcd.print(" ON");
}
else{
lcd.print("OFF");
}
lcd.setCursor(9, 1);
}
void NorWatLin_Disp(){
lcd.print("WatLin:");
}
void Conter_main() {
// counter:
if (sec==59) {
lcd.clear();
sec=0;
if (minu==59){
minu=0;
if(hour==23){
hour=0;
day=day+1;/*
delay (15000);
sec=15;*/
}
else{
hour=hour+1;
}
}
else{
minu=minu+1;
}
}
else{
sec=sec+1;
}
}
void Debounce_main() {
// read the state of the pushbutton value:
buttonState = digitalRead(buttonPin);
if (digitalRead(Set)==1) {
Seting= ~Seting;
lcd.clear();
}
if (digitalRead(up)||digitalRead(down) ==1) {
lcd.clear();
}
Nexting= digitalRead(Next);
uping= digitalRead(up);
downing= digitalRead(down);
}
void WaterSensor(){
WatlinNow=analogRead(0);
}
/* Output Enable */
void Water_main(){
if (Lig_en==0){//WatLigOFF
if (WatlinNow<=WatLigOF_Min){
Wat_en=1;
}
if (WatlinNow>=WatLigOF_Max){
Wat_en=0;
}
if (Wat_en==1){//Sent Water
digitalWrite(WatSent,1);
}
else{
digitalWrite(WatSent,0);
}
}
else{//WatLigON
if (WatlinNow<=WatLigON_Min){
Wat_en=1;
}
if (WatlinNow>=WatLigON_Max){
Wat_en=0;
}
if (Wat_en==1){//Sent Water
digitalWrite(WatSent,1);
}
else{
digitalWrite(WatSent,0);
}
}
if (Wat_en==1){
WatLsTime_day=WatTime_day;
WatLsTime_hour=WatTime_hour;
WatTime_day=0;
WatTime_hour=0;
WatTime_minu=0;
WatTime_sec=0;
}
else{
// int WatTimer,WatLsTime,WatTime_hour,WatTime_minu,WatTime_sec;
if (WatTime_sec==59) {
WatTime_sec=0;
if (minu==59){
WatTime_minu=0;
if(WatTime_hour==23){
WatTime_hour=0;
WatTime_day=WatTime_day+1;
}
else{
WatTime_hour=WatTime_hour+1;
}
}
else{
WatTime_minu=WatTime_minu+1;
}
}
else{
WatTime_sec=WatTime_sec+1;
}
}
}
int test_fed;
void Feed_main(){
if (buttonState==1){
digitalWrite(motorPin,1); //Feeding
}
else{
if (test_fed==1){
test_fed=0;
// 設定 LCD 的行列數目 (2 x 16)
lcd.begin(16, 2);
}
FeedTimer=FeedTimer+1;
FedRecipro=FeedSpace*60*60-FeedTimer;
if(FeedTimer>=FeedSpace*60*60){
Fed_en=1;
FeedTimer=0;
}
if(Fed_en==1){
if (SpiningTimer>=FedSpinTime){
SpiningTimer=0;
Fed_en=0;
}
else{
digitalWrite(motorPin,1); //Feeding
SpiningTimer=SpiningTimer+1;
test_fed=1;
}
}
else{digitalWrite(motorPin,0);}//Stop Feed
}
}
void Light(){
LigTimer=LigTimer+1;
if(Lig_en==1){
digitalWrite(LigPin,1); //Liging
if(LigRecipro==0){
Lig_en=0;
LigTimer=0;
LigRecipro=3600;
}
else{LigRecipro=LigSpinTime*60*60-LigTimer; }//倒數
}
else{
digitalWrite(LigPin,0);//Stop Lig
if(LigRecipro==0){
Lig_en=1;
LigTimer=0;
LigRecipro=3600;
}
else{LigRecipro=LigSpace*60*60-LigTimer; //倒數
}
}
}
#include <Arduino.h>
#include <SoftwareSerial.h>
#include "Timer.h"
#include <LiquidCrystal.h>
Timer t;
const int buttonPin = 32; // the number of the pushbutton pin
const int motorPin = 13;
const int FeedTime = 10;
const int WatSent = 30;
const int LigPin = 34;
const byte Set = 22, Next= 24, up = 26, down = 28;
// LCD 接腳: rs, enable, d4, d5, d6, d7
// 對應到 Arduino 接腳: 12, 11 , 5, 4, 3, 2
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
// variables will change:
byte buttonState,Seting,Nexting,uping,downing = 0;// variable for reading the pushbutton status
int outreg=0;
int day,hour,minu,sec=0;//conter
int menuChg,SetMode,SetMenuSW=0;//Lcd menu
int Norlin2_hour,Norlin2_minu,Norlin2_sec=0;//LCD Normal line2 desplay
byte Lcd_lin2_En=1;
byte lcd_blink_en=0;
int Fed_en,Wat_en,Lig_en=0; //Output EN
int FeedSpace=8,FedSpinTime=15,WatLigON_Max=500;//Output
int WatLigOF_Max=550,WatLigON_Min=0,WatLigOF_Min=250,LigSpace=4,LigSpinTime=4;
int WatlinNow,WatING=0; //Water
int WatTimer,WatTime_day,WatTime_hour,WatTime_minu,WatTime_sec;
int WatLsTime_day,WatLsTime_hour;
int FeedTimer,SpiningTimer,FedRecipro;//Feed
int LigTimer,LigRecipro=3600,LigSpiningTimer; //Light
void setup() {
// initialize the LED pin as an output:
pinMode(motorPin, OUTPUT);
pinMode(FeedTime, OUTPUT);
pinMode(WatSent, OUTPUT);
pinMode(LigPin, OUTPUT);
pinMode(buttonPin, INPUT);
pinMode(Set, INPUT);
pinMode(Next, INPUT);
pinMode(up, INPUT);
pinMode(down, INPUT);
// 設定 LCD 的行列數目 (2 x 16)
lcd.begin(16, 2);
t.every(2000, LCD_lin2); //call LCD function
t.every(1000, Conter_main);
t.every(1000, WaterSensor);
t.every(1000, Water_main);
t.every(1000, Feed_main);
t.every(1000, Light);
t.every(100, LCD_main); //call LCD function
t.every(100, Debounce_main); //call LCD function
Serial.begin(9600); //串列埠功能使用初始化
}
void loop(){
t.update();
}
void Project_main() {
// check if the pushbutton is pressed.
// if it is, the buttonState is HIGH:
if (buttonState == HIGH) {
digitalWrite(motorPin,1);
digitalWrite(FeedTime,1);
}
else {
analogWrite(FeedTime,map(hour, 0, 7, 0, 255));
digitalWrite(motorPin,0);
Conter_main(); //call Conter function
}
}
void LCD_main() {
// 將游標設到 column 0, line 0
lcd.setCursor(0, 0);
switch(Seting) {
case 0:
lcd.noBlink();
Lcd_lin2_En=1;
LCD_Hompage();
break;
case 255:
Lcd_lin2_En=0;
Setting();
LCD_Setpage();
break;
}
if (Lcd_lin2_En==1){
// 將游標設到 column 0, line 1
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
switch(menuChg) {
case 0:
NorFed_Disp();
break;
case 1:
NorWat_Disp();
break;
case 2:
NorLig_Disp();
break;
case 3:
NorWatLin_Disp();
break;
}
if (menuChg<=2){
switch(menuChg) {
case 0://Feed
Norlin2_hour=FedRecipro/60 /60;
Norlin2_minu=FedRecipro/60 %60;
Norlin2_sec =FedRecipro %60 %60;
break;
case 1://Water
Norlin2_hour=0;
Norlin2_minu=WatLsTime_day;
Norlin2_sec=WatLsTime_hour;
break;
case 2://Lig
Norlin2_hour=LigRecipro/60 /60;
Norlin2_minu=LigRecipro/60 %60;
Norlin2_sec=LigRecipro %60 %60;
break;
}
lcd.setCursor(7, 1);
lcd.print("_");
lcd.print(Norlin2_hour);
lcd.setCursor(10, 1);
lcd.print(":");
lcd.print(Norlin2_minu);
lcd.setCursor(13, 1);
lcd.print(":");
lcd.print(Norlin2_sec);
}
else{
lcd.print(WatlinNow);
}
}
}
void LCD_Hompage() {
lcd.print("Day:");
lcd.print(day);
lcd.setCursor(7, 0);
lcd.print("_");
lcd.print(hour);
lcd.setCursor(10, 0);
lcd.print(":");
lcd.print(minu);
lcd.setCursor(13, 0);
lcd.print(":");
lcd.print(sec);
}
void Setting(){ //reflash time = 100ms
if (Nexting==1){
lcd.clear();
if (SetMode==7){
SetMode=0;
}
else{
SetMode=SetMode+1;
}
Serial.println(SetMode);
}
SetMenuSW=SetMode/2;
switch(SetMode){
case 0: //hour
if (FeedSpace>=9 && (uping==1) || (FeedSpace<=0)&&(downing==1)){
lcd.blink();
}
else{
if (uping==1){
FeedSpace=FeedSpace+1;
}
else if (downing==1){
FeedSpace=FeedSpace-1;
}
}
break;
case 1://sec
if (FedSpinTime>=59 && (uping==1)|| FedSpinTime<=0&&(downing==1)){
lcd.blink();
}
else{
if (uping==1){
FedSpinTime=FedSpinTime+1;
}
else if (downing==1){
FedSpinTime=FedSpinTime-1;
}
}
break;
case 2://
if (WatLigON_Max>=999 && (uping==1) || WatLigON_Max<=WatLigON_Min+10&&(downing==1)){
lcd.blink();
}
else{
if (uping==1){
WatLigON_Max=WatLigON_Max+10;
}
else if (downing==1){
WatLigON_Max=WatLigON_Max-10;
}
}
break;
case 3:
if (WatLigOF_Max>=999 && (uping==1) || WatLigOF_Max<=WatLigOF_Min+10&&(downing==1)){
lcd.blink();
}
else{
if (uping==1){
WatLigOF_Max=WatLigOF_Max+10;
}
else if (downing==1){
WatLigOF_Max=WatLigOF_Max-10;
}
}
break;
case 4:
if (WatLigON_Min>=WatLigON_Max-10 && (uping==1) || WatLigON_Min<=0&&(downing==1)){
lcd.blink();
}
else{
if (uping==1){
WatLigON_Min=WatLigON_Min+10;
}
else if (downing==1){
WatLigON_Min=WatLigON_Min-10;
}
}
break;
case 5:
if (WatLigOF_Min>=WatLigOF_Max-10 && (uping==1) || WatLigOF_Min<=0&&(downing==1)){
lcd.blink();
}
else{
if (uping==1){
WatLigOF_Min=WatLigOF_Min+10;
}
else if (downing==1){
WatLigOF_Min=WatLigOF_Min-10;
}
}
break;
case 6://hour
if (LigSpace>=23 && (uping==1) || LigSpace<=0&&(downing==1)){
lcd.blink();
}
else{
if (uping==1){
LigSpace=LigSpace+1;
}
else if (downing==1){
LigSpace=LigSpace-1;
}
}
break;
case 7://hour
if (LigSpinTime>=23 && (uping==1) || LigSpinTime<=0&&(downing==1)){
lcd.blink();
}
else{
if (uping==1){
LigSpinTime=LigSpinTime+1;
}
else if (downing==1){
LigSpinTime=LigSpinTime-1;
}
}
break;
}
}
void LCD_Setpage() {
switch(SetMenuSW){
case 0 :
SetFed_Disp();
break;
case 1:
SetWat_Disp();
break;
case 2:
SetWat2_Disp();
break;
case 3:
SetLig_Disp();
break;
}
lcd_blink_en=lcd_blink_en+1; //游標閃爍智能
if (lcd_blink_en%2==0){
switch(SetMode){
case 0:
lcd.setCursor(10, 0);
break;
case 1:
lcd.setCursor(10, 1);
break;
case 2:
lcd.setCursor(13, 0);
break;
case 4:
lcd.setCursor(13, 0);
break;
case 3:
lcd.setCursor(13, 1);
break;
case 5:
lcd.setCursor(13, 1);
break;
case 6:
lcd.setCursor(9, 0);
break;
case 7:
lcd.setCursor(9, 1);
break;
}
lcd.blink();
}
else{
lcd.noBlink();
}
}
void SetFed_Disp(){
lcd.print("FeedSpace:");
lcd.print(FeedSpace);
lcd.setCursor(12, 0);
lcd.print("Hour");
lcd.setCursor(0, 1);
lcd.print("SpinTime :");
lcd.print(FedSpinTime);
lcd.setCursor(13, 1);
lcd.print("Sec");
}
void SetWat_Disp(){
lcd.print("WatLigON_Max:");
lcd.print(WatLigON_Max);
lcd.setCursor(0, 1);
lcd.print("WatLigOF_Max");
lcd.setCursor(12, 1);
lcd.print(":");
lcd.print(WatLigOF_Max);
}
void SetWat2_Disp(){
lcd.print("WatLigON_Min:");
lcd.print(WatLigON_Min);
lcd.setCursor(0, 1);
lcd.print("WatLigOF_Min");
lcd.setCursor(12, 1);
lcd.print(":");
lcd.print(WatLigOF_Min);
}
void SetLig_Disp(){
lcd.print("LigSpace:");
lcd.print(LigSpace);
lcd.setCursor(12, 0);
lcd.print("Hour");
lcd.setCursor(0, 1);
lcd.print("SpinTime:");
lcd.print(LigSpinTime);
lcd.setCursor(12, 1);
lcd.print("Hour");
}
void LCD_lin2() {
if (menuChg==3){
menuChg=0;
}
else{
menuChg=menuChg+1;
}//Change page
}
void NorFed_Disp(){
lcd.print("Fed:");
if (Fed_en==1){
lcd.print(" ON");
}
else{
lcd.print("OFF");
}
}
void NorWat_Disp(){
lcd.print("Wat:");
if (Wat_en==1){
lcd.print(" ON");
}
else{
lcd.print("OFF");
}
lcd.setCursor(9, 1);
}
void NorLig_Disp(){
lcd.print("Lig:");
if (Lig_en==1){
lcd.print(" ON");
}
else{
lcd.print("OFF");
}
lcd.setCursor(9, 1);
}
void NorWatLin_Disp(){
lcd.print("WatLin:");
}
void Conter_main() {
// counter:
if (sec==59) {
lcd.clear();
sec=0;
if (minu==59){
minu=0;
if(hour==23){
hour=0;
day=day+1;/*
delay (15000);
sec=15;*/
}
else{
hour=hour+1;
}
}
else{
minu=minu+1;
}
}
else{
sec=sec+1;
}
}
void Debounce_main() {
// read the state of the pushbutton value:
buttonState = digitalRead(buttonPin);
if (digitalRead(Set)==1) {
Seting= ~Seting;
lcd.clear();
}
if (digitalRead(up)||digitalRead(down) ==1) {
lcd.clear();
}
Nexting= digitalRead(Next);
uping= digitalRead(up);
downing= digitalRead(down);
}
void WaterSensor(){
WatlinNow=analogRead(0);
}
/* Output Enable */
void Water_main(){
if (Lig_en==0){//WatLigOFF
if (WatlinNow<=WatLigOF_Min){
Wat_en=1;
}
if (WatlinNow>=WatLigOF_Max){
Wat_en=0;
}
if (Wat_en==1){//Sent Water
digitalWrite(WatSent,1);
}
else{
digitalWrite(WatSent,0);
}
}
else{//WatLigON
if (WatlinNow<=WatLigON_Min){
Wat_en=1;
}
if (WatlinNow>=WatLigON_Max){
Wat_en=0;
}
if (Wat_en==1){//Sent Water
digitalWrite(WatSent,1);
}
else{
digitalWrite(WatSent,0);
}
}
if (Wat_en==1){
WatLsTime_day=WatTime_day;
WatLsTime_hour=WatTime_hour;
WatTime_day=0;
WatTime_hour=0;
WatTime_minu=0;
WatTime_sec=0;
}
else{
// int WatTimer,WatLsTime,WatTime_hour,WatTime_minu,WatTime_sec;
if (WatTime_sec==59) {
WatTime_sec=0;
if (minu==59){
WatTime_minu=0;
if(WatTime_hour==23){
WatTime_hour=0;
WatTime_day=WatTime_day+1;
}
else{
WatTime_hour=WatTime_hour+1;
}
}
else{
WatTime_minu=WatTime_minu+1;
}
}
else{
WatTime_sec=WatTime_sec+1;
}
}
}
int test_fed;
void Feed_main(){
if (buttonState==1){
digitalWrite(motorPin,1); //Feeding
}
else{
if (test_fed==1){
test_fed=0;
// 設定 LCD 的行列數目 (2 x 16)
lcd.begin(16, 2);
}
FeedTimer=FeedTimer+1;
FedRecipro=FeedSpace*60*60-FeedTimer;
if(FeedTimer>=FeedSpace*60*60){
Fed_en=1;
FeedTimer=0;
}
if(Fed_en==1){
if (SpiningTimer>=FedSpinTime){
SpiningTimer=0;
Fed_en=0;
}
else{
digitalWrite(motorPin,1); //Feeding
SpiningTimer=SpiningTimer+1;
test_fed=1;
}
}
else{digitalWrite(motorPin,0);}//Stop Feed
}
}
void Light(){
LigTimer=LigTimer+1;
if(Lig_en==1){
digitalWrite(LigPin,1); //Liging
if(LigRecipro==0){
Lig_en=0;
LigTimer=0;
LigRecipro=3600;
}
else{LigRecipro=LigSpinTime*60*60-LigTimer; }//倒數
}
else{
digitalWrite(LigPin,0);//Stop Lig
if(LigRecipro==0){
Lig_en=1;
LigTimer=0;
LigRecipro=3600;
}
else{LigRecipro=LigSpace*60*60-LigTimer; //倒數
}
}
}
文章標籤
全站熱搜
留言列表