PIXNET Logo登入

兩隻小豬

跳到主文

哈囉~大家好,我們是兩隻小豬🐷🐷兩個愛吃喝玩樂的夫妻~

最常在板橋走跳,發掘在地美食!

偶爾也會跑其他外縣市,喜愛分享各地美食&旅遊~

部落格全站分類:美食情報

  • 相簿
  • 部落格
  • 留言
  • 名片
  • 7月 01 週三 201517:24
  • 申請ThingSpeak帳戶教學

ThingSpeak1.jpg
  申請ThingSpeak帳戶教學
1.進入ThingSpeak網站,是免費的網路空間。
2.網站預設首頁,按下正中間"Get Started Now"
(繼續閱讀...)
文章標籤

兩隻小豬 發表在 痞客邦 留言(0) 人氣(10,906)

  • 個人分類:教學
▲top
  • 7月 01 週三 201516:39
  • WIFI_OnlineTest_blocking

#include <SoftwareSerial.h>
#define _baudrate 9600
#define _rxpin 4
#define _txpin 5
#include "Timer.h"
Timer t;
SoftwareSerial debug( _rxpin, _txpin ); // RX, TX
//*-- IoT Information
#define SSID "Huang"
#define PASS "e53asus0211"
#define IP "184.106.153.149" // ThingSpeak IP Address: 184.106.153.149
// 使用 GET 傳送資料的格式
// GET /update?key=[THINGSPEAK_KEY]&field1=[data 1]&filed2=[data 2]...;
String GET = "GET /update?key=MIN085MR4XATH8VD";

void setup() {
Serial.begin( _baudrate );
debug.begin( _baudrate );
t.every(100, Wifi_main);
}
void loop() {
t.update();
}
int Wifi_State,delaytime,ErrorCount,W=12,D=34;
String cmd;
void Wifi_main(){
switch (Wifi_State) {
case 0: //-----------------------------------------------initial sent AT test
sendDebug("AT");
Wifi_State=1;
break;
case 1:
if (delaytime==10){ //delay 1 sec
delaytime=0;
if(debug.find("OK")){ //test success
Serial.println("RECEIVED: OK\nData ready to sent!");
Wifi_State=2; //next setting wifi mode
}
else{ //test fail
Serial.println("NO RESEPONCE!");
Wifi_State=7; //go back reset delay
}
}
else{delaytime++;}
break;
case 2://-----------------------------------------------setting wifi mode
debug.println("AT+CWMODE=1");
Wifi_State=3; //next setting wifi mode
break;
case 3:
if (delaytime==20){ //delay 2 sec
delaytime=0;
cmd="AT+CWJAP=\"";
cmd+=SSID;
cmd+="\",\"";
cmd+=PASS;
cmd+="\"";
sendDebug(cmd);
Wifi_State=4; //next check wifi respones after delay 5 sec
}
else{delaytime++;}
break;
case 4:
if (delaytime==50){ //delay 5 sec
delaytime=0;
if(debug.find("OK")){
Serial.println("RECEIVED: OK");
Wifi_State=5; //next sent data to the clould
}
else{
Serial.println("RECEIVED: Error");
Wifi_State=2; //back
}
}
else{delaytime++;}
break;
case 5: //-----------------------------------------------sent data to the clould
// 設定 ESP8266 作為 Client 端
cmd = "AT+CIPSTART=\"TCP\",\"";
cmd += IP;
cmd += "\",80";
sendDebug(cmd);
if(debug.find("Error" )){Serial.print( "RECEIVED: Error\nExit1" );}
cmd = GET + "&field1=" + String(W) + "&field2=" + String(D) +"\r\n";
debug.print( "AT+CIPSEND=" );
debug.println( cmd.length() );
if(debug.find( ">" ) ){
Serial.print(">");
Serial.print(cmd);
debug.print(cmd);
}
else{debug.print( "AT+CIPCLOSE" );}
if( debug.find("OK") ){
Serial.println( "RECEIVED: OK" );
Wifi_State=6; //next go space and wait
}
else{
Serial.println( "RECEIVED: Error" );
if (ErrorCount==5){
ErrorCount=0;
Wifi_State=7; //there was something wrong must be go back reset.
}
else{
Wifi_State=6; //restart
ErrorCount++;
}
}
break;
case 6: //-----------------------------------------------end sent
if (delaytime==50){ //delay 5 sec
delaytime=0;
Wifi_State=5; //back
}
else{delaytime++;}
break;
case 7 : //-----------------------------------------------go back reset delay
if (delaytime==50){ //delay 5 sec
delaytime=0;
Wifi_State=0; //back
}
else{delaytime++;}
break;
}
}
void sendDebug(String sent_cmd)
{
Serial.print("SEND: ");
Serial.println(sent_cmd);
debug.println(sent_cmd);
}

