基于arduino esp8266设计了一个温控,人体感应,红外遥控,手机APP控制的一个多功能的风扇控制,其他三个功能都实现了,就红外遥控功能一直不起作用,怎么按遥控都没有用,是什么原因导致的,按遥控风扇一点反应都没有,问题是出在哪了呢
#include
#include //默认,加载WIFI库
#include //默认,加载HTTPClient库
#include "PubSubClient.h" //默认,加载MQTT库
#include
#include
#include
#include
const char *ssid = "xxxxxx"; //修改WIFI名称
const char *password = "xxxxxxxxxxxxxxxxxxx"; //修改WIFI密码
const char* mqtt_server = "bemfa.com"; //默认,MQTT服务器地址
const int mqtt_server_port = 9501; //默认,MQTT服务器端口
//#define ID_MQTT "私钥"
#define ID_MQTT "xxxxxxxx" //mqtt客户端ID,个人开发者密钥
const char * DHT11topic = "DHT11"; //主题名字
const char * IRtopic = "IR"; //主题名字
const char * motortopic = "MOTOR"; //主题名字
#define IR 5
#define DHT11PIN 4
#define PWM1 12
#define PWM2 14
int kRecvPin = 13;
#define F1 0xFF30CF
#define F2 0xFF18E7
#define F3 0xFF7A85
#define F0 0xFF6897
long timeval = 3000; //上传的传感器时间间隔,默认3秒
long lastMsg = 0;
dht11 DHT11;
IRrecv irrecv(kRecvPin);
decode_results results;
WiFiClient espClient;
PubSubClient client(espClient); //mqtt初始化
//回调函数
void callback(char* topic, byte* payload, unsigned int length)
{
Serial.print("发送消息 [");
Serial.print(topic);
Serial.print("] ");
String Mqtt_Buff = "";
for (int i = 0; i < length; i++)
{
Mqtt_Buff += (char)payload[i];
}
Serial.println(Mqtt_Buff);
if (Mqtt_Buff == "ON") {
Serial.println("ON"); delay(1000);
analogWrite(PWM1, 200);analogWrite(PWM2, 0);
}
if (Mqtt_Buff == "OFF") {
Serial.println("OFF"); delay(1000);
analogWrite(PWM1, 0);analogWrite(PWM2, 0);
}
//Mqtt_Buff = "";
}
void reconnect() {
if (!client.connected())
{
Serial.print("连接 MQTT...");
if (client.connect(ID_MQTT))
{
//连接mqtt
Serial.println("connected");
client.subscribe(DHT11topic);
client.subscribe(IRtopic);
client.subscribe(motortopic);
}
else
{
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println("500ms后重试");
delay(500);
}
}
}
void setup() {
Serial.begin(115200);
pinMode(DHT11PIN, INPUT);
pinMode(IR, INPUT);
pinMode(PWM1, OUTPUT);
pinMode(PWM2, OUTPUT);
irrecv.enableIRIn(); // Start the receiver
//WiFi初始化
Serial.print("连接wifi");
Serial.println(ssid);
WiFi.begin(ssid, password);
//判断是否连接成功
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println("WiFi connected");
Serial.println("IP address: "); //输出IP地址
Serial.println(WiFi.localIP());
client.setServer(mqtt_server, mqtt_server_port);
client.setCallback(callback);
Serial.println("start!");
}
void loop() {
int IR_value = digitalRead(IR);
int chk = DHT11.read(DHT11PIN);
float H = DHT11.humidity;
float T = DHT11.temperature;
if (irrecv.decode(&results))
{
serialPrintUint64(results.value, HEX);
Serial.println("");
irrecv.resume(); // Receive the next value
}
delay(500);
if (results.value == F1) {
Serial.println("1");
analogWrite(PWM1, 100);analogWrite(PWM2, 0);
} else if (results.value == F2 || T > 33 || IR_value == 1) {
Serial.println("2");
analogWrite(PWM1, 175);analogWrite(PWM2, 0);
} else if (results.value == F3) {
Serial.println("3");
analogWrite(PWM1, 255);analogWrite(PWM2, 0);
} else if(results.value == F0 || (T < 33 && IR_value == 0)) {
Serial.println("0");
analogWrite(PWM1, 0);analogWrite(PWM2, 0);
}
reconnect();
long now = millis(); //获取当前时间
if (now - lastMsg > timeval)
{
//如果达到3s,进行数据上传
lastMsg = now;
String msg1 = " " + (String)T + "*C" + " " + (String)H + "%"; //数据封装DHT11 temp hum
client.publish(DHT11topic, msg1.c_str()); //数据上传
String msg2 = " " + (String)IR_value; //数据封装DHT11 temp hum
client.publish(IRtopic, msg2.c_str()); //数据上传
}
client.loop();
}
运行日志能不能找出来发给我