Некоторые вещи, которые заставляют мою бровь подняться:
serialPort1.Write("1");
Это напишет точно один байт, 1
, но без новой строки и без завершающего NUL-байта.Но здесь вы ожидаете дополнительный байт NUL:
if (incomingByte == '\0') {
Вы должны использовать WriteLine
вместо Write
и ждать \n
вместо \0
.
Это имеет два побочных эффекта:
Первое: Если настроена некоторая буферизация, то есть определенный шанс, что новая строка будет выдвигать буферизованные данные вАрдуино.Чтобы быть уверенным, вам нужно просмотреть документы в MSDN.
Второе: это делает ваш протокол только ASCII.Это важно для облегчения отладки.Затем вы можете использовать обычную терминальную программу , такую как Hyperterm или HTerm ( edit ) или даже Serial Monitor в самой IDE Arduino ( edit ) для отладки вашего Arduino-Код, не беспокоясь об ошибках в вашем коде C #.И когда код Arduino работает, вы можете сосредоточиться на части C #.Divide et impera.
Редактировать: Еще одна вещь, которую я заметил после раскопок моего собственного Arduino:
incomingString += incomingByte;
....
if (incomingByte == '\n') { // modified this
if(incomingString == "1"){
Это, конечно, не будет работать, как ожидалось, потому что строкабудет содержать "1 \ n" в этой точке.Либо вы сравниваете с «1 \ n», либо перемещаете строку +=
после if
.