毕业论文系列之基于WiFi的智能农业大棚管控系统设计代码

#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){

  

   }  

    else if(ss[0]==55){

  

   }

   else if(ss[0]==56){

 

   }

   else if(ss[0]==57){

   }

   }

   if (o==1){//自动控制  

      MsTimer2::start();                //开始计时

   if(n>h){      

  digitalWrite(fen,HIGH);  

  }

  else{

  digitalWrite(fen,LOW);  

  }

  if(m>500){

  digitalWrite(shuiben,HIGH);  //开启LED

  }

  else{

  digitalWrite(shuiben,LOW);  

  }     

  if( r<500){    

  int a;

  a=128;//

  while(a++)

  {

  for(int i=13;i>9;i--)

  {

  digitalWrite(i,1);

  delay(10);

  digitalWrite(i,0);

  }

  if(a==512)

  {

  delay(1000);

  return;

  }

  }

  }

  if( r>1000){

  }       

  

  }

  else if (o==0){//手机控制

  MsTimer2::stop();

  }

 

  int w=analogRead(PIRpin);//读取读数

  Serial.print("是否有人闯入:");

  if(w>400){

  Serial.println("有人闯入!!!");

  }

  else{

  Serial.println("正常");

  }

  if(w>200){

  for(int i=201;i<=800;i++)                    //用循环的方式将频率从200HZ 增加到800HZ

  {

  tone(6,i);                            //在四号端口输出频率

  delay(5);   //该频率维持5毫秒    

  }

  delay(4000);                            //最高频率下维持4秒钟

  for(int i=800;i>=200;i--)

  {

  tone(6,i);

  delay(10);

  }

  if(int i=200){

  noTone(6);

  delay(1000);

  }

  else{

  }

  }         

  delay(2000);

  }

void falsh()   {

  val1 = analogRead(photocellPin);    // 读取光敏电阻的值

  if(val1>=112){

  digitalWrite(ledPin, HIGH);

  }else{

  digitalWrite(ledPin, LOW);

  }        

  }

    

 

 

摘要 ……………………………………………………………………………Ⅰ

第一章 绪论…………………………………………………………………………()

1.1 引言………………………………………………………………………………()

1.2  研究背景…………………………………………………………………………()

第二章智能农业控管系统总体设计方案……………………………………………()

2.1智能农业控管系统概述…………………………………………………………()

2.1.1功能要求………………………………………………………………………()

2.2智能农业控管系统硬件设计方案…………………………………………………()

2.2.1微处理器…………………………………………………………………………()

2.2.2传感器……………………………………………………………………………()

2.2.3微处理器…………………………………………………………………………()

2.2.4数据显示…………………………………………………………………………()

2.3智能农业控管系统的软件设计方案………………………………………………()

第三章  智能农业大棚控管系统的硬件设计和实现………………………………()

3.1微处理器的选择……………………………………………………………………()

3.2 Arduino简介………………………………………………………………………()

3.3 Arduino UNO开发原理图…………………………………………………………()

3.4Arduino UNO主要功能介绍………………………………………………………()

第四章  智能农业大棚控管系统的软件设计………………………………………()

4.1程序设计框架………………………………………………………………………()

4.1.1主程序流程图……………………………………………………………………()

4.2各模块程序设计……………………………………………………………………()

4.2.1数据采集模块设计………………………………………………………………()

1)DHT11模块………………………………………………………………………()

2)土壤湿度模块……………………………………………………………………()

3)光敏传感器………………………………………………………………………()

4)热释电红外感应…………………………………………………………………()

5)LCD1602显示模块程序设计……………………………………………………()

6)手机显示及控制模块设计……………………………………………………()

4.3执行模块及报警装置设计………………………………………………………()

4.3.1执行模块流程…………………………………………………………………()

4.3.2报警模块流程图…………………………………………………………………()

第五章  系统调试……………………………………………………………………()

5.1硬件调试……………………………………………………………………………()

5.2软件调试……………………………………………………………………………()

5.3手机远程操控调试…………………………………………………………………()

第六章   …………………………………………………………………………()

参考文献 XXXXXXXXXXXX ……………………………………………………………() 

附表XXXXXXXXXXXXXXXX  …………………………………………………………()

 

 

 

 

 

 

 

 

 

 

 

 

 

