Нужно знать, как отправлять значения HEX через SoftwareSerial на Arduino Uno

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

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

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

<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);
}

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

ocrdu 10.12.2020 18:19
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
1
1 870
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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);
}

Похоже, выводит одно и то же.

bill z 11.12.2020 00:56

АА 13 1 1Е АА 2 0 АС

bill z 11.12.2020 00:58

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

bill z 11.12.2020 01:00

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

bill z 11.12.2020 01:12

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

ocrdu 11.12.2020 01:15

Есть ли преимущество в использовании Softwareserial lib и отправке TX / RX на разные контакты или нет и использовании распознанных контактов 0 и 1 на UNIO?

bill z 11.12.2020 01:52

Не знаю, я никогда не использую SoftwareSerial. Вы можете спросить на Arduino.

ocrdu 11.12.2020 01:55

Пожалуйста. Не забудьте вернуть содержимое SoftwareSerial и файлы MP3.write(command[i]); и т. д.; Я удалил некоторые вещи, чтобы изолировать проблему.

ocrdu 11.12.2020 02:08

Было предложено добавить строку в мой код, поэтому, когда шестнадцатеричный символ меньше 16, в serial.print("0");. Это заставляет Serial Monitor выглядеть хорошо, но это не дает положительных результатов при общении с MP3 Player.

bill z 11.12.2020 18:29

Нет, просто выглядит лучше. MP3-плеер просто получает байт, и ему все равно, выглядит ли этот байт для вас как 0 или 00; отправленный байт просто 0.

ocrdu 11.12.2020 18:33

Другие вопросы по теме