Передача кода цвета для RGB светодиода через NFR24L01
- Войдите на сайт для отправки комментариев
Чт, 21/03/2013 - 22:42
Всем привет!
Использую 2 arduino с NFR24l01 для управления удалённым RGB светодиодом (выбор цвета). Связь между ними есть, всё работает, код цвета передаётся.
Передаю так:
Mirf.setTADDR((byte *)"serv1"); Mirf.send((uint8_t *)"c9b2d8");
где c9b2d8 сам цвет.
На приёмной стороне принимаю так:
#include <SPI.h> #include <Mirf.h> #include <nRF24L01.h> #include <MirfHardwareSpiDriver.h> #define MAX_BUFF 32 //Буфер приёма-передачи unsigned long color; unsigned int r; unsigned int g; unsigned int b; void setup(){ Serial.begin(9600); Mirf.spi = &MirfHardwareSpi; Mirf.init(); Mirf.setRADDR((byte *)"serv1"); // задаём имя устройства Mirf.payload = MAX_BUFF; //Здесь задаём буфер Mirf.channel = 10; Mirf.config(); } void loop() { char data[Mirf.payload]; if(!Mirf.isSending() && Mirf.dataReady()) { Mirf.getData((uint8_t *)data); // Serial.println(data); setColor(data); } } void setColor(char* value) { // Convert Char* to Long color = atol(value); r = color >> 16 & 0xFF; g = color >> 8 & 0xFF; b = color >> 0 & 0xFF; analogWrite(3, r); //red analogWrite(5, g); //green analogWrite(6, b); //blue }
Цвет передаётся но не разбивается на составляющие. Что делаю не так?
Судя по вашим словам и закомечненной строчке 27 - передача строки - у вас происходит. А отсюда следует что передатчик вообще непричем и тему нужно было назвать как-то типа "парсинг строки в unsigned long".
Отложите пока ваш скетч в сторону. Сделайте отдельный тестовый. В котором будет только вызов setColor("c9b2d8"), а сделайте Serial.print-ты вашем r,g,b - убедитесь что парсинг у вас правильно идет.
Сильно подозреваю что atol просто не поняла что у вас hex значение. Глянте в доку, може там что-то типа "0xc9b2d8" требуется и вторым параметром передать вид ожидаемого числа. Просто подумайте сами, вот как можно сказать какое значение у числа "111111" если мы не знаем десятчиное, двоичное, или шестнадцатеричное это число. Даже человек не сможет определить, не то что функция ;)
P.S. На крайний случае еще sscanf() есть.
Так "не разбивается на составляющие" или "разбивается неправильно"?
Или
http://www.cplusplus.com/reference/cstdlib/strtol/
Примерно так
Но лень самому пробовать :)
Заменил на
и всё работает. Спасибо!!!