0

simplesample_mqtt.c的 C 文件中,将 Arduino 连接到 Azure IoT 集线器,我需要使用 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)

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

在此处输入图像描述

错误完整信息:Arduino:1.8.2(Windows 10),板:“NodeMCU 0.9(ESP-12 模块)、80 MHz、115200、4M(3M SPIFFS)”

在草图\simplesample_mqtt.c:29:0 包含的文件中:

C:\Program Files (x86)\Arduino\libraries\IRremoteESP8266\src/IRsend.h:29:1:错误:未知类型名称“类”

类IRsend {

C:\Program Files (x86)\Arduino\libraries\IRremoteESP8266\src/IRsend.h:29:14: 错误:在 '{ ' 令牌

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

此报告将在文件 -> 首选项中启用“在编译期间显示详细输出”选项提供更多信息。

4

1 回答 1

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;
}
于 2017-08-15T09:34:16.350 回答