C # общение с Arduino COM доступ запрещен - PullRequest
0 голосов
/ 24 июня 2018

Я работаю с датчиком отпечатка пальца на Arduino, но иногда во время выполнения мое приложение WPF выдает исключение для sp.Open (), говоря "COM3" Доступ запрещен "

Вот код на c #:

public string ConfigPort()
    {
        SerialPort sp = new SerialPort();

        sp.BaudRate = 9600;
        sp.PortName = AutodetectArduinoPort();
        sp.Open();

        string s = "";
        while (true)
        {
            s = sp.ReadLine();
            Console.WriteLine(s);

            return s;

        }
    }

Вот метод AutodetectArduinoPort:

public string AutodetectArduinoPort()
    {
        ManagementScope connectionScope = new ManagementScope();
        SelectQuery serialQuery = new SelectQuery("SELECT * FROM Win32_SerialPort");
        ManagementObjectSearcher searcher = new ManagementObjectSearcher(connectionScope, serialQuery);

        try
        {
            foreach (ManagementObject item in searcher.Get())
            {
                string desc = item["Description"].ToString();
                string deviceId = item["DeviceID"].ToString();

                if (desc.Contains("Arduino"))
                {
                    return deviceId;
                }
            }
        }
        catch (ManagementException e)
        {
            /* Do Nothing */
        }

        return null;
    }

Любое решение ??

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

Это часто случается с Arduino, лично я думаю, что есть проблема с драйвером FTDI .... конечно, не будет первой проблемой с ними. Когда это происходит, я физически отключаю устройство от USB-порта, жду звукового уведомления от Windows, а затем снова подключаю его. Похоже, что это «сбрасывает» порт и заставляет все, что удерживает его открытым, освободить его, и вы можете пойти снова. Возможно, со временем вам придется делать это немного, поэтому единственный другой совет, который у меня есть, - это использовать дешевый USB-концентратор, чтобы вы могли изнашивать контакты порта на этом, а не дорогой ноутбук / настольный компьютер.

0 голосов
/ 24 июня 2018

Полученная ошибка означает, что порт уже открыт.Убедитесь, что вы вызываете ConfigPort() только один раз, и после того, как вы закончите обработку данных с Arduino, закройте порт с помощью sp.Close().Я бы предложил преобразовать sp в глобальную переменную и подписаться на событие OnClosing вашего окна WPF, чтобы вы могли закрыть порт, когда пользователь закроет приложение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...