Строка не печатается в последовательном мониторе

serial-data print

Я пытаюсь сделать ядро для создателя макроключей, это код стартовой страницы:

char m[] = "What do you want to do? Type the following commands in this "
      "terminal:\nnew  --> Creates a new Keybinding\ndelete  --> Deletes a " 
      "previous Keybind\nlookup --> Find what is bound to a key\n\nTurn off the " 
      "switch to go back to the normal mode.";
Serial.println(m);
Serial.println(String(takenKeybinds) + "/64 Keybinds taken.");

Когда я запускаю его, на экране отображается:

What do you want to do? Type the following commands in this terminal:
new  --> Creates a new Keybinding
delete  --> Deletes a previous Keybind
lookup --> Find what is bound to a key

Turn off the switch to go back to the normal mode.

Последняя строка отсутствует. Это проблема с приведением объектов? takenKeybind — это int.

, 👍0

Обсуждение

это происходит в минимальном скетче?, @Juraj

Для какой платы компилируете?, @Majenko


1 ответ


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

0

Никогда не делайте этого:

Serial.println(String(takenKeybinds) + "/64 Keybinds taken.");

Да, он должен справиться с этим и добавить строки, но это действительно неприятно, даже если это работает. И нет абсолютно никакого призыва когда-либо выполнять конкатенацию при печати в последовательный порт.

Вместо этого просто используйте:

Serial.print(takenKeybinds);
Serial.println(F("/64 Keybinds taken."));

Обратите также внимание на использование макроса F() при выводе строкового литерала. Это сохраняет строку во флэш-памяти и предотвращает ее копирование в ОЗУ, что просто расточительно.

То же самое и с вашей большой длинной строкой — она тратит оперативную память, и если вы никогда не хотите ее изменять, зачем хранить ее в оперативной памяти? Лучше:

Serial.println(F("What do you want to do? Type the following commands in this terminal:"));
Serial.println(F("new  --> Creates a new Keybinding"));
Serial.println(F("delete  --> Deletes a previous Keybind"));
Serial.println(F("lookup --> Find what is bound to a key"));
Serial.println();
Serial.println(F("Turn off the switch to go back to the normal mode."));
,