基于WiFi的智能农业大棚管控系统设计

 

 [摘要]本课题就如何方便有效地对温室环境进行监测和控制,如何提高农业生产信息化水平,通过对温室环境的监控的研究现状和发展趋势,运用Aduino开发板,并通过其采用DHT11温湿度传感器模块、Risym土壤湿度传感器控制器模块、HC-SR501人体红外感应模块、Risym光敏电阻传感器模块、Risym高灵敏雨滴雨水控制器模块、AD转换器、LCD液晶显示器,由水泵、排风扇、蜂鸣器、LED灯等组成的电器控制系统,在元器件方面采用继电器模块,并用类C语言写出程序代码组成整个系统,以实现智能控管。

第一章  绪论

1.1引言

物联网是通过各种信息传感设备及传感器系统、射频识别、红外感应器、条码与二维码、全球定位系统、激光扫描器等和其他基于物物通信模式的短距离无线传感器网络,通过这一网络可以进行信息交互、传递、通信,从而实现对物体的智能化识别、定位、跟踪、监控与管理。在物联网时代,通过在各种各样的物体中镶嵌一种短距离收发器,人类在信息与通信世界里将获得一个新的沟通维度。从任何时间任何地点的人与人之间的沟通连接扩展到人与物与物与物之间的沟通连接。

1.2研究背景

作为世界上最主要的农业大国之一,使用智慧科学的管理模式就至关重要。传统的农业依靠大量的人力,手工工具和一些相对简单的机械设备,农民基本依靠经验来种植,导致农业所消耗的水资源、化肥、农药等都在飞速增长,数据相当惊人,但农业产量相对较低,依靠着落后的生产技术、劳动工具来维持简单的生产以毫无意义。传统农业的技术落后,使得农业产量增长过于缓慢,而又浪费大量的人力物力,从而导致生产效率没有提升空间。综合上述,在现代化的农业中引入物联网技术,通过传感器实时采集农田的环境温湿度数据、土壤温湿度、光照强度、二氧化碳浓度、PH值、土壤有机含量值等信息,并通过无线的方式传输到中央控制系统,使用户能随时随地的掌握农田的实时情况,并通过电脑或者手机远程控制设备,以实现现代农业的自动化、信息化和智能化。

第二章  智能农业控管系统总体设计方案

2.1智能农业控管系统概述

2.1.1功能要求

1)系统能够实现对温室大棚内的空气中的温湿度、土壤中的湿度、光照强度、是否有人擅自闯入达到实时监控。

2)当温室大棚内某项环境指标达到预设值时系统要发出相应的反馈控制信息。

3)温室大棚内被监测的空气中的温湿度数据在LCD屏上显示出来,用户还能够通过手机上显示的实时的通俗易懂的数据以自动和手机控制两种方法以实现对温室内相关设备的控制。

4)本系统硬件设计有WiFi上传数据,能够实现对系统的远程管控。

技术指标

Arduino规格指标参数

工作电压:5V

输入电压:接上USB时无需外部供电或外部7V12V DC输入

输出电压:5V DC输入和3.3V DC输出和外部电源输入

微处理器:ATmega328

时钟频率:16 MHZ

检测参数及范围值见表

所选传感器

检测参数

检测范围

检测精度

DHT11 

温度

050

±2

湿度

20%~90RH

±5RH

土壤湿度

湿度

2451023

±1

HC-SR501

感应

57

TSL2561

光照

070000勒克斯(Lx)

±50Lx

雨滴

雨滴

01023

2.2智能农业控管系统硬件设计方案

智能农业控管系统有一个微处理器作为主控,在该微处理器的外围进行设备扩展如ESP-8266作为系统连接网络的WiFi、传感器作为检测装备、LCD1602作为液晶显示屏、蜂鸣器作为报警装置、下图表示智能农业控管系统的硬件结构原理图。

 

智能农业控管系统硬件原理图

2.2.1微处理器

微处理器又称MCU,它是由一片或少数几片大规模集成电路组成,具有电路执行控制能力与算数逻辑运算功能,在微型计算机中担当“大脑”一职。本智能农业控管系统的硬件设备就相当于一部微型计算机,其中“大脑”一职Arduino承担。

2.2.2传感器

传感器(英文名称:transducer/sensor)是一种检测装置,能感受到被测量的信息,并能将感受到的信息,按一定规律变换成为电信号或其他所需形式的信息输出,以满足信息的传输、处理、存储、显示、记录和控制等要求。通常由感应元件和转换元件组成。本智能农业温室大棚用到的传感器有DHT11温湿度传感器模块、Risym土壤湿度传感器控制器模块、HC-SR501人体红外感应模块、Risym光敏电阻传感器模块、Risym高灵敏雨滴雨水控制器模块作为本管控系统的监测模块,他们分别负责温室大棚中的空气中的温度、土壤的湿度、光照的强度等农作物生长必须的环境因素和大棚内是否有人闯入。

