Как отправить несколько декодированных ИК-сигналов в одном скрипте?
Моя конечная цель — использовать мой микроконтроллер 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++.
Любая помощь будет оценена по достоинству.
@Jonas, 👍-1
1 ответ
Лучший ответ:
Я не на 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);
}
Затем можно перейти к считыванию кодов с последовательного порта или из сети и т. д.
- Использовать irsend с тем, что является char* , но он этого не примет. Как преобразовать его в то, что ему нужно?
- C++ против языка Arduino?
- Как использовать SPI на Arduino?
- Какие накладные расходы и другие соображения существуют при использовании структуры по сравнению с классом?
- Ошибка: expected unqualified-id before 'if'
- Использование VS1838B с Arduino
- Что лучше использовать: #define или const int для констант?
- Функции со строковыми параметрами