跳至主要內容 (Skip to main content)
兩隻小豬旅行親子生活

我們的鏡頭帶著你四處漫遊

Master主控室程式碼

2015年6月30日 | 21 分鐘閱讀 | pixnet unread
原文連結 (Pixnet) ↗
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]= 4Fed_en+2Wat_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=FeedSpace6060-FeedTimer; if(FeedTimer>=FeedSpace6060){ 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
6060-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); }

個人分類: Code
分享: f Facebook L LINE