arduino继电器控制风扇_arduino微信远程继电器控制电灯设计

本文介绍了一个arduino物联网实验,通过arduino控制继电器实现远程电灯控制。使用特定协议,当接收到含有'RELAY'的指令时,根据指令内容控制继电器状态,从而实现电灯的开启或关闭。
摘要由CSDN通过智能技术生成

/**

* @par Copyright (C): 2010-2019, Shenzhen Yahboom Tech

* @file         3、远程继电器控制电灯

* @author       zhoujie

* @version      V1.0

* @date         2017.11.14

* @brief        arduino物联网实验

* @details

* @par History  见如下说明

*

*/

//定义引脚

int RELAY_Pin = 9;             //继电器信号端S

int incomingByte = 0;       // 接收到的 data byte

String inputString = "";         // 用来储存接收到的内容

boolean newLineReceived = false; // 前一次数据结束标志

boolean startBit  = false;  //协议开始标志

String returntemp = ""; //存储返回值

void setup()

{

pinMode(RELAY_Pin, OUTPUT);    //初始化RELAY IO口为输出方式

Serial.begin(9600);        //波特率9600 (Wifi通讯设定波特率)

digitalWrite(RELAY_Pin, LOW);    //RELAY初始化低电平

}

/**

* Function       loop

* @author        zhoujie

* @date          2017.11.14

* @brief         按照接收的数据根据协议完成相应的功能

* @param[in]     void

* @retval        void

* @par History   无

*/

void loop()

{

//$RELAY,1#

while (newLineReceived)

{

if(inputString.indexOf("RELAY") == -1)  //如果要检索的字符串值“RELAY”没有出现

{

returntemp = "$RELAY,2,#";  //返回不匹配

Serial.print(returntemp); //返回协议数据包

inputString = "";   // clear the string

newLineReceived = false;

break;

}

if(inputString[7] == '1')  //继电器开关闭合

{

int i = inputString.indexOf(",");      //从接收到的数据中检索字符串“,”出现的位置

int ii = inputString.indexOf("#", i);  //从接收到的数据中以i为起始位置检索字符串“#”的位置

if(ii > i && ii > 0 && i > 0 )         //如果ii和i的顺序对了并且检索到ii与i存在

{

digitalWrite(RELAY_Pin, HIGH);    //向继电器S信号端输出高电平,继电器开关闭合

}

else    //检索到ii和i的顺序不对或者没有检索到ii或者i

{

returntemp = "$RELAY,1,#";  //返回匹配失败

Serial.print(returntemp); //返回协议数据包

inputString = "";   // clear the string

newLineReceived = false;

break;

}

}

else   //继电器开关打开

{

digitalWrite(RELAY_Pin, LOW);  //向继电器S信号端输出低电平

}

returntemp = "$RELAY,0,#";  //返回匹配成功

Serial.print(returntemp); //返回协议数据包

inputString = "";   // clear the string

newLineReceived = false;

}

}

/**

* Function       serialEvent

* @author        zhoujie

* @date          2017.11.14

* @brief         串口接收中断   serialEvent()是IDE1.0及以后版本新增的功能,不清楚为什么大部份人不愿意用,这个可是相当于中断功能一样的啊!

* @param[in]     void

* @retval        void

* @par History   无

*/

void serialEvent()

{

while (Serial.available())                    //如果串口接收到数据则进入循环

{

incomingByte = Serial.read();              //一个字节一个字节地读,下一句是读到的放入字符串数组中组成一个完成的数据包

if(incomingByte ==

)                     //如果到来的字节是

,开始读取

{

startBit= true;

}

if(startBit == true)

{

inputString += (char) incomingByte;     // 全双工串口可以不用在下面加延时,半双工则要加的//

}

if (incomingByte == '#')

{

newLineReceived = true;                 //如果到来的字节是'#',读取结束

startBit = false;

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值