Преобразование string в unsigned long
- Войдите на сайт для отправки комментариев
Пнд, 19/05/2014 - 16:54
Всем доброго времени суток.
Столкнулся с проблемкой. На форуме ничего подобного не нашел.
Короче суть.
Имеется 2 arduino связанных между собой по радиоканалу с помощью Nrf24L01.
На одной из плат прикреплен ir передатчик.
Скетчи отправки данных из com порта adruinы 1 к другой работают. Проблема собственно в следующем:
Неоходимо реализовать отправку ir комманды вида Команда_ТипПротокола (0x20DFFF00_NEC).
Точнее с отправкой проблем нет. Проблема на стороне принимающей arduino:необходимо распарсить данную строку и передать код irsend.sendNEC(Команда, 32).
Может кто посоветует вообще другой способ?
На всякий случай скетчи:
// код №1 для передатчика #include <SPI.h> #include "RF24.h" RF24 radio(9, 10); const uint64_t pipes[2] = {0xF0F0F0F000LL, 0xF0F0F0F0FFLL}; void setup() { Serial.begin(9600); radio.begin(); radio.setDataRate(RF24_250KBPS); radio.setChannel(100); radio.setRetries(15,15); radio.openWritingPipe(pipes[1]); radio.openReadingPipe(1, pipes[0]); radio.startListening(); } void loop() { if(Serial.available()){ char data[32] = ""; byte i = 0; while(Serial.available()){ data[i] = Serial.read(); i++; delay(2); } data[i] = 0; radio.stopListening(); radio.write(&data, 32); radio.startListening(); } }
// код №2 для приёмника #include <SPI.h> #include "RF24.h" #include <IRremote.h> IRsend irsend; RF24 radio(2, 3); const uint64_t pipes[2] = {0xF0F0F0F000LL, 0xF0F0F0F0FFLL}; void setup() { Serial.begin(9600); radio.begin(); radio.setDataRate(RF24_250KBPS); radio.setChannel(100); radio.setRetries(15,15); radio.openReadingPipe(1, pipes[1]); radio.startListening(); } void loop() { if(radio.available()) { char data[32] = ""; radio.read(&data,32); /* блок для разбора присланной команды и ее дальнейшей отправки на ir передатчик */ } }
поискав в инете нашел функцию strtoul
соотвественно дописал код:
Но если выводить в Serial значение CommandLong(при отправке 0x20DFFF00_NEC) , то получается 551550735.
Если выводить как Serial.println(CommandLong,HEX), то получается 20DFFF00.
В итоге вопрос тот же что и в начале: как пребрзовать char вида 0x20DFFF00 в unsigned long вида 0x20DFFF00??????????
Странно перевелось
551550735 соответствует 0x20DFFF0F
И чем вас не устраивает strtoul?
Что вы понимаете под "unsigned long вида 0x20DFFF00"?
unsigned long v = strtoul("0x20DFFF00",0,16);
Serial.println(v);
Что выводит?
Таким образом выводит 0.
Попробуйте скормить функции строку без префикса "0x"
Пробовал и так, результат тотже - выдает 0.
только что проверил, вот это работает на ура, причем и без 0x тоже, результат - 551550720
Да все работает. Странно пробовал так ранее выводило не то что нужно. Странно.
Спасибо.