2017-08-13 163 views
0

在将Arduino连接到Azure IoT集线器的simplesample_mqtt.c的C文件中,我需要使用IRsend和IrRemoteESP8266库来发送带有Azure IoT集线器的红外信号。未知类型名称'IRsend'

  1. #include <IRremoteESP8266.h>
  2. #include <IRsend.h>
  3. IRsend irsend(10); // An IR LED is controlled by GPIO pin 4 (D2)

,当我在我的主要Ardunio文件中使用此代码,我没有任何问题。但是,当我使用这些包含在C文件(implesample_mqtt.c)中时,我从第3行得到这个错误:“未知类型名称”IRsend'“。

enter image description here

误差充分信息: 阿尔杜伊诺:1.8.2(视窗10),板: “NodeMCU 0.9(ESP-12模块),80兆赫,115200,4M(3M SPIFFS)”

从sketch \ simplesample_mqtt.c包含的文件中:29:0:

C:\ Program Files(x86)\ Arduino \ libraries \ IRremoteESP8266 \ src/IRsend.h:29:1:error:unknown type name' class'

class IRsend {

C:\ Program Files(x86)\ Arduino \ libraries \ IRremoteESP8266 \ src/IRsend.h:29:14:error:expected'=',',',';','asm'或'attribute'之前 '{' 令牌

类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”

该报告将产生“编译期间显示详细输出”启用 选项与 更多信息来控制在文件 - >首选项。

回答

0

我解决了这个问题。这样做的原因是因为主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; 
}