Как использовать pyserial для написания двух отдельных сообщений?

Я использую pyserial для связи с моим arduino. Я настроил соединение, и все работает нормально. Теперь у меня есть эти две команды записи:

pyserial.write("conn".encode())
pyserial.write("mod1".encode())

На моем ардуино:

while (!Serial.available());
String s = Serial.readString();
if (s=="conn") do...;
if (s=="mod1") do...;

Проблема в том , что ни одно из утверждений if не является истинным, потому что s становится "connmod1", потому что сообщения отправляются почти одновременно, я думаю. Я знаю, что мог бы использовать какой-нибудь разделитель для разделения строки, но мне хотелось бы знать, каким может быть удобное решение?

, 👍1

Обсуждение

вы уже ответили на свой собственный вопрос: "Я знаю, что могу использовать какой-то разделитель"., @jsotola

ReadString() ждет следующего символа до тайм-аута. тайм-аут по умолчанию составляет 1 секунду. вы можете установить тайм-аут с помощью Serial.setTimeout(millis). https://www.arduino.cc/reference/en/language/functions/communication/serial/readstring/, @Juraj


1 ответ


1

Если вам нужно быстрое, дешевое и простое решение, вы можете просто использовать sleep() в своем скрипте Python, чтобы установить задержку между командами. Очевидно, что это не идеальное решение, но его нетрудно реализовать.

Или, как вы сказали, вы могли бы использовать разделитель. Это не так просто реализовать, но это будет работать лучше.

Если вы пойдете по пути разделителя, вам, вероятно, придется использовать Serial.read() вместо Serial.ReadString(). Таким образом, вы можете изучать символы по отдельности по мере их появления. Вы можете хранить свои символы в строковом или символьном массиве до тех пор, пока не обнаружите разделитель, а затем выполнить команду.

Надеюсь, это поможет!

,