Неизвестное имя типа «IRsend»

В файле C в simplesample_mqtt.c, который подключает Arduino к концентратору Интернета вещей Azure, мне нужно использовать библиотеки IRsend и IrRemoteESP8266 для отправки инфракрасного сигнала с концентратором Интернета вещей Azure.

  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 МГц, 115200, 4M (3M SPIFFS)»

В файле, включенном из sketch\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: ошибка: ожидается '=', ',', ';', 'asm' или 'атрибут' перед '{ жетон

класс IRsend {

simplesample_mqtt.c:31: ошибка: неизвестное имя типа «IRsend»

IRsend irsend(10); // ИК-светодиод управляется выводом 4 (D2) GPIO.

simplesample_mqtt.c:31: ошибка: ожидаемые спецификаторы объявления или '...' перед числовой константой

IRsend irsend(10); // ИК-светодиод управляется выводом 4 (D2) GPIO.

статус выхода 1 имя неизвестного типа 'IRsend'

В этом отчете будет больше информации, если в меню «Файл» -> «Настройки» включена опция «Показать подробный вывод во время компиляции».


person Mehran Mazhar    schedule 13.08.2017    source источник


Ответы (1)


Я решил эту проблему. Причина этого в том, что основной 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;
}
person Mehran Mazhar    schedule 15.08.2017