Перевод int в HEX для irsend
- Войдите на сайт для отправки комментариев
Чт, 04/02/2016 - 21:47
Добрый день!
Помогите решить задачу, над которой бьюсь несколько дней.
Задача:
В переменной на ардуино хранится ИК команда, например, FDC23. Её нужно отправить ИК-светодиоду через irsend.sendNEC()
int ir=FDC23;
irsend.sendNEC(0xFDC23, 32) - Работает(ИК приемник правильно интерпретирует команду)
irsend.sendNEC(ir, 32) - Не работает
irsend.sendNEC(FDC23, 32) - Не работает
Как приделать префикс 0x к переменной ir, чтобы получилось 0xFDC23?
Пробовал сохранять как строку "0xFDC23" и переводить в int с помощью strtoul(), toInt(). Переводится не корректно.
Я не очень точно написал.
строка int ir=FDC23; - для наглядности, конечно, вместо HEX тут стоит команда в DEC.
int ir = 0xFDC23;
Согласен.
Дело в том, что переменные попадают в ардуино через фотодиод.
После прочтения им команды, я получаю переменную
ir= FDC23;
Как ее сохранить в формате 0xFDC23 ?
long int strtol (const char* str, char** endptr, int base);
nikolaevartem, вы получаете эту переменную как? там вроде просто Serial.print Уберите оттуда ",HEX" и будет писать в десятичке
nikolaevartem, вы получаете эту переменную как? там вроде просто Serial.print Уберите оттуда ",HEX" и будет писать в десятичке
Как я уже писал, получаю переменную при декодирования ИК сигнала. Стандартным примером из библиотеки Irremote.
Дело не в том, в каком виде переменная выводится на экран.
Функция irremote.sendNEC() позволяет отправлять команды в HEX, но к ним еще нужен префикс "0x".
long int strtol (const char* str, char** endptr, int base);
Спасибо, буду пробовать.
Без попкорна не обойтись, ждем'с развязки
Ожидаемый префикс "0x" на выходе так и не появился( надо пробовать на sendNEC...
Возможно, стоит зайти с другой стороны и заставить irremote.sendNEC() отправлять код в DEC или CHAR[]?
Возможно, стоит зайти с другой стороны и заставить irremote.sendNEC() отправлять код в DEC или CHAR[]?
По моему вы не поняли о чём я сказал в #5 Ваш код изначально лежит в переменной лонг. В хексе он вам просто выводится на экран. Т.к. это просто тип отображения . Если вы не хотите что бы показывал в хексе -уберите из вывода ",HEX"
По моему вы не поняли о чём я сказал в #5 Ваш код изначально лежит в переменной лонг. В хексе он вам просто выводится на экран. Т.к. это просто тип отображения . Если вы не хотите что бы показывал в хексе -уберите из вывода ",HEX"
Я Вас понял, но задача состоит в другом. Я ее подробно описал выше.
Главное, чтобы функция irremote.sendNEC(), считала, что к ней приходят команды вида "0xFDC23", а не "FDC23".
Она не работает, если отсылать
FDC23
"FDC23"
"0xFDC23"
а так же в DEC и BIN
А работает только если явно написать
irremote.sendNEC(0xFDC23, 32);
В библиотеке написано следующее void IRsend::sendNEC (unsigned long data, int nbits)
Значит переменная в ктоторой вы храните код должна быть unsigned long , но не как не int. (см. размерность типов)
В библиотеке написано следующее void IRsend::sendNEC (unsigned long data, int nbits)
Значит переменная в ктоторой вы храните код должна быть unsigned long , но не как не int. (см. размерность типов)
Другими словами
unsigned long ir=0xFDC23;
irsend.sendNEC(ir, 32);
Должно работать.
Не ужели еще не проверили? Конечно будет. Ваша прблема в том, вместо 32 бит вы передавали переменную 16 бит, нехватяюшие 16 бит брались программой send из соседних ячеек, вот и получалась ерунда. Следите за размерностью типов. Заглядывайте в исходники библиотек.
.
Не ужели еще не проверили? Конечно будет. Ваша прблема в том, вместо 32 бит вы передавали переменную 16 бит, нехватяюшие 16 бит брались программой send из соседних ячеек, вот и получалась ерунда. Следите за размерностью типов. Заглядывайте в исходники библиотек.
Мне приятно Ваше любопытство) Приеду из командировки, буду пробовать.
Не ужели еще не проверили? Конечно будет. Ваша прблема в том, вместо 32 бит вы передавали переменную 16 бит, нехватяюшие 16 бит брались программой send из соседних ячеек, вот и получалась ерунда. Следите за размерностью типов. Заглядывайте в исходники библиотек.
Мне приятно Ваше любопытство) Приеду из командировки, буду пробовать.
Все получилось.
Если указывать тип unsigned long, то irsend отлично отсылает записанную переменную.