работа с модулем si4432 и его библиотекой rf22

bo_hdan
bo_hdan аватар
Offline
Зарегистрирован: 15.06.2016

привет всем. я новичок, взялся за реализацию проекта, в котором нужно радиоуправление реле. проблема возныкла в том, что не могу разобраться с буфером пам"яти, тоесть не знаю как правильно считать принятое сообщение.

    Serial.println("Sending to rf22_server");
    // Send a message to rf22_server
    uint8_t data[] = "Hello World!";
    rf22.send(data, sizeof(data));
   
    rf22.waitPacketSent();
    // Now wait for a reply
    uint8_t buf[RF22_MAX_MESSAGE_LEN];
    uint8_t len = sizeof(buf);
 
    if (rf22.waitAvailableTimeout(500))
    { 
      // Should be a message for us now   
      if (rf22.recv(buf, &len))
      {
        Serial.print("got reply: ");
        Serial.println((char*)buf); // непонятно что это: (char*)buf
      }
вот стандартный пример кода. на сколько понимаю, вся библиотека работает с типом uint8_t, но откуда тут  char?
библеотеку перерыл всю, ответа не нашел.
помогите понять что и как
MagicianT
Offline
Зарегистрирован: 03.10.2015

А что вас смущает, ну надо ей char вот и кастят, в директории ардуино есть декларация разных вариантов

Print.h

Цитата:
size_t println(const __FlashStringHelper *);

    size_t println(const String &s);
    size_t println(const char[]);
    size_t println(char);
    size_t println(unsigned char, int = DEC);
    size_t println(int, int = DEC);
    size_t println(unsigned int, int = DEC);
    size_t println(long, int = DEC);
    size_t println(unsigned long, int = DEC);
    size_t println(double, int = 2);
    size_t println(const Printable&);
    size_t println(void);
 
По мне так и та и та байт. Те кто библу для радио модуля писал, им наверно лучше когда байт или uint8_t, а для принта понятнее char.
 
bo_hdan
bo_hdan аватар
Offline
Зарегистрирован: 15.06.2016

может плохо обьяснил, но вопрос в том, какого типа дание в буффере: char или uint_8?

и как можно их оттуда достать, записать в масив например?

и еще, речь шла о библиотеке rf22

MagicianT
Offline
Зарегистрирован: 03.10.2015

Тип данных в массиве вы сами определили в этой строке

 uint8_t buf[RF22_MAX_MESSAGE_LEN];

Массив как массив, в него писать-читать всё угодно можно, как и с любым другим массивом в языке С

Вопрос я так понимаю в том зачем переопределять тип переменных при передаче массива в Println()
Программер из меня не ахти, но насколько я знаю это особенность языка С, строгий контроль за типом переменных, в других типа Java попроще. Т.е. если Println() хочет видеть char то на (char *)
bo_hdan
bo_hdan аватар
Offline
Зарегистрирован: 15.06.2016

теперь понял, буду пробовать, спасибо:)