Пример #1
0
        /// <summary>
        /// Connect to the Arduino serial port
        /// </summary>
        /// <param name="portName">e.g. Com1</param>
        public async Task ConnectAsync(string portName)
        {
            await Task.Delay(0); // avoid CS1998

            Logger?.LogTrace($@"Connect: {portName}");

            // Create a new SerialPort object with default settings.
            Aborted = false;

            SetupCom(portName);

            _serialPortCancellationTokenSource = new CancellationTokenSource();

            _serialPort.Open();

            _readThread  = new Thread(Read);
            _writeThread = new Thread(Write);

            _readThread.Start();
            _writeThread.Start();

            // we need Dtr if not used as Reset
            // otherwise reset if dtr is set
            if (!DtrIsReset || ResetOnConnect)
            {
                _serialPort.DtrEnable = true;
            }
            else
            {
                _serialPort.DiscardOutBuffer();
                _serialPort.WriteLine("");
            }

            // _serialPort.DtrEnable = true;
            _serialPort.RtsEnable = true;

            bool wasEmpty;

            lock (_pendingCommands)
            {
                wasEmpty = _pendingCommands.Count == 0;
                _pendingCommands.Clear();
            }

            lock (_commands)
            {
                _commands.Clear();
            }

            if (!wasEmpty)
            {
                OnCommandQueueChanged(new SerialEventArgs(0, null));
            }

            OnCommandQueueEmpty(new SerialEventArgs(0, null));
        }
Пример #2
0
 public void SendMessage(byte[] data)
 {
     if (serialPort != null && serialPort.PortOpen())
     {
         string line = data[0].ToString();
         for (int ii = 1; ii < data.Length; ii++)
         {
             line += string.Format(".{0}", data[ii]);
         }
         bool connectionHealthy = serialPort.WriteLine(line);
         if (!connectionHealthy)
         {
             ConnectionLost();
         }
     }
 }
Пример #3
0
        public void SetVoltage(double voltageInVolt)
        {
            if (voltageInVolt < 0.0 || voltageInVolt > 30.0)
            {
                throw new ArgumentOutOfRangeException(nameof(voltageInVolt), $"Voltage must be between {0.0} and {30.0}V.");
            }

            string sendText = string.Format("SV{000}", voltageInVolt * 10);

            _serialPort.WriteLine(string.Format(sendText));

            string receivedText = _serialPort.ReadLine();
            int    status       = int.Parse(receivedText);

            if (status != 0)
            {
                throw new ErrorNumberException(status);
            }
        }
Пример #4
0
        /// <summary>
        /// Connect to the Arduino serial port
        /// </summary>
        /// <param name="portname">e.g. Com1</param>
        public async Task ConnectAsync(string portname)
        {
            // Create a new SerialPort object with default settings.
            Aborted = false;

            SetupCom(portname);

            _serialPortCancellationTokenSource = new CancellationTokenSource();
            _serialPort.Open();

            _readThread  = new Thread(Read);
            _writeThread = new Thread(Write);

            _readThread.Start();
            _writeThread.Start();

            if (!ResetOnConnect)
            {
                _serialPort.DiscardOutBuffer();
                _serialPort.WriteLine("");
            }

            bool wasempty;

            lock (_pendingCommands)
            {
                wasempty = _pendingCommands.Count == 0;
                _pendingCommands.Clear();
            }
            lock (_commands)
            {
                _commands.Clear();
            }

            if (!wasempty)
            {
                OnComandQueueChanged(new SerialEventArgs(0, null));
            }

            OnComandQueueEmpty(new SerialEventArgs(0, null));
        }