(繼續閱讀...)
文章標籤

兩隻小豬 發表在 痞客邦 留言(0) 人氣(328)

  • 個人分類:Code
▲top
  • 7月 01 週三 201501:42
  • 全自動程式碼

#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; //倒數
}
}
}
(繼續閱讀...)
文章標籤

兩隻小豬 發表在 痞客邦 留言(0) 人氣(1,402)

  • 個人分類:Code
▲top
  • 7月 01 週三 201501:34
  • Master主控室程式碼

#include <SoftwareSerial.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include "Timer.h"
SoftwareSerial I2CBT(8,9); //Tx & Rx
#define ONE_WIRE_BUS 6
Timer t;
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
//-----------------------------------------------------/
const int analogInPin = A0;
const int buttonPin = 7; // the number of the pushbutton pin
const int motorPin = 10;
const int WatSent = 11;
const int LigPin = 12;
//-----------------------------------------------------/
byte buttonState=0;
int day,hour,minu,sec=0;//conter
int WaterSensor=0; //Water
int WatTimer,WatTime_day,WatTime_hour,WatTime_minu,WatTime_sec;
int FeedTimer,SpiningTimer,FedRecipro;//Feed
int LigTimer,LigSpiningTimer; //Light

int Fed_en,Wat_en,Lig_en=0; //Output EN
int FeedSpace=8,FedSpinTime=15,WatLigON_Max=500;//Output
int WatLsTime_day,WatLsTime_hour;
int WatLigOF_Max=550,WatLigON_Min=0,WatLigOF_Min=250,LigSpace=4,LigSpinTime=4;
int LigRecipro=3600; //Light
//-----------------------------------------------------/
int insize;
int count;
byte cmmd[10];
void setup() {
pinMode(motorPin, OUTPUT);
pinMode(WatSent, OUTPUT);
pinMode(LigPin, OUTPUT);
Serial.begin(9600);
I2CBT.begin(115200);
t.every(100, BlueTooth);
t.every(1000, Conter_main);
t.every(1000, WaterSensor_main);
t.every(1000, Water_main);
t.every(1000, Feed_main);
t.every(1000, Light);
t.every(100, Debounce_main);
}

