Приведение массива символов к uint8_t - PullRequest
2 голосов
/ 29 мая 2019

У меня есть такое определение функции в библиотеке Arduino:

bool RHReliableDatagram::sendtoWait(uint8_t * buf, uint8_t len, uint8_t address)

Когда я использую:

uint8_t timePacket[] = "time\n";
sendtoWait(timePacket, sizeof(timePacket), SERVER_ADDRESS)

Я получаю очень хорошую строку со словом "time" на другом конце (SERVER_ADDRESS) в функции readline () pyserial, которая прекрасно декодируется с использованием кодировки utf-8.

Теперь мне нужно отправить несколько байтов, используя ту же функцию sendtoWait(). Сначала я определяю массив символов из 60 байтов

char packetBuff[60] = "";

Затем я беру каждый байт и использую его как символ.

char value = (char)flash.readByte(dumpCounter++);

Затем поместите каждое значение в массив char следующим образом:

packetBuff[charNo] = value;

После нахождения символа новой строки я снова пытаюсь отправить массив символов с помощью функции sendtoWait():

if (value == '\n') {
    Serial.println(packetBuff);
    uint8_t buff[charNo];
    for (int i = 0; i < charNo; i++) {
        buff[i] = packetBuff[i];
    }
    sendtoWait(buff, charNo, SERVER_ADDRESS))
charNo++;

Но хотя Serial.println(packetBuff) показывает правильные символы, например что-то вроде "1559105487 \ n" (метка времени Unix), массив buff просто не работает правильно и показывает случайные символы, такие как точка с запятой, случайные однозначные числа и т. д.

Как правильно привести массив символов и отправить его правильно, используя функцию sendtoWait(), как было отправлено «time \ n»?

EDIT: Полный код:

  int charNo = 0;
  char packetBuff[60] = "";
  if (dumpCounter != 0) {
    dumpCounter--;
  }
  while(dumpCounter < currentFlashLoc) {
    char value = (char)flash.readByte(dumpCounter++);
    packetBuff[charNo] = value;
    if (value == '\n') {
      Serial.println(packetBuff);
      uint8_t buff[charNo];
      for (int i = 0; i < charNo; i++) {
        buff[i] = packetBuff[i];
      }
      if (manager.sendtoWait(buff, charNo, SERVER_ADDRESS)) {
        // packet sent successfully
      }
      charNo = -1;
    }
    charNo++;
  }

1 Ответ

2 голосов
/ 29 мая 2019

Приведение массива char следующим образом:

sendtoWait((uint8_t*)packetBuff, sizeof(packetBuff), SERVER_ADDRESS)

работает правильно.buff не требуется.

...