2.2.3数据显示

数据显示是为了更好的实现人机交互,方便用户的用户操作,使用户更直观的了解到温室大棚内各项环境指标的实时变化。本智能农业控管系统所选的显示模块为LCD1602显示屏和通过手机APP显示,通过APP,用户可以在任何地方任何时刻了解大棚内的实时数据并进行手机控制或选择自动控制。

2.2.4报警装置

   为了防止不法分子进入大棚内进行破坏,本系统增加啦报警装置,当有人进入大棚内时,蜂鸣器会拉响警报,手机上会显示有人闯入。

2.3智能农业控管系统的软件设计方案

智能农业控管系统的硬件电路确定以后,软件负责整个系统的主要功能实现。由软件来实现硬件电路的运行,其中包括数据采集、数码显示、环境调节、报警等。本系统的软件设计需要有一个细致全面的过程。首先要清楚的列出智能农业监测系统中各系统部件与软件设计的相关特点,并进行定义和说明,作为软件设计的依据。在此基础上画出软件设计的基本框架图、主程序流程图。再将程序流程图中列举的一系列操作用类C语言编写出来,然后通过Arduino IDE编译调试,调试完成后下载到Arduino内,至此软件设计基本完成。

第三章 智能农业大棚控管系统的硬件设计和实现

3.1微处理器的选择

本智能农业温室大棚控管系统选择的微处理器为Arduino UNO

3.2 Arduino简介

Arduino是一款便捷灵活、方便上手的开源电子原型平台,包含硬件(各种型号的Arduino)和软件(Arduino IDE)。它适用于爱好者、艺术家、设计师和对于"互动"有兴趣的朋友们

3.3 Arduino UNO开发原理图

 

3.4 Arduino UNO主要功能介绍

支持USB接口协议及供电(不需外接电源)

支持ISP下载功能

14路数字输入输出口:工作电压为5V,每一路能输出和接入最大电流为40mA

1)串口信号RX0号)、TX(1):与内部ATmega8U2 USB-to-TTL芯片相连,提供TTL电压水平的串口接收信号。

2)外部中断(2号和3号):触发中断引脚,可设成上升沿、下降沿或同时触发。

3)脉冲宽度调制PWM35691011):提供68PWM输出。

4SPI(10(SS),11(MOS1),12(MOS0),13(SCK));SPI通信接口。

5LED(13)Arduino专门用于测试LED的保留接口,输出为高时点亮LED,输出为低时LED熄灭。

6路模拟输入A0A5,每一路具有10位分辨率(即输入有1024个不同值),默认输入信号范围为05V

AREF:模拟输入信号的参考电压。

Reset:信号为低时复位单片机芯片。

直流电流:40mA  (I/O端口)

直流电流:50mA  (3.3V端口)

Flash内存:32KB(ATmega328其中0.5KB用于引导程序)

第四章 智能农业大棚控管系统的软件设计

本智能农业监测系统运行过程中主要包括AD采集,数码显示,反馈控制,检测报警四大模块,其基本框架如图所示:

4.1程序设计框架

4.1.1主程序流程图:

程序主流程图

主程序是一个LOOP循环,其主要流程是:系统上电首先对主控各个IO口进行配置,设置各个环境变量,并对环境变量阈值进行赋值,以及调用各个模块的初始化函数,然后在LOOP循环中调用各个模块的数据采集函数,LCD屏显示函数,然后对各环境数据进行判断,看是否触发中断进行调控,或者进行报警。

4.2各模块程序设计

4.2.1数据采集模块设计

1DHT11模块

程序设计流程图如图所示:

2)土壤湿度模块

程序设计流程图如图所示:

3)光敏传感器

程序设计流程图如图所示:

3)雨滴传感器

程序设计流程图如图所示:

4)热释电红外感应

程序设计流程图如图所示:

5LCD1602显示模块程序设计

程序设计流程图如图所示:

6)手机显示及控制模块设计

程序设计流程图如图所示:

4.3执行模块及报警装置设计

执行模块和报警模块主要是对LED灯、水泵、风扇、雨棚、蜂鸣器进行初始化及控制,当本控管系统监测到某项环境指标超标时,做出相关调控。报警模块是根据是否有人进入来决定是否报警。