void loop() {
t.update();
}
void BlueTooth(){
if (I2CBT.available()) {
char TheBlueToothData;
TheBlueToothData=char(I2CBT.read());
Serial.println("");
Serial.print("TheBlueToothData = ");
Serial.println(TheBlueToothData);
if (TheBlueToothData=='A'){
I2CBT.write("A");//A = Send Require
byte Data[35];
//---------------------------------------------------------------------------------------
//Data 編碼2位數極限65025
//1.現在時間 day3 hour2 minu2 sec2
//2.下次餵食時間
//3.下次開燈(抽水馬達)的時間
//4.上次補水的時間
//5.水位
//6.水溫
//7.輸出智能 Fed_en,Wat_en,Lig_en
//8.餵食設定 FeedSpace=8,FedSpinTime=15
//9.補水設定 WatLigOF_Min=250,WatLigOF_Max=550,WatLigON_Min=0,WatLigON_Max=500
//10.抽水馬達設定 LigRecipro=3600,LigSpace=4,LigSpinTime=4
//---------------------------------------------------------------------------------------
//第一筆:現在時間 [2位數][1位數][1位數][1位數]
Data[0]=(int)(day/255);
Data[1]=day%255;
Data[2]=hour;
Data[3]=minu;
Data[4]=sec;
//第二筆:下次餵食時間 [2位數]max:43200
Data[5]=(int)(FedRecipro/255);
Data[6]=FedRecipro%255;
//第三筆:下次開燈(抽水馬達)的時間 [2位數]max:43200
Data[7]=(int)(LigRecipro/255);
Data[8]=LigRecipro%255;
//第四筆:上次補水的時間 [1位數][1位數][1位數][1位數] [1位數][1位數]
//int ,;
Data[9]=WatTime_day;
Data[10]=WatTime_hour;
Data[11]=WatTime_minu;
Data[12]=WatTime_sec;
Data[13]=WatLsTime_day;
Data[14]=WatLsTime_hour;
//第五筆:水位 [2位數]
Data[15]=(int)(WaterSensor/255);
Data[16]=WaterSensor%255;
//第六筆:水溫 [1位數] [,] [1位數]
Data[17]='T';
Data[18]=(int)sensors.getTempCByIndex(0);
Data[19]=(int)(sensors.getTempCByIndex(0)*10)%10;
//第七筆:輸出智能 Fed_en,Wat_en,Lig_en =>421編碼共用
Data[20]= 4*Fed_en+2*Wat_en+Lig_en;
//第八筆:餵食設定 FeedSpace=8,FedSpinTime=15
Data[21]=FeedSpace;
Data[22]=FedSpinTime;
//第九筆:補水設定 WatLigOF_Min=250,WatLigOF_Max=550,WatLigON_Min=0,WatLigON_Max=500
Data[23]=WatLigOF_Min;
Data[24]=WatLigOF_Max;
Data[25]=WatLigON_Min;
Data[26]=WatLigON_Max;
//第十筆:抽水馬達設定 LigSpace=4,LigSpinTime=4
Data[27]=LigSpace;
Data[28]=LigSpinTime;
//
for(int j=0;j<=35;j++){
Serial.print(Data[j]);
Serial.print(" ");
I2CBT.write(Data[j]);
}
Serial.println(" ");
}
else if (TheBlueToothData=='B'){
insize=I2CBT.available(); //讀取藍牙訊息
Serial.print("input size = ");
Serial.println(insize);
for (int i=0; i<insize; i++){
count++;
Serial.print(cmmd[count]=(I2CBT.read()));
Serial.print(" ");
}
Serial.print("Counter= ");
Serial.println(count);
Serial.println("cmmd:");
// 讀取所有資料,並顯示在 LCD
for(int j=0;j<=count;j++){
Serial.print(char(cmmd[j]));
Serial.print(" ");
}
//---------------------------------------------------------------------------------------
//cmmd address+1
//1.餵食設定 FeedSpace=8,FedSpinTime=15
//2.補水設定 WatLigOF_Min=250,WatLigOF_Max=550,WatLigON_Min=0,WatLigON_Max=500
//3.抽水馬達設定 LigRecipro=3600,LigSpace=4,LigSpinTime=4
//---------------------------------------------------------------------------------------
//第一筆:餵食設定 FeedSpace=8,FedSpinTime=15
FeedSpace=cmmd[1];
FedSpinTime=cmmd[2];
//第二筆:補水設定 WatLigOF_Min=250,WatLigOF_Max=550,WatLigON_Min=0,WatLigON_Max=500
WatLigOF_Min=cmmd[3];
WatLigOF_Max=cmmd[4];
WatLigON_Min=cmmd[5];
WatLigON_Max=cmmd[6];
//第三筆:抽水馬達設定 LigRecipro=3600,LigSpace=4,LigSpinTime=4
LigSpace=cmmd[7];
LigSpinTime=cmmd[8];
//
Initalize();
I2CBT.write("B");//B = Send Requier
}
}
}
void Initalize(){
count=0;
insize=0;
}
void Conter_main() {
// counter:
if (sec==59) {
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 WaterSensor_main(){
WaterSensor = analogRead(analogInPin); //3位
sensors.requestTemperatures();
}
/* Output Enable */
void Water_main(){
if (Lig_en==0){//WatLigOFF
if (WaterSensor<=WatLigOF_Min){
Wat_en=1;
}
if (WaterSensor>=WatLigOF_Max){
Wat_en=0;
}
if (Wat_en==1){//Sent Water
digitalWrite(WatSent,1);
}
else{
digitalWrite(WatSent,0);
}
}
else{//WatLigON
if (WaterSensor<=WatLigON_Min){
Wat_en=1;
}
if (WaterSensor>=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;
}
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; //倒數
}
}
}
void Debounce_main() {
// read the state of the pushbutton value:
buttonState = digitalRead(buttonPin);
}
(繼續閱讀...)
文章標籤

兩隻小豬 發表在 痞客邦 留言(0) 人氣(162)

  • 個人分類:Code
▲top
  • 7月 01 週三 201501:33
  • Slave遠遙端程式碼

#include <SoftwareSerial.h>
#include <Wire.h>
#include "Timer.h"
#include <LiquidCrystal.h>
SoftwareSerial I2CBT(8,9); //Tx & Rx
const byte Set = 10, Next= 11, up = 12, down = 13;
//----------------------------------------------------LCD
byte Seting,Nexting,uping,downing = 0;// variable for reading the pushbutton status
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;
//----------------------------------------------------Other
byte serialA;
int insize;
int count;
int I2CBT_WriteFlag;
byte cmmd[50];
int WaterLevel;
String WaterTemp;
int day,hour,minu,sec=0;//conter
int Fed_en,Wat_en,Lig_en=0; //Output EN
int FeedSpace,FedSpinTime,WatLigON_Max;//Output
int WatLigOF_Max,WatLigON_Min,WatLigOF_Min,LigSpace,LigSpinTime;
int WaterSensor; //Water
int WatTimer,WatTime_day,WatTime_hour,WatTime_minu,WatTime_sec;
int WatLsTime_day,WatLsTime_hour;
int FeedTimer,SpiningTimer,FedRecipro;//Feed
int LigTimer,LigRecipro,LigSpiningTimer; //Light
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
Timer t;
void setup() {
pinMode(Set, INPUT);
pinMode(Next, INPUT);
pinMode(up, INPUT);
pinMode(down, INPUT);
Serial.begin(9600);
I2CBT.begin(115200);
delay(1000);
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
lcd.print("Connecting");
I2CBT.write("A");//A = Send Require
t.every(2000, LCD_lin2); //call LCD function
t.every(100, LCD_main); //call LCD function
t.every(100, BlueTooth);
t.every(500, BTRead);
t.every(100, Debounce_main); //call LCD function
}
void loop() {
t.update();
}
int ReadEN=0;
void BlueTooth(){
if (I2CBT.available()) {
ReadEN=1;
}
}
int delay1sac;
String inputString = ""; //存放讀取進來的字元字串
boolean stringComplete = false; //字串是否完成旗號
void BTRead(){
if (ReadEN==1){
if (I2CBT_WriteFlag==1){
if (I2CBT.available()){//假如有任何資料進來
char inChar = I2CBT.read(); //一次讀取一個字元
inputString += inChar; //一個字元一個字元加起來
if (inChar == '\n') { //假如字元等於結束字元’\n’判定字串已接收結束
stringComplete = true; //設定字串結束旗號
}
}
else{
if (delay1sac==4){
Serial.println("");
Serial.print("inputString = ");
Serial.println(inputString);
Serial.print("stringComplete = ");
Serial.println(stringComplete);
inputString = "";
stringComplete = false;
I2CBT.write("A");//A = Send Require
delay1sac=0;
I2CBT_WriteFlag=0;
}
else{
delay1sac++;
}
}
}
else if (I2CBT_WriteFlag==2){
if (I2CBT.available()){//假如有任何資料進來
char inChar = I2CBT.read(); //一次讀取一個字元
inputString += inChar; //一個字元一個字元加起來
if (inChar == '\n') { //假如字元等於結束字元’\n’判定字串已接收結束
stringComplete = true; //設定字串結束旗號
}
}
else{
if (delay1sac==4){
Serial.println("");
Serial.print("inputString = ");
Serial.println(inputString);
Serial.print("stringComplete = ");
Serial.println(stringComplete);
inputString = "";
stringComplete = false;
I2CBT.write("B");//B = Send Require
delay1sac=0;
I2CBT_WriteFlag=0;
}
else{
delay1sac++;
}
}
}
else{
char TheBlueToothData;
TheBlueToothData=char(I2CBT.read());
Serial.println("");
Serial.print("TheBlueToothData = ");
Serial.println(TheBlueToothData);
switch(Seting) {
case 0: //normal mode
if (TheBlueToothData=='A'){
insize=I2CBT.available(); //讀取藍牙訊息
Serial.print("input size = ");
Serial.println(insize);
if (insize>=9 && insize<=50 ){
count=0;
for (int i=0; i<insize; i++){
count++;
Serial.print(cmmd[count]=(I2CBT.read()));
Serial.print(" ");
}
}
}
else{
Serial.println("cmmd:");
// 讀取所有資料,並顯示在 LCD
for(int j=0;j<=count;j++){
Serial.print(char(cmmd[j]));
Serial.print(" ");
}
//---------------------------------------------------------------------------------------
//cmmd address+1
//1.現在時間 day3 hour2 minu2 sec2
//2.下次餵食時間
//3.下次開燈(抽水馬達)的時間
//4.上次補水的時間
//5.水位
//6.水溫
//7.輸出智能 Fed_en,Wat_en,Lig_en
//8.餵食設定 FeedSpace=8,FedSpinTime=15
//9.補水設定 WatLigOF_Min=250,WatLigOF_Max=550,WatLigON_Min=0,WatLigON_Max=500
//10.抽水馬達設定 LigRecipro=3600,LigSpace=4,LigSpinTime=4
//---------------------------------------------------------------------------------------
//第一筆:現在時間 [2位數][1位數][1位數][1位數]
day=cmmd[1]*255+cmmd[2];
hour=cmmd[3];
minu=cmmd[4];
sec=cmmd[5];
if (sec==0){lcd.clear();}
//第二筆:下次餵食時間 [2位數]max:43200
FedRecipro=cmmd[6]*255+cmmd[7];
//第三筆:下次開燈(抽水馬達)的時間 [2位數]max:43200
LigRecipro=cmmd[8]*255+cmmd[9];
//第四筆:上次補水的時間 [1位數][1位數][1位數][1位數]
WatTime_day=cmmd[10];
WatTime_hour=cmmd[11];
WatTime_minu=cmmd[12];
WatTime_sec=cmmd[13];
WatLsTime_day=cmmd[14];
WatLsTime_hour=cmmd[15];
//第五筆:水位 [2位數]
WaterLevel=cmmd[16]*255+cmmd[17];
//第六筆:水溫 [1位數] [,] [1位數]
WaterTemp=String(cmmd[19])+'.'+String(cmmd[20]);
//第七筆:輸出智能 Fed_en,Wat_en,Lig_en =>421編碼共用
Fed_en=(int)(cmmd[21]/4);
Wat_en=cmmd[21]%4/2;
Lig_en=cmmd[21]%2;
//第八筆:餵食設定 FeedSpace=8,FedSpinTime=15
FeedSpace=cmmd[22];
FedSpinTime=cmmd[23];
//第九筆:補水設定 WatLigOF_Min=250,WatLigOF_Max=550,WatLigON_Min=0,WatLigON_Max=500
WatLigOF_Min=cmmd[24];
WatLigOF_Max=cmmd[25];
WatLigON_Min=cmmd[26];
WatLigON_Max=cmmd[27];
//第十筆:抽水馬達設定 LigRecipro=3600,LigSpace=4,LigSpinTime=4
LigSpace=cmmd[28];
LigSpinTime=cmmd[29];
//
Serial.println("I2CBT.write(A)");
Initalize();
I2CBT.write("A");//A = Send Require
}
break;
case 255: //setting mode
if (TheBlueToothData=='B'){
I2CBT.write("B");//A = Send Require
byte Data[10];
//---------------------------------------------------------------------------------------
//Data 編碼2位數極限65025
//1.餵食設定 FeedSpace=8,FedSpinTime=15
//2.補水設定 WatLigOF_Min=250,WatLigOF_Max=550,WatLigON_Min=0,WatLigON_Max=500
//3.抽水馬達設定 LigRecipro=3600,LigSpace=4,LigSpinTime=4
//---------------------------------------------------------------------------------------
//第一筆:餵食設定 FeedSpace=8,FedSpinTime=15
Data[0]=FeedSpace;
Data[1]=FedSpinTime;
//第二筆:補水設定 WatLigOF_Min=250,WatLigOF_Max=550,WatLigON_Min=0,WatLigON_Max=500
Data[2]=WatLigOF_Min;
Data[3]=WatLigOF_Max;
Data[4]=WatLigON_Min;
Data[5]=WatLigON_Max;
//第三筆:抽水馬達設定 LigSpace=4,LigSpinTime=4
Data[6]=LigSpace;
Data[7]=LigSpinTime;
//
for(int j=0;j<=10;j++){
Serial.print(Data[j]);
Serial.print(" ");
I2CBT.write(Data[j]);
}
}
break;
}
}
}
}
void Initalize(){
count=0;
insize=0;
}
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(WaterLevel);
lcd.print(" Tm:");
lcd.print(WaterTemp);
}
}
}
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;
}
}
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("WatL:");
}
void Debounce_main() {
// read the state of the pushbutton value:
if (digitalRead(Set)==1) {
Seting= ~Seting;
if (Seting==0){
I2CBT_WriteFlag=1;
}
else{
I2CBT_WriteFlag=2;
}
lcd.clear();
}
if (digitalRead(up)||digitalRead(down) ==1) {
lcd.clear();
}
Nexting= digitalRead(Next);
uping= digitalRead(up);
downing= digitalRead(down);
}
(繼續閱讀...)
文章標籤

