/// <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)); }
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(); } } }
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); } }
/// <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)); }