4.3.1执行模块流程

4.3.2报警模块流程图

第五章 系统调试

根据本智能农业控管系统的方案设计要求,调试过程主要分为三大部分:硬件调试、软件调试和手机远程操控调试。

5.1硬件调试

将各个传感器模块电路按照逻辑图连接起来,根据器件规格和极性看连接是否有误,然后利用万用表逐个检测调试,看是否有短路、断路现象。检查过传感器模块后再检测电源模块有无短路现象,确保电源上电后输出电压为标准5V电压,降压电路能输出3.3V电压。

5.2软件调试

本智能农业控管系统以Arduino为主控芯片,将各传感器模块接入IO口后,利用对Arduino IDE系统软件部分进行编译及调试。根据编译结果,修改相关错误提示。

5.3手机远程操控调试

将各个传感器模块电路按照逻辑图连接起来,并将代码下载到主控芯片中,按操作顺序连接上WiFi,打开手机用户端,检测是否实时上传数据,发送指令,看相关设备是否按照指令进行运作,如果否,则进行代码修改,直到按相关指令进行操作。

第六章

本设计从选题、论证、查阅相关资料、确定设计方案到设计的实现前后共历时近两个月,并且基本实现了预期效果,能够正常显示监测环境中的温度、湿度、光照强度、以及土壤湿度。初步完成了环境指标超过阈值自动进行调控,并且当有人进入时,蜂鸣器正常报警,并且完成啦远程监控和管理。本设计还存在一些不足之处,首先检测精度不能说很高,由于所选传感器限制测量精度只能算普通水平,但对于普通的温室大棚环境检测已经足矣。若需要更精确的检测数据需要更换更优良的传感器。

介于本人水平有限,设计中难免还有其他不足之处,在此敬请大家见谅。

 

 

 

 

 

参考文献:

[1] 郑少仁,王海涛,赵志峰等.Ad hoc网络技术【M.北京:人民邮电出版社,2005P1-P2

[2]  杨硕.[基于无线传感器网络的温室植物生长光照强度监控系统的研究]重庆大学,2009P13-P15

[3] 陈文智,王总辉. 嵌入式系统原理与设计. 清华大学出版社,2011

[4] 谭浩强,C程序设计【M】,于欣龙译.北京:人民邮电出版社,2012

[5] 佟长福.AVR单片机GCC程序设计【M. 北京:北京航空航天大学出版社,2006

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

附表

智能农业控管系统全部代码:

#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){

  

   }  

    else if(ss[0]==55){

  

   }

   else if(ss[0]==56){

 

   }

   else if(ss[0]==57){

   }

   }

   if (o==1){//自动控制  

      MsTimer2::start();                //开始计时

   if(n>h){      

  digitalWrite(fen,HIGH);  

  }

  else{

  digitalWrite(fen,LOW);  

  }

  if(m>500){

  digitalWrite(shuiben,HIGH);  //开启LED

  }

  else{

  digitalWrite(shuiben,LOW);  

  }     

  if( r<500){    

  int a;

  a=128;//

  while(a++)

  {

  for(int i=13;i>9;i--)

  {

  digitalWrite(i,1);

  delay(10);

  digitalWrite(i,0);

  }

  if(a==512)

  {

  delay(1000);

  return;

  }

  }

  }

  if( r>1000){

  }       

  

  }

  else if (o==0){//手机控制

  MsTimer2::stop();

  }

 

  int w=analogRead(PIRpin);//读取读数

  Serial.print("是否有人闯入:");

  if(w>400){

  Serial.println("有人闯入!!!");

  }

  else{

  Serial.println("正常");

  }

  if(w>200){

  for(int i=201;i<=800;i++)                    //用循环的方式将频率从200HZ 增加到800HZ

  {

  tone(6,i);                            //在四号端口输出频率

  delay(5);   //该频率维持5毫秒    

  }

  delay(4000);                            //最高频率下维持4秒钟

  for(int i=800;i>=200;i--)

  {

  tone(6,i);

  delay(10);

  }

  if(int i=200){

  noTone(6);

  delay(1000);

  }

  else{

  }

  }         

  delay(2000);

  }

void falsh()   {

  val1 = analogRead(photocellPin);    // 读取光敏电阻的值

  if(val1>=112){

  digitalWrite(ledPin, HIGH);

  }else{

  digitalWrite(ledPin, LOW);

  }        

  }

原文地址:https://www.cnblogs.com/fqhy/p/7986667.html