兩隻小豬 發表在 痞客邦 留言(0) 人氣(318)

  • 個人分類:Code
▲top
«1...7677

個人資訊

兩隻小豬
暱稱:
兩隻小豬
分類:
美食情報
好友:
累積中
地區:

2023社群金點賞

2021-2022 社群金點賞

痞客邦 2017 社群金點賞

兩隻小豬 個人檔案

兩隻小豬 FB粉絲團

歡迎追蹤 兩隻小豬Instagram

愛食記

WalkerLand 部落客特刊

痞客邦 本日熱門文章

最新文章

  • 【頂級鐵板燒推薦】阪前鐵板燒 台北安和店,主餐升級、秋冬新菜實際心得
  • 桃園大溪餐廳|南法玫瑰莊園,森林系玻璃屋超好拍,餐點表現意外不錯
  • 2026 六款膠原蛋白品牌評比|最推薦BEAUTY CLUB 分時保養雙胜肽膠原蛋白實測心得
  • 新北中和美食:金春喜韓廚|小菜免費續,豬肉湯飯超暖胃!
  • 【愛康LAMORCOM】孅女養成計禮盒 | 三款機能軟糖組:孅女QQ/好星情/小姐好辣S
  • 2025香港一日遊行程|旺角吃吃逛逛、美拍訊號山花園、買人氣伴手禮曲奇餅乾超滿足
  • 台北士林親子餐廳|甲蟲秘境親子&寵物友善餐廳,附遊戲區、甲蟲導覽體驗,必吃甲蟲鬆餅!
  • 【好物分享】Sudio F5 Pro|聚焦好聲音的可攜式藍牙音響
  • 全家人都適用!提升食慾、增強體力,專家醫師都推薦的3款「鋅」營養品
  • 新北中和雞湯|享雞湯風味雞湯專賣店,暖胃雞湯+澎湃套餐分享

