未知的类型名称'IRsend'

时间:2017-08-13 19:31:44

标签: arduino nodemcu infrared azure-iot-sdk

simplesample_mqtt.c中将Arduino连接到Azure IoT中心的C文件中,我需要使用IRsend和IrRemoteESP8266库通过Azure IoT中心发送红外信号。

  1. #include <IRremoteESP8266.h>
  2. #include <IRsend.h>
  3. IRsend irsend(10); // An IR LED is controlled by GPIO pin 4 (D2)
  4. 我在主Ardunio文件中使用此代码时没有任何问题。但是当我在C文件(implesample_mqtt.c)中使用这些包含时,我从第3行得到了这个错误:“未知类型名称'IRsend'”。

    enter image description here

    错误完整信息: 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;偏好。

1 个答案:

答案 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;
}