在simplesample_mqtt.c中将Arduino连接到Azure IoT中心的C文件中,我需要使用IRsend和IrRemoteESP8266库通过Azure IoT中心发送红外信号。
#include <IRremoteESP8266.h>
#include <IRsend.h>
IRsend irsend(10); // An IR LED is controlled by GPIO pin 4 (D2)
我在主Ardunio文件中使用此代码时没有任何问题。但是当我在C文件(implesample_mqtt.c)中使用这些包含时,我从第3行得到了这个错误:“未知类型名称'IRsend'”。
错误完整信息: Arduino:1.8.2(Windows 10),主板:“NodeMCU 0.9(ESP-12模块),80 MHz,115200,4M(3M SPIFFS)”
在sketch \ simplesample_mqtt.c:29:0:
中包含的文件中C:\ Program Files(x86)\ Arduino \ libraries \ IRremoteESP8266 \ src / IRsend.h:29:1:错误:未知类型名称'class'
class IRsend {
C:\ Program Files(x86)\ Arduino \ libraries \ IRremoteESP8266 \ src / IRsend.h:29:14:错误:预期'=',',',';','asm'或'属性'在'{'令牌
之前class IRsend {
simplesample_mqtt.c:31:错误:未知类型名称'IRsend'
IRsend irsend(10); // IR LED由GPIO引脚4(D2)控制
simplesample_mqtt.c:31:错误:预期的声明说明符或数字常量前的'...'
IRsend irsend(10); // IR LED由GPIO引脚4(D2)控制
退出状态1 未知类型名称'IRsend'
此报告将提供更多信息 “在编译期间显示详细输出” 文件中启用了选项 - &gt;偏好。
答案 0 :(得分:0)
我解决了这个问题。原因是因为main ardunio是c ++而simplesample_mqtt.c是c代码,我们必须在c代码中使用c ++代码:
我的主要ardunio文件你必须声明这样的函数:
extern "C" void TurnOn();
void TurnOn()
{
digitalWrite(RELAY_SONOFF, HIGH);
digitalWrite(LED_SONOFF, HIGH);
}
并在c代码中使用此函数:
void TurnOn();
EXECUTE_COMMAND_RESULT TurnOn(ContosoAnemometer* device)
{
(void)device;
TurnOn();
(void)printf("Turning fan on.\r\n");
return EXECUTE_COMMAND_SUCCESS;
}