#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-плеера обратно, они просто будут отображаться без начальных нулей на последовательном мониторе.