Как заставить Serial Monitor работать с библиотекой Serial Commands?

Я использую библиотеку SerialCommands и просто пытаюсь напечатать первое текстовое сообщение в Serial Monitor. Но этот код почему-то не работает.

Ожидаемый результат заключается в том, что последовательный монитор печатает сообщение ("Hello world !!"), когда я пишу "hello" и нажимаю "enter" в качестве ввода. Что-то не так или это работает не так, как я ожидал? Есть ли другой способ проверить, работают ли эти команды? Есть ли что-то, что я упустил?

#include <SerialCommands.h>

char serial_command_buffer_[32];
SerialCommands serial_commands_(&Serial, serial_command_buffer_, sizeof(serial_command_buffer_), "\r\n", ",");

void cmd_hello(SerialCommands* sender) {
  sender->GetSerial()->println("Hello world !!");
}

SerialCommand cmd_hello_("hello", cmd_hello);

void cmd_unrecognized(SerialCommands* sender, const char* cmd) {
  sender->GetSerial()->print("ERROR: Unrecognized command [");
  sender->GetSerial()->print(cmd);
  sender->GetSerial()->println("]");
}

void setup() {
  Serial.begin(9600); // Последовательная связь начинается со скорости 9600 бит/с
  serial_commands_.AddCommand(&cmd_hello_);
  serial_commands_.SetDefaultHandler(&cmd_unrecognized);
  Serial.println("Ready");
}

void loop() {
  serial_commands_.ReadSerial();
}

, 👍0

Обсуждение

Вы выбрали правильную строку, заканчивающуюся в последовательном мониторе?, @chrisl

Ах, это была моя ошибка, спасибо @chrisl. Мне пришлось выбрать «Оба NL и CR» («\r\n»). Если вы хотите опубликовать это как ответ, я приму его, @ChesuCR


1 ответ


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

1

Вы определили, что каждая команда будет заканчиваться \r\n. Поэтому вам нужно выбрать «Both NL & CR» в качестве окончания строки в последовательном мониторе, чтобы он добавил окончание строки к вашей команде. Если вы не отправите правильное окончание строки, библиотека подумает, что команда еще не завершилась, и, таким образом, ничего не сделает, пока не получит правильное окончание строки.

,