熱門文章

  • (13,531)*台北西門*【日藥本舖博物館】免費參觀,日本昭和時期藥妝街懷舊場景
  • (272,782)【捷運龍山寺站美食】艋舺夜市小吃推薦,21間必吃小吃~2023.01月更新!(萬華美食/廣州街/華西街夜市美食)
  • (98,747)【桃園中壢美食】泰多蝦流水道夾蝦場,LED流水道「泰國流水蝦」吃到飽,蝦子肥美新鮮還有蝦膏!!
  • (41,251)【捷運公館美食】新馬辣經典鴛鴦鍋-公館店,13種頂級肉片&阿根廷天使紅蝦吃到飽,以及16種哈根達斯口味任你吃!
  • (29,610)【新北淡水美食】正莊古早味好吃雞肉店,雞腿肉質鮮嫩不乾柴,點便當免費送當歸雞清湯!
  • (40,025)【新北淡水美食】牛Bar(淡海店),鍋物均一價$189元,白飯、濃湯、爆米花、明治冰淇淋、飲料及冰沙都是無限供應!
  • (12,744)【台北中山火鍋】鐤極宴-鍋料理,波士頓龍蝦肉質細緻鮮甜,還有美味蝦膏粥可品嘗!(附完整菜單)
  • (21,492)愛他美好嗎?成分、益處及愛他美評價分享,二寶媽的配方奶挑選心得
  • (15,722)【貓空景觀餐廳】貓空四爺,宮廷風小包廂用餐品茶,裝潢古色古香、獨立式包廂夜景超優,金字塔茶炒飯必吃!
  • (22,252)【板橋燒肉推薦】發肉燒肉餐酒板橋三店,人氣干貝漢堡必點,特選牛五花脆口多汁,竟然還能吃到炸雞佛~生日壽星超驚喜!(捷運府中站美食)

