Как отправить несколько декодированных ИК-сигналов в одном скрипте?

Моя конечная цель — использовать мой микроконтроллер Arduino в качестве «автоматического пульта дистанционного управления». Сейчас я хотел бы узнать, как отправлять декодированные протоколы NEC один за другим в скрипте.

Я использую Nano v3.0 с ИК-светодиодом, который я вытащил из старого пульта. Я использовал VS838 и ИК-приемный модуль 338R для декодирования сигналов, оба работают на 100%.

Я знаю, как отправить один протокол в цикле.

например

#include <IRremote.h>

IRsend irsend;

void setup() {
}

void loop() {
    for (int i = 0; i < 2; i++) {
        irsend.sendNEC(0x10676897, 32);
        delay(40);
    }
    delay(5000); // 5-секундная задержка между каждым пакетом сигнала
}

Я также знаю, как отправлять один и тот же протокол повторно.

(Хотя это не сработает в цикле, я думаю, это сработает в окончательном сценарии).

например

#include <IRremote.h>

IRsend irsend;

void setup() {
}

void loop() {
    for (int i = 0; i < 2; i++) {
        irsend.sendNEC(0xFFFFFFFF, 32);
        delay(40);
    }
    delay(5000); // 5-секундная задержка между каждым пакетом сигнала
}

Однако я хотел бы включить 106722DD, 10676897 ,10678877 и отправить их в одном скрипте C++.

Я думал, что будет достаточно вызова каждого скрипта через цикл, но я понятия не имею, как это сделать в C++.

Любая помощь будет оценена по достоинству.

, 👍-1


1 ответ


Лучший ответ:

2

Я не на 100% уверен, о чем вы спрашиваете, поэтому извините, если здесь есть лишняя информация.

Учитывая, что:

void loop() {
    for (int i = 0; i < 2; i++) {
        irsend.sendNEC(0x10676897, 32);
        delay(40);
    }
    delay(5000); //5-секундная задержка между каждым пакетом сигнала
}

Отправляет одну команду дважды одним пакетом. Думаю, вам нужно сделать следующее:

void loop() {
    for (int i = 0; i < 2; i++) {
        irsend.sendNEC(106722DD, 32);
        delay(40);
        irsend.sendNEC(10676897, 32);
        delay(40);
        irsend.sendNEC(10678877, 32);
        delay(40);
    }
    delay(5000); //5-секундная задержка между каждым пакетом сигнала
}

Если это сработает, то можно будет обобщить это так:

// Новая функция для отправки кодов «items», которые хранятся в массиве «data»
void sendMulti (const uint8_t& items, const uint32_t* data)
{
    for (int i = 0; i < 2; i++) 
    {
        for (uint8_t itemIndex = 0; itemIndex < items; ++itemIndex)
        {
            irsend.sendNEC(data[itemIndex], 32);
            delay(40);
        }
    }
    delay(5000); //5-секундная задержка между каждым пакетом сигнала
}

void loop () {
    static const uint8_t MaxItems = 3;
    uint32_t  data[MaxItems] = {106722DD, 10676897, 10678877};

    sendMulti(MaxItems, data);
}

Затем можно перейти к считыванию кодов с последовательного порта или из сети и т. д.

,