Я разрабатываю служебную программу на C # для настройки параметров Arduino Mega, используемого в качестве контроллера мотора для 3 двигателей. Данные должны быть получены контроллером двигателя, например. [D2100] [= начальный байт, D = параметр для изменения, 2 = множитель 256 (0-3), 100 = остаток, добавленный к результату умножения (0-255), который должен остаться <1024, ] = конец байта. Числовые значения передаются как десятичное значение ASCII (48-51). </p>
Я попытался отправить в виде строки через Serial.write, который работает при запросе данных от контроллера, так как я могу заполнить текущие поля. Я отправил измененные значения в виде байтов за байтом из массива байтов, использовал convert.ToInt32, но кажется, что я могу отправлять только десятичные значения ASCII, которые я подтвердил в последовательном окне IDE Arduino с помощью serial.print значения полей. Прошло только программирование баз данных на C еще в 1990-х годах, прошу прощения за мое невежество, я только учусь. Ниже моя последняя версия отправляется в виде строки, но при создании массива байтов использовалась отрубленная версия публичного bool ExCmd (string cmd), а затем закомментировали разделы для строки. Пытаясь разобраться в течение двух недель, читая и кодируя, но не решаясь, любая помощь будет принята с благодарностью.
private void SlKp_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
if (!initLoad)
{
string cmdChar = "";
int val = Convert.ToInt32(slKp.Value);
if (enaMotor == 1)
{
cmdChar = "D";
}
if (enaMotor == 2)
{
cmdChar = "E";
}
if (enaMotor == 3)
{
cmdChar = "F";
}
string val1 = Convert.ToString(val / 256);
string val2 = Convert.ToString(val % 256);
string cmd = '['+ cmdChar + val1 + val2 +']' ;
if (spHandler.ExCmd(cmd))
{
fieldChanged = true;
btSave.IsEnabled = true;
}
}
}
public bool ExCmd(string cmd)
{
try
{
if (_serialPort != null && _serialPort.IsOpen)
{
_serialPort.DiscardOutBuffer();
_serialPort.DiscardInBuffer();
_receiveNow.Reset();
/*int intCount = 0;
int intChar = cmd[intCount];
if (intChar == 0b1011011) //91 [ bracket is start byte
{
do
{*/
_serialPort.Write(cmd); //intCount,1);
/* if (cmd[intCount] != 0b1011101)
{
intCount++;
}
} while (cmd[intCount] != 0b1011101 && intCount < 4); //93 ] backet is end byte
if(cmd[intCount] == 0b1011101)
{*/
return true;
}
else
{
return false;
}
}/*
else
{
return false;
}
}
else
{
return false;
}
}*/
catch
{
return false;
}
}
Arduino Code
case 'D':
#ifdef MOTOR_1
Mtr1.lKp_x100=(RxBuffer[1]*256)+RxBuffer[2];
#endif