文章分類

toggle 國內美食 (15)
  • 台北美食 (214)
  • 新北市美食 (137)
  • 基隆美食 (2)
  • 桃園美食 (17)
  • 新竹美食 (6)
  • 苗栗美食 (6)
  • 台中美食 (6)
  • 南投美食 (1)
  • 彰化美食 (1)
  • 台南美食 (9)
  • 雲林美食 (1)
  • 宜蘭美食 (26)
  • 花蓮美食 (2)
  • 台東美食 (1)
  • 甜點分享 (8)
toggle 國內旅遊 (13)
  • 新北市景點 (22)
  • 台北景點 (24)
  • 基隆景點 (3)
  • 宜蘭景點 (40)
  • 新竹景點 (6)
  • 桃園景點 (21)
  • 苗栗景點 (6)
  • 台中景點 (6)
  • 彰化景點 (3)
  • 台南景點 (13)
  • 花蓮景點 (3)
  • 征服小百岳全紀錄 (6)
  • 展覽 (2)
toggle 國內住宿 (11)
  • 烏來住宿 (1)
  • 基隆住宿 (1)
  • 板橋住宿 (1)
  • 桃園住宿 (1)
  • 宜蘭住宿 (13)
  • 花蓮住宿 (1)
  • 台南住宿 (3)
  • 台中住宿 (2)
  • 南投住宿 (1)
  • 彰化住宿 (1)
  • 台東住宿 (1)
