Program.cs 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO.Ports;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. using System.Threading;
  8. namespace FietsSimulator
  9. {
  10. class Program
  11. {
  12. static void Main(string[] args)
  13. {
  14. new FietsSimulator("COM6");
  15. while(true)
  16. {
  17. Thread.Sleep(10);
  18. }
  19. }
  20. }
  21. class FietsSimulator
  22. {
  23. private SerialPort comport;
  24. private Mode curmode;
  25. private int curvalue;
  26. private int _power;
  27. public int Power
  28. {
  29. get { return _power; }
  30. set {
  31. if (value >= 25 && value <= 400)
  32. _power = value;
  33. if (value < 25)
  34. _power = 25;
  35. if (value > 400)
  36. _power = 400;
  37. }
  38. }
  39. private enum Mode
  40. {
  41. NONE,
  42. CONSOLE,
  43. DISTANCE,
  44. TIME
  45. }
  46. public FietsSimulator(String addr)
  47. {
  48. this.comport = new SerialPort(addr, 9600);
  49. comport.DataReceived += new SerialDataReceivedEventHandler(ReceiveData);
  50. comport.Open();
  51. }
  52. private void ReceiveData(object sender, SerialDataReceivedEventArgs e)
  53. {
  54. string message = comport.ReadLine().Trim();
  55. Console.WriteLine(message);
  56. if (message == "RS")
  57. {
  58. curmode = Mode.NONE;
  59. curvalue = 0;
  60. Power = 25;
  61. SendData("ACK");
  62. }
  63. else if (message == "CU")
  64. {
  65. curmode = Mode.CONSOLE;
  66. SendData("ACK");
  67. }
  68. else if (message.Contains("PW"))
  69. {
  70. if(curmode != Mode.NONE && message.Split().Length == 2)
  71. {
  72. this.Power = Int32.Parse(message.Split(' ')[1]);
  73. }
  74. else
  75. {
  76. SendData("ERROR");
  77. }
  78. }
  79. else if (message == "ST")
  80. {
  81. SendData("0\t100\t10\t20\t" + Power.ToString() + "\t600\t0504\t200\r");
  82. // pulse rpm speed * 10 distance requested_power energy mm:ss actual_power
  83. }
  84. else
  85. {
  86. SendData("ERROR");
  87. }
  88. }
  89. private void SendData(string message)
  90. {
  91. this.comport.WriteLine(message);
  92. }
  93. }
  94. }