瀏覽代碼

Begin van aanpassingen simulator

jancoow 10 年之前
父節點
當前提交
826caa63a4
共有 1 個文件被更改,包括 60 次插入7 次删除
  1. 60 7
      Proftaak Remote Healthcare/FietsSimulator/FietsSimulator.cs

+ 60 - 7
Proftaak Remote Healthcare/FietsSimulator/FietsSimulator.cs

@@ -5,15 +5,19 @@ using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
 using System.Threading;
+using System.Timers;
+using System.Diagnostics;
 
 namespace FietsSimulator
 {
     class FietsSimulator
     {
         private SerialPort comport;
-        private Mode curmode;
-        private int curvalue;
-        private int _power;
+        private Mode curmode; 
+        private int _power, _heartbeat, rpm, speed, distance, energy;
+        private Stopwatch stopwatch = new Stopwatch();
+        private Random r = new Random();
+
         public int Power
         {
             get { return _power; }
@@ -28,6 +32,12 @@ namespace FietsSimulator
             }
         }
 
+        public int Heartbeat
+        {
+           get { return r.Next(60, 160); }
+        }
+
+
         private enum Mode
         {
             NONE,
@@ -41,6 +51,10 @@ namespace FietsSimulator
             this.comport = new SerialPort(addr, 9600);
             comport.DataReceived += new SerialDataReceivedEventHandler(ReceiveData);
             comport.Open();
+            System.Timers.Timer aTimer = new System.Timers.Timer();
+            aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
+            aTimer.Interval = 1000;
+            aTimer.Enabled = true;
         }
 
         private void ReceiveData(object sender, SerialDataReceivedEventArgs e)
@@ -50,7 +64,7 @@ namespace FietsSimulator
             if (message == "RS")
             {
                 curmode = Mode.NONE;
-                curvalue = 0;
+
                 Power = 25;
                 SendData("ACK");
             }
@@ -58,6 +72,20 @@ namespace FietsSimulator
             {
                 curmode = Mode.CONSOLE;
                 SendData("ACK");
+            }else if (message == "PD")
+            {
+                if (curmode == Mode.CONSOLE && message.Split().Length == 2)
+                {
+                    distance = Int32.Parse(message.Split(' ')[1]);
+                    curmode = Mode.DISTANCE;
+                    stopwatch.Start();
+                    rpm = 100;
+                    speed = 10;
+                }
+                else
+                {
+                    SendData("ERROR");
+                }
             }
             else if (message.Contains("PW"))
             {
@@ -70,19 +98,44 @@ namespace FietsSimulator
                     SendData("ERROR");
                 }
             }
-            else if (message == "ST")
+            else if (message == "ST" && curmode != Mode.NONE)
             {
-                SendData("0\t100\t10\t20\t" + Power.ToString() + "\t600\t0504\t200\r");
-                // pulse rpm speed * 10 distance requested_power energy mm:ss actual_power
+                SendStatus();
             }
             else
             {
                 SendData("ERROR");
             }
         }
+
         private void SendData(string message)
         {
             this.comport.WriteLine(message);
         }
+        private void SendStatus()
+        {
+            SendData(Heartbeat.ToString() + "\t"+rpm +"\t"+speed*10+"\t"+distance+"\t" + Power.ToString() + "\t600\t"+getTimeElapsed()+"\t200\r");
+        }
+
+        private string getTimeElapsed()
+        {
+            if(curmode == Mode.DISTANCE)
+            {
+                long seconds = (stopwatch.ElapsedMilliseconds / 1000) % 60;
+                long minutes = ((stopwatch.ElapsedMilliseconds - seconds) / 1000) / 60;
+                return minutes + ":" + seconds;
+            }
+            else
+            {
+                return "00:00";
+            }
+        }
+        private void OnTimedEvent(object source, ElapsedEventArgs e)
+        {
+           if(curmode == Mode.DISTANCE)
+            {
+                distance -= 1;
+            }
+        }
     }
 }