重点学习INPUT_PULLUP
目的:
控制电路中有一路自由干接点,设置为自由模式可以控制继电器中任何一路或多路的方法,本示例仅控制1路。
物联网干接点控制继电器取反
//关注 久爱物联网 jiuaiiot 微信公众号可远程体验
//变量定义
#define in_PIN1 5 //干接点针脚定义
#define relay_PIN1 15 //继电器1
#define relay_PIN2 12
#define relay_PIN3 13
#define relay_PIN4 14
int pinin_old_status=0;//干接点初始化状态
/**********************
* 检查干接点输入状态
* 对应继电器(默认第一路)状态取反
*********************/
void check_in_status()
{
int pinin_cur_status=digitalRead(in_PIN1);//干接点信号状态
int relayStatus=digitalRead(relay_PIN1);//继电器1
if(pinin_old_status!=pinin_cur_status)
{//测试干接点控制继电器1的状态取反
digitalWrite(relay_PIN1,!relayStatus);//根据5的电平,取反继电器1的输出状态
pinin_old_status=pinin_cur_status;
if(digitalRead(relay_PIN1)==HIGH)
{//此方法是通过MQTT对客户端发布最新状态同步
mqtt_pub(pub_topic_name1,"55 AA AA AA AA 82 01 01");//1路开
}else{
mqtt_pub(pub_topic_name1,"55 AA AA AA AA 82 01 00");//1路关
}
}
}
初始化setup
void setup() {
Serial.begin(115200);//启用串口,串口波特率115200
while(Serial.read()>= 0){}//清除串口缓存,,Serial.flush();等待
pinMode(relay_PIN1, OUTPUT);//继电器1-15 输出模式
pinMode(relay_PIN2, OUTPUT);//继电器2-12 输出模式
pinMode(relay_PIN3, OUTPUT);//继电器3-13 输出模式
pinMode(relay_PIN4, OUTPUT);//继电器4-14 输出模式
pinMode(in_PIN1,**INPUT_PULLUP**);//触摸按钮或干接点5 **重点是这一参数INPUT_PULLUP***输入上拉模式***否则不起作用*
//继电器状态初始化低高平有效-关NO
digitalWrite(relay_PIN1, LOW);
digitalWrite(relay_PIN2, LOW);
digitalWrite(relay_PIN3, LOW);
digitalWrite(relay_PIN4, LOW);
pinin_old_status=digitalRead(in_PIN1); //干接点电平信号
}
循环体loop设置
void loop() {
//其他代码....
check_in_status();//干接点控制状态处理
delay(10);
}
演示视频bilibili上传审核中,请搜索 JIUAINET 中观看