#include <dht11.h>//dht11库
#include <MsTimer2.h> //定时器库的 头文件
#include <Wire.h>
#include <LiquidCrystal_I2C.h> //引用I2C库
LiquidCrystal_I2C lcd(0x3F,16,2); //设置LCD1602设备地址,这里的地址是0x3F,一般是0x20,或者0x27,具体看模块手册
int PIRpin=A1;//红外传感器引脚号
int val1 = 0; // 存储光敏电阻值的变量
int w=0;//设定红外初始值
int o=0;//定义手动自动开光初始值
int h=38;//设定温度初始值
int p=0;//设定温度升高暂存变量
int k=0;//设定温度降低暂存变量
int photocellPin = 2; // 光敏电阻连接模拟端口【A2】
int ledPin = 7; // LED灯连接数字端口【D7】
int ss[512];
dht11 DHT11;
#define DHT11PIN 4//设定4号引脚为温度输入
#define DHT11PIN1 5//设定5号引脚为温度输入
#define turang A0//设定土壤输入为A0口
#define turangq A4//设定土壤输入为A0口
#define fen 8 //定义风扇引脚为8
#define shuiben 9 //定义水泵引脚为9
void setup(){
Serial.begin(9600);
Serial.println("AT+CIPMODE=1"); //WiFi连接服务器
delay(1000);
Serial.println("AT+CWJAP=\"TP-LINK_4226\",\"19960710\"");
delay(5000);
Serial.println("AT+CIPSTART=\"TCP\",\"115.29.109.104\",6555");
delay(5000);
Serial.println("AT+CIPSEND");
delay(3000);
MsTimer2::set(100, falsh); // 中断设置函数,每100ms 进入一次中断
lcd.init(); // 初始化LCD
lcd.backlight(); //设置LCD背景等亮
lcd.setCursor(0,0); //设置显示指针
lcd.print("Welcome to "); //输出字符到LCD1602上
lcd.setCursor(0,1);
lcd.print("It's my system");
delay(2000);
lcd.clear();
pinMode(PIRpin,INPUT);//红外传感器输入模式
pinMode(turang,INPUT);//土壤湿度输入模式
pinMode(fen,OUTPUT); //设定LED引脚为输出状态
pinMode(6,OUTPUT);//设定蜂鸣器报警为输出
pinMode(shuiben,OUTPUT);//定义水泵为输出模式
pinMode(ledPin,OUTPUT);//定义水泵为输出模式
for(int i=10;i<14;i++) //步进电机
{
pinMode(i,OUTPUT); //设定步进电机输出引脚
}
}
void loop(){
DHT11.read(DHT11PIN);//读取空气中的温湿度
int n =DHT11.temperature;
int dht11temp = DHT11.temperature;
int l = DHT11.humidity;
int dht11hum = DHT11.humidity;
DHT11.read(DHT11PIN1);
int c =DHT11.temperature;//负责打印
int dht11temp1 = DHT11.temperature;
int y= DHT11.humidity;
int dht11hum1 = DHT11.humidity;
lcd.setCursor(0,0);
lcd.print("tem:");
lcd.print(dht11temp);
lcd.print("tem1:");
lcd.print(dht11temp1);
lcd.setCursor(0,1);
lcd.print("hum:");
lcd.print(dht11hum);
lcd.print("hum1:") ;
lcd.print(dht11hum1);
Serial.println("自动控制:B 手机控制:A");
Serial.print("温度上限值:");
Serial.print(h);
Serial.println("度");
Serial.print("温度一示数读数:");
Serial.print(n);
Serial.println("度");
Serial.print("湿度一示数读数:");
Serial.print(l);
Serial.println("%");
Serial.print("温度二示数读数:");
Serial.print(c);
Serial.println("度");
Serial.print("湿度二示数读数:");
Serial.print(y);
Serial.println("%");
Serial.print("土壤湿度一参数:");
int m=analogRead(turang);//读取读数
if(m>500){
Serial.println("干旱,请浇水");
}
if(m<500){
Serial.println("湿润");
}
int r=analogRead(A3);//读取雨滴传感器的读数
Serial.print("是否下雨啦:");
if(r<500){
Serial.println("是");
}
if(r>1000){
Serial.println("否");
}
Serial.print("光照:");
if(val1>500){
Serial.println("没有光照");
}
if(val1<200){
Serial.println("有光照");
}
int f=0;//定义串口接收数据初始值
while(Serial.available())//串口接收到数据
{
ss[f++]=Serial.read();
delay(2);
}
if(f>=0){
if(ss[0]==65){//当接收到的数据为A时,为自动控制
o=0;
}
if(ss[0]==66){//当接收到的数据为B时,为按键控制
o=1;
}
if(ss[0]==67){//当接收到的数据为B时,为按键控制
p=1-p;
if(p==1){
h=h+1;
delay(100);
return;
p=0;
}
}
if(ss[0]==68){//当接收到的数据为B时,为按键控制
k=1-k;
if(k==1){
h=h-1;
delay(100);
return;
k=0;
}
}
else if(ss[0]==48){
digitalWrite(fen,HIGH); //开启LED灯
}
else if(ss[0]==49){
digitalWrite(fen,LOW); //开启LED灯
}
else if(ss[0]==50){
digitalWrite(shuiben,HIGH); //开启LED灯
}
else if(ss[0]==51){
digitalWrite(shuiben,LOW); //开启LED灯
}
else if(ss[0]==52){
digitalWrite(ledPin,HIGH); //开启LED灯
}
else if(ss[0]==53){
digitalWrite(ledPin,LOW); //开启LED灯
}
else if(ss[0]==54){
}