Arduino C# неправильно передается строка если отправлять ее с компа на ардуино
В общем есть приложение, в с которого я подключаюсь на ардуино и передаю строку(она является числом, так что можно использовать и int). Подключение создаю вот так:
serialPort.PortName = selectedPort;
serialPort.Open();
Отправляю данные вот так
serialPort.Write(Convert.ToString("a"));
Код ардуино:
String commandValue; // данные, поступаемые с последовательного порта
void setup()
{
lcd.begin(16,2);
lcd.backlight();
Serial.begin(9600);
}
void loop()
{
lcd.setCursor(0, 0);
if (Serial.available()) {
commandValue = Serial.read();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(commandValue);
}
else commandValue = "No Connect";
}
ЖК дисплей работает исправно, проверял, 1602 дисплей. С подсветкой все нормально. Вместо текста выводит какие-то цифры, например если текст буква a - то цифра получается 97. Возможно мне нужно передавать данные по одному символу? Или можно как-то по-нормальному. Если написать:
lcd.print("Text");
то все работает нормально
Ответы (1 шт):
Решил проблему вот так:
Вариант 1:
Пожалуй лучший способ что я нашел. Работает прекрасно и никаких проблем
С#:
serialPort.Write(resultStr);
Arduino:
void loop() {
if (Serial.available()) {
commandValue = Serial.readString();
lcd.print(commandValue);
}
delay(2000);
}
Вариант 2:
Посимвольно передавать данные. Работает хуже чем код выше. Но может пригодиться кому-нибудь как вариант решения.
С#:
for(int i = 0; i<resultStr.Length; i++)
{
serialPort.Write(Convert.ToString(resultStr[i]));
}
Раз не удается перенести целое число, то я решил переносить по одному символу, времени это занимает немного, но немного проблемно с таймингами, но у меня выводится в таймере. Думаю без таймера все будет нормально.
Arduino:
void loop() {
if (Serial.available()) {
commandValue = Serial.parseInt();
lcd.print(commandValue);
}
delay(2000);
}
parseInt служит для того, чтобы объединить передаваемые числа в одно многозначное. То есть если я передаю 1, потом 2, потом 3, то получится число 123.