Нужно знать, как отправлять шестнадцатеричные значения через SoftwareSerial на Arduino Uno

#hex #arduino-uno #uart

#шестнадцатеричный #arduino-uno #uart

Вопрос:

Я пытаюсь написать код Android Uno для отправки шестнадцатеричных значений через SoftwareSerial, но при просмотре последовательного монитора вывод не такой, какой я ожидал или хотел, и я еще недостаточно опытен, чтобы знать, что делать дальше.

Я не знаю, откуда берутся FFFFS, чтобы иметь возможность их устранить.

Мой желаемый результат:

 <br>
AA130120<br>
AA0400AE
 

Что я получаю:

 <br>
FFFFFFFFAA1311E<br>
FFFFFFAA20
 

Мой код:

 #include <SoftwareSerial.h>
// Define the RX and TX pins to establish UART communication with the MP3 Player Module.
#define Pin_RX 0 // to RX
#define Pin_TX 1 // to TX
#define d_sleep 10000

// Define the required MP3 Player Commands:
static byte ccPlay[]   = {0xAA, 0x02, 0x00, 0xAC}; // Play:
static byte ccSetVol[] = {0xAA, 0x13, 0x01, 0x20}; // Set Volume (00-30):  

// Define the Serial MP3 Player Module.
SoftwareSerial MP3(Pin_RX, Pin_TX);

void setup() {
  // Initiate the serial monitor.
  Serial.begin(9600);
}

void loop() { // Play a song.
  ccSetVol[3] = {0x1E};
  send_command_to_MP3_player(ccSetVol, 4);
  delay(d_sleep);
  send_command_to_MP3_player(ccPlay, 4);
  delay(d_sleep);
}

void send_command_to_MP3_player(int8_t command[], int len){
  //Serial.print("nMP3 Command => ");
  for (int i=0; i<len; i  ) {
    MP3.write(command[i]);
    Serial.print(command[i], HEX); 
  }
  delay(100);
}
 

Комментарии:

1. Это не компилируется для меня; void send_command_to_MP3_player(int8_t command[], int len) должно быть void send_command_to_MP3_player(байтовая команда [], int len) или void send_command_to_MP3_player(uint8_t command[], int len)

Ответ №1:

Не могли бы вы установить скорость передачи в бодах на последовательном мониторе на 9600 бит / с, запустить этот код и посмотреть, выдает ли он байты, которые вы ожидаете на последовательном мониторе?

 #define d_sleep 10000

static byte ccPlay[]   = {0xAA, 0x02, 0x00, 0xAC};
static byte ccSetVol[] = {0xAA, 0x13, 0x01, 0x20};

void send_command_to_MP3_player(byte command[], int len) {
  for (int i=0; i<len; i  ) {
    //Serial.println(command[i], HEX);
    Serial.print(command[i], HEX);
  }
  //Serial.println();
  delay(100);
}

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

void loop() {
  ccSetVol[3] = 0x1E;
  send_command_to_MP3_player(ccSetVol, 4);
  delay(d_sleep);
  send_command_to_MP3_player(ccPlay, 4);
  delay(d_sleep);
}
 

Комментарии:

1. Похоже, выводит то же самое.

2. AA 13 1 1E AA 2 0 AC

3. Позвольте мне объяснить, пожалуйста. Эти шестнадцатеричные значения отображаются на последовательном мониторе вертикально, но когда я пытаюсь отправить вам то, что вижу, эта утилита размещает их горизонтально с пробелом.

4. Я не хочу CR / LF, но мне нужны начальные нули, пожалуйста.

5. Я отредактирую код. Я не могу дать вам начальные нули, но это не имеет значения для отправки на MP3-плеер; правильные байты будут отправлены, если вы добавите код MP3-плеера обратно, они просто будут отображаться без начальных нулей на последовательном мониторе.