Печать массива байтов на экране последовательного монитора Arduino IDE

Мне нужно напечатать указанный ниже массив байтов на экране последовательного монитора Arduino IDE

char b[]= {'0x7E', '0x00', '0x1C','0x90', '0x00', '0x13', '0XA2', '0x00', '0x41', '0x58', '0x1C', '0xCB', '0xFF', '0xFE', '0xC1', '0x7C', '0x00','0x0F', '0x00', '0x01', '0x00', '0x00', '0x37', '0x46', '0x46', '0x46', '0x00', '0x00', '0x00', '0xE7' };
void setup() {
Serial.begin(9600);
}

void loop() {
Serial.println(b[]);
delay(500);
}

Но всякий раз, когда я пытался распечатать, возникала проблема с ошибкой, которая не была решена, а именно

C:\Users\Misha\Desktop\test\Test_2\Test_2.ino: In function 'void loop()':

Test_2:8:18: error: expected primary-expression before ']' token

 Serial.println(b[]);

                  ^

exit status 1
expected primary-expression before ']' token

Любые предложения по этому поводу будут вам очень полезны.

, 👍2

Обсуждение

что такое b[]? Переменная массива — это просто b., @Juraj

Эй, спасибо за предложение. Всякий раз, когда я также использовал Serial.println(b), но он печатал только значение LSB, я не мог распечатать значения MSB., @varul jain

конечно. вы не можете распечатать массив с помощью print, и неверный синтаксис в этом не поможет., @Juraj

О каких значениях MSB вы говорите? У вас просто есть список из 8-битных значений. В них нет ничего «MSB» или «LSB». Я думаю, вам нужно вернуться и переосмыслить то, что вы делаете и спрашиваете, и привести эти два понятия в соответствие., @Majenko


1 ответ


Лучший ответ:

4

Таким образом невозможно распечатать массив.

Если вы хотите напечатать массив шестнадцатеричных значений (с двумя цифрами), вам необходимо использовать функцию sprintf и изменить объявление массива b.

uint8_t b[]= {0x7E, 0x00, 0x1C, 0x90, 0x00, 0x13, 0XA2, 0x00, 
              0x41, 0x58, 0x1C, 0xCB, 0xFF, 0xFE, 0xC1, 0x7C, 
              0x00, 0x0F, 0x00, 0x01, 0x00, 0x00, 0x37, 0x46, 
              0x46, 0x46, 0x00, 0x00, 0x00, 0xE7};
int i;

void printHex(uint8_t num) {
  char hexCar[2];

  sprintf(hexCar, "%02X", num);
  Serial.print(hexCar);
}

void setup() {
  Serial.begin(9600);
}

void loop() {
  for(i=0; i<sizeof(b); i++){
    printHex(b[i]);
 }

 Serial.println();
 delay(500);
}

Выходные данные:

7E001C900013A20041581CCBFFFEC17C000F0001000037464646000000E7 7E001C900013A20041581CCBFFFEC17C000F0001000037464646000000E7 7E001C900013A20041581CCBFFFEC17C000F0001000037464646000000E7

,

В этом случае аналогично. Отображаются только значения LSB, но значения MSB не отображаются на экране последовательного монитора., @varul jain

Что вы хотите напечатать? Символ ASCII или шестнадцатеричное значение? В последовательном мониторе Вы хотите это: 7E 00 ... ?, @leoc7

@varuljain Я обновил ответ., @leoc7

Кстати, буфер слишком мал, чтобы содержать два символа и символ «\0»., @KIIV

Мне очень хочется понять, КАК использовать Serial Monitor., @martymarty

Мне очень хочется понять, КАК использовать строку ввода Serial Monitor для записи/изменения элементов массива (вместо объявления массива, как это сделано в [1 ответ] выше. Марти, 8 января 2020 г., @martymarty