Использую библиотеку jssc для использования COM-портов в java.
Такая ситуация: к компьютеру подключена arduino, и надо в коде определить, к какому порту она подключена.
Как это реализовать?
Ответ
С точки зрения компьютера, Ардуина является конвертером USB->COM, обычным USB-устройством, со своими VID и PID.
Вам нужно прочитать ветку реестра, выудить оттуда VID и PID, и по ним узнать имя COM порта.
Как это делается на C++ я уволок отсюда
///
/// Compile an array of COM port names associated with given VID and PID
///
///
///
///
List ComPortNames(String VID, String PID)
{
String pattern = String.Format("^VID_{0}.PID_{1}", VID,PID);
Regex _rx = new Regex(pattern, RegexOptions.IgnoreCase);
List comports = new List();
RegistryKey rk1 = Registry.LocalMachine;
RegistryKey rk2 = rk1.OpenSubKey("SYSTEM\\CurrentControlSet\\Enum");
foreach (String s3 in rk2.GetSubKeyNames())
{
RegistryKey rk3 = rk2.OpenSubKey(s3);
foreach (String s in rk3.GetSubKeyNames())
{
if (_rx.Match(s).Success)
{
RegistryKey rk4 = rk3.OpenSubKey(s);
foreach (String s2 in rk4.GetSubKeyNames())
{
RegistryKey rk5 = rk4.OpenSubKey(s2);
RegistryKey rk6 = rk5.OpenSubKey("Device Parameters");
comports.Add((string)rk6.GetValue("PortName"));
}
}
}
}
return comports;
}
static void Main(string[] args)
{
List names = ComPortNames("0403", "6001");
if (names.Count > 0)
{
foreach (String s in SerialPort.GetPortNames())
{
if (names.Contains(s))
Console.WriteLine("My Arduino port is " + s);
}
}
else
Console.WriteLine("No COM ports found");
}
Комментариев нет:
Отправить комментарий