toggle 國外旅遊 (5)
  • 2025香港自由行 (1)
  • 2016年4月-香港.澳門員工旅遊 (0)
  • 2025沖繩親子自由行 (1)
  • 2019年2月-日本北海道跟團遊 (0)
  • 2019年5月-中國湖北 (1)
toggle 時尚流行 (3)
  • 包款推薦 (3)
  • 鞋款/手錶推薦 (3)
  • 美容美髮 (12)
toggle 開箱 (6)
  • 滋補養身食品 (11)
  • 宅配伴手禮 (25)
  • 保健食品 (10)
  • 居家好物 (4)
  • 孕媽咪日記 (1)
  • 鍋具 (1)
toggle 親子育兒 (2)
  • 月子中心推薦 (2)
  • 育兒好物 (14)
toggle 婚禮大小事 (2)
  • 婚禮活動 (2)
  • 婚紗攝影 (2)
toggle 生活綜合 (7)
  • 懶人減肥法 (2)
  • 居家生活 (2)
  • 英文線上課程 (1)
  • 韓式照相館 (1)
  • 數位生活 (5)
  • 創作 (4)
  • 食譜分享 (5)
toggle 股票投資/房地產 (2)
  • 建案賞屋心得 (1)
  • 投資經濟學 (3)
toggle Arduino應用 (2)
  • 教學 (3)
  • DIY (7)
toggle 實用的工具網站 (2)
  • 實用的工具 (7)
  • 電影評論 (1)
toggle 其他 (1)
  • 好康 (0)
  • 未分類文章 (1)

文章精選

文章搜尋

Booking.com旅遊訂房網站

瘋台灣宜蘭民宿網

參觀人氣

  • 本日人氣:
  • 累積人氣: