private void Communicate(RobustSerial arduinoPort, Cls2SimSocket brunnerSocket) { bool lockTaken = false; Interlocked.Decrement(ref ticksToNextPositionChange); Monitor.TryEnter(lockObject, TimeSpan.FromMilliseconds(1), ref lockTaken); try { if (lockTaken) { // wait for receiving new position if (brunnerSocket != null) { // Notice we change the order of Aileron,Elevator ForceMessage forceMessage = new ForceMessage( ArduinoForce2Brunner(force[1]), ArduinoForce2Brunner(force[0])); if (delaySeconds > 0) { forceMessage.aileron = 0; forceMessage.elevator = 0; } PositionMessage positionMessage = brunnerSocket.SendForcesReadPosition(forceMessage); UpdatePosition(positionMessage); } // send the current position to the Arduino if (arduinoPort.semaphore >= 1 && ticksToNextPositionChange <= 0) { arduinoPort.WriteOrder(Order.POSITION); arduinoPort.WriteInt16(this.position[0]); arduinoPort.WriteInt16(this.position[1]); Interlocked.Exchange(ref ticksToNextPositionChange, (forcedArduinoCalculation / timerMs) + 1); axisHasMoved[0] = false; axisHasMoved[1] = false; } if (arduinoPort.semaphore >= 1) { arduinoPort.WriteOrder(Order.FORCES); } } } catch (Exception ex) { logger.Error(ex, ex.StackTrace); logger.Error(ex, ex.Message); stopExecuting = true; } }
private void CheckArduinoSketchVersion(RobustSerial arduinoPort, int maxSeconds = 1) { arduinoSketchVersion = null; try { arduinoPort.WriteOrder(Order.VERSION); } catch (Exception ex) { } Stopwatch stopwatch = Stopwatch.StartNew(); while (arduinoSketchVersion == null && stopwatch.ElapsedMilliseconds < maxSeconds * 1000) { System.Threading.Thread.Sleep(100); } if (arduinoSketchVersion == null) { logger.Error("Not possible to detect the Arduino Sketch version. Check the correct port or Upload the Arduino Firmware"); throw new Exception("Arduino Joystick not detected"); } logger.Info($"Arduino sketch version is v{arduinoSketchVersion}"); switch (arduinoSketchVersion.CompareTo(expectedArduinoSketchVersion)) { case -1: logger.Warn($"Arduino sketch version is too old. Please click on Upload Firmware to update it"); break; case 1: logger.Warn($"This program doesn't seem to be the last version. Please download the most recent one"); break; } }