Пример #1
0
        ////////////////////////////////////////////////////////////////////////////////////////////////////

        //if port is empty program will auto select arduino port
        public TGMTarduino(string portName = "", int baudRate = 9600)
        {
            if (portName == "")
            {
                ArduinoProperties arduinoProperties = AutoDetectArduinoPort();
                portName = arduinoProperties.portName;
                baudRate = arduinoProperties.baudRate;

                if (portName == null)
                {
                    return;
                }
            }
            try
            {
                m_port = new SerialPort(portName, baudRate, Parity.None, 8, StopBits.One);
                // Attach a method to be called when there
                // is data waiting in the port's buffer
                m_port.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);

                // Begin communications
                m_port.Open();

                m_portName = portName;

                m_threadCheckDisconnected = new Thread(new ThreadStart(CheckDisconnected));
                m_threadCheckDisconnected.Start();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
Пример #2
0
        ////////////////////////////////////////////////////////////////////////////////////////////////////

        private ArduinoProperties AutoDetectArduinoPort()
        {
            ManagementScope          connectionScope = new ManagementScope();
            SelectQuery              serialQuery     = new SelectQuery("SELECT * FROM Win32_SerialPort");
            ManagementObjectSearcher searcher        = new ManagementObjectSearcher(connectionScope, serialQuery);

            ArduinoProperties result = new ArduinoProperties();

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

                    if (desc.Contains("Arduino") ||
                        pnp.Contains("VID_10C4") ||// Vietduino
                        pnp.Contains("VID_2341"))    //arduino)
                    {
                        result.portName = deviceId;
                    }

                    var config = item.GetRelated("Win32_SerialPortConfiguration").Cast <ManagementObject>().ToList().FirstOrDefault();

                    result.baudRate = (config != null)
                                        ? int.Parse(config["BaudRate"].ToString())
                                        : int.Parse(item["MaxBaudRate"].ToString());
                }
            }
            catch (ManagementException e)
            {
                throw new Exception("Can not get Arduino port, please check connection");
            }

            return(result);
        }