Advertisement
vencinachev

MeccanumControl

Mar 31st, 2021
902
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 14.00 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.IO.Ports;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. using System.Windows.Forms;
  11.  
  12. namespace MecanumWheelsControl
  13. {
  14.     public partial class MecanumControl : Form
  15.     {
  16.         public static SerialPort mobilePlatform;
  17.         bool isConnected = false;
  18.         List<Button> controls;
  19.         bool clockDirection = true;
  20.         bool isOpenLoop = true;
  21.         public MecanumControl()
  22.         {
  23.             InitializeComponent();
  24.             speed_lbl.Text = speedSlider.Value.ToString() + " %";
  25.             speedSlider.Enabled = false;
  26.             direction_btn.Enabled = false;
  27.             wf_btn.Enabled = false;
  28.             reset_btn.Enabled = false;
  29.             pid_btn.Enabled = false;
  30.             mobilePlatform = new SerialPort();
  31.             portsList.Items.AddRange(SerialPort.GetPortNames().Distinct().ToArray());
  32.             controls = new List<Button>();
  33.             controls.Add(fwl_btn);
  34.             controls.Add(fwd_btn);
  35.             controls.Add(fwr_btn);
  36.             controls.Add(left_btn);
  37.             controls.Add(round_btn);
  38.             controls.Add(right_btn);
  39.             controls.Add(bwl_btn);
  40.             controls.Add(back_btn);
  41.             controls.Add(bwr_btn);
  42.             foreach (var item in controls)
  43.             {
  44.                 item.Enabled = false;
  45.                 item.FlatStyle = FlatStyle.Flat;
  46.                 item.FlatAppearance.BorderSize = 1;
  47.             }
  48.         }
  49.  
  50.         private void disconnect()
  51.         {
  52.             pictureConnect.Image = Properties.Resources.discon;
  53.             connect_btn.Text = "Свържи се";
  54.             speedSlider.Enabled = false;
  55.             direction_btn.Enabled = false;
  56.             isConnected = false;
  57.             wf_btn.Enabled = false;
  58.             reset_btn.Enabled = false;
  59.             pid_btn.Enabled = false;
  60.             feedback_lbl.Text = "Отворена система";
  61.             isOpenLoop = true;
  62.             foreach (var item in controls)
  63.             {
  64.                 item.Enabled = false;
  65.             }
  66.         }
  67.         private void connect_btn_Click(object sender, EventArgs e)
  68.         {
  69.             if (!isConnected)
  70.             {
  71.                 if (portsList.Text.Length == 0)
  72.                 {
  73.                     MessageBox.Show("Не си избрал сериен порт!", "Порт проблем", MessageBoxButtons.OK, MessageBoxIcon.Error);
  74.                     return;
  75.                 }
  76.                 mobilePlatform.PortName = portsList.Text;
  77.                 mobilePlatform.BaudRate = 9600;
  78.                 try
  79.                 {
  80.                     mobilePlatform.Open();
  81.                     pictureConnect.Image = Properties.Resources.conn;
  82.                     connect_btn.Text = "Прекрати връзката";
  83.                     speedSlider.Enabled = true;
  84.                     direction_btn.Enabled = true;
  85.                     isConnected = true;
  86.                     wf_btn.Enabled = true;
  87.                     reset_btn.Enabled = true;
  88.                     pid_btn.Enabled = true;
  89.                     foreach (var item in controls)
  90.                     {
  91.                         item.Enabled = true;
  92.                     }
  93.                 }
  94.                 catch (Exception)
  95.                 {
  96.                     MessageBox.Show("Проблем със серииния порт!", "Порт проблем", MessageBoxButtons.OK, MessageBoxIcon.Error);
  97.                 }
  98.             }
  99.             else
  100.             {
  101.                 mobilePlatform.Close();
  102.                 pictureConnect.Image = Properties.Resources.discon;
  103.                 connect_btn.Text = "Свържи се";
  104.                 speedSlider.Enabled = false;
  105.                 direction_btn.Enabled = false;
  106.                 isConnected = false;
  107.                 wf_btn.Enabled = false;
  108.                 reset_btn.Enabled = false;
  109.                 pid_btn.Enabled = false;
  110.                 foreach (var item in controls)
  111.                 {
  112.                     item.Enabled = false;
  113.                 }
  114.             }    
  115.         }
  116.  
  117.         private void Form1_FormClosing(object sender, FormClosingEventArgs e)
  118.         {
  119.             if (mobilePlatform.IsOpen)
  120.             {
  121.                 mobilePlatform.Close();
  122.             }
  123.         }
  124.  
  125.         private void fwd_btn_MouseDown(object sender, MouseEventArgs e)
  126.         {
  127.             fwd_btn.FlatAppearance.BorderSize = 3;
  128.             fwd_btn.FlatAppearance.BorderColor = Color.Blue;
  129.             try
  130.             {
  131.                 mobilePlatform.Write("fwd\n");
  132.             }
  133.             catch (Exception)
  134.             {
  135.                 disconnect();
  136.             }
  137.         }
  138.  
  139.         private void fwd_btn_MouseUp(object sender, MouseEventArgs e)
  140.         {
  141.             fwd_btn.FlatAppearance.BorderSize = 1;
  142.             fwd_btn.FlatAppearance.BorderColor = Color.Black;
  143.             try
  144.             {
  145.                 mobilePlatform.Write("stop\n");
  146.             }
  147.             catch (Exception)
  148.             {
  149.                 disconnect();
  150.             }
  151.         }
  152.  
  153.  
  154.         private void fwl_btn_MouseDown(object sender, MouseEventArgs e)
  155.         {
  156.             fwl_btn.FlatAppearance.BorderSize = 3;
  157.             fwl_btn.FlatAppearance.BorderColor = Color.Blue;
  158.             try
  159.             {
  160.                 mobilePlatform.Write("fwl\n");
  161.             }
  162.             catch (Exception)
  163.             {
  164.                 disconnect();
  165.             }
  166.         }
  167.  
  168.         private void fwl_btn_MouseUp(object sender, MouseEventArgs e)
  169.         {
  170.             fwl_btn.FlatAppearance.BorderSize = 1;
  171.             fwl_btn.FlatAppearance.BorderColor = Color.Black;
  172.             try
  173.             {
  174.                 mobilePlatform.Write("stop\n");
  175.             }
  176.             catch (Exception)
  177.             {
  178.                 disconnect();
  179.             }
  180.  
  181.         }
  182.  
  183.         private void fwr_btn_MouseDown(object sender, MouseEventArgs e)
  184.         {
  185.             fwr_btn.FlatAppearance.BorderSize = 3;
  186.             fwr_btn.FlatAppearance.BorderColor = Color.Blue;
  187.             try
  188.             {
  189.                 mobilePlatform.Write("fwr\n");
  190.             }
  191.             catch (Exception)
  192.             {
  193.                 disconnect();
  194.             }
  195.         }
  196.  
  197.         private void fwr_btn_MouseUp(object sender, MouseEventArgs e)
  198.         {
  199.             fwr_btn.FlatAppearance.BorderSize = 1;
  200.             fwr_btn.FlatAppearance.BorderColor = Color.Black;
  201.             try
  202.             {
  203.                 mobilePlatform.Write("stop\n");
  204.             }
  205.             catch (Exception)
  206.             {
  207.                 disconnect();
  208.             }
  209.         }
  210.  
  211.         private void left_btn_MouseDown(object sender, MouseEventArgs e)
  212.         {
  213.             left_btn.FlatAppearance.BorderSize = 3;
  214.             left_btn.FlatAppearance.BorderColor = Color.Blue;
  215.             try
  216.             {
  217.                 mobilePlatform.Write("left\n");
  218.             }
  219.             catch (Exception)
  220.             {
  221.                 disconnect();
  222.             }
  223.         }
  224.  
  225.         private void left_btn_MouseUp(object sender, MouseEventArgs e)
  226.         {
  227.             left_btn.FlatAppearance.BorderSize = 1;
  228.             left_btn.FlatAppearance.BorderColor = Color.Black;
  229.             try
  230.             {
  231.                 mobilePlatform.Write("stop\n");
  232.             }
  233.             catch (Exception)
  234.             {
  235.                 disconnect();
  236.             }
  237.         }
  238.         private void right_btn_MouseDown(object sender, MouseEventArgs e)
  239.         {
  240.             right_btn.FlatAppearance.BorderSize = 3;
  241.             right_btn.FlatAppearance.BorderColor = Color.Blue;
  242.             try
  243.             {
  244.                 mobilePlatform.Write("right\n");
  245.             }
  246.             catch (Exception)
  247.             {
  248.                 disconnect();
  249.             }
  250.         }
  251.  
  252.         private void right_btn_MouseUp(object sender, MouseEventArgs e)
  253.         {
  254.             right_btn.FlatAppearance.BorderSize = 1;
  255.             right_btn.FlatAppearance.BorderColor = Color.Black;
  256.             try
  257.             {
  258.                 mobilePlatform.Write("stop\n");
  259.             }
  260.             catch (Exception)
  261.             {
  262.                 disconnect();
  263.             }
  264.         }
  265.  
  266.         private void bwl_btn_MouseDown(object sender, MouseEventArgs e)
  267.         {
  268.             bwl_btn.FlatAppearance.BorderSize = 3;
  269.             bwl_btn.FlatAppearance.BorderColor = Color.Blue;
  270.             try
  271.             {
  272.                 mobilePlatform.Write("bwl\n");
  273.             }
  274.             catch (Exception)
  275.             {
  276.                 disconnect();
  277.             }
  278.         }
  279.  
  280.         private void bwl_btn_MouseUp(object sender, MouseEventArgs e)
  281.         {
  282.             bwl_btn.FlatAppearance.BorderSize = 1;
  283.             bwl_btn.FlatAppearance.BorderColor = Color.Black;
  284.             try
  285.             {
  286.                 mobilePlatform.Write("stop\n");
  287.             }
  288.             catch (Exception)
  289.             {
  290.                 disconnect();
  291.             }
  292.  
  293.         }
  294.  
  295.         private void back_btn_MouseDown(object sender, MouseEventArgs e)
  296.         {
  297.             back_btn.FlatAppearance.BorderSize = 3;
  298.             back_btn.FlatAppearance.BorderColor = Color.Blue;
  299.             try
  300.             {
  301.                 mobilePlatform.Write("back\n");
  302.             }
  303.             catch (Exception)
  304.             {
  305.                 disconnect();
  306.             }
  307.         }
  308.  
  309.         private void back_btn_MouseUp(object sender, MouseEventArgs e)
  310.         {
  311.             back_btn.FlatAppearance.BorderSize = 1;
  312.             back_btn.FlatAppearance.BorderColor = Color.Black;
  313.             try
  314.             {
  315.                 mobilePlatform.Write("stop\n");
  316.             }
  317.             catch (Exception)
  318.             {
  319.                 disconnect();
  320.             }
  321.         }
  322.  
  323.         private void bwr_btn_MouseDown(object sender, MouseEventArgs e)
  324.         {
  325.             bwr_btn.FlatAppearance.BorderSize = 3;
  326.             bwr_btn.FlatAppearance.BorderColor = Color.Blue;
  327.             try
  328.             {
  329.                 mobilePlatform.Write("bwr\n");
  330.             }
  331.             catch (Exception)
  332.             {
  333.                 disconnect();
  334.             }
  335.         }
  336.  
  337.         private void bwr_btn_MouseUp(object sender, MouseEventArgs e)
  338.         {
  339.             bwr_btn.FlatAppearance.BorderSize = 1;
  340.             bwr_btn.FlatAppearance.BorderColor = Color.Black;
  341.             try
  342.             {
  343.                 mobilePlatform.Write("stop\n");
  344.             }
  345.             catch (Exception)
  346.             {
  347.                 disconnect();
  348.             }
  349.         }
  350.  
  351.         private void round_btn_MouseDown(object sender, MouseEventArgs e)
  352.         {
  353.             round_btn.FlatAppearance.BorderSize = 3;
  354.             round_btn.FlatAppearance.BorderColor = Color.Blue;
  355.             if (clockDirection)
  356.             {
  357.                 try
  358.                 {
  359.                     mobilePlatform.Write("clockwise\n");
  360.                 }
  361.                 catch (Exception)
  362.                 {
  363.                     disconnect();
  364.                 }
  365.             }
  366.             else
  367.             {
  368.                 try
  369.                 {
  370.                     mobilePlatform.Write("anticlockwise\n");
  371.                 }
  372.                 catch (Exception)
  373.                 {
  374.                     disconnect();
  375.                 }
  376.             }
  377.         }
  378.  
  379.         private void round_btn_MouseUp(object sender, MouseEventArgs e)
  380.         {
  381.             round_btn.FlatAppearance.BorderSize = 1;
  382.             round_btn.FlatAppearance.BorderColor = Color.Black;
  383.             try
  384.             {
  385.                 mobilePlatform.Write("stop\n");
  386.             }
  387.             catch (Exception)
  388.             {
  389.                 disconnect();
  390.             }
  391.         }
  392.  
  393.         private void direction_btn_Click(object sender, EventArgs e)
  394.         {
  395.             if (clockDirection)
  396.             {
  397.                 clockDirection = false;
  398.                 round_btn.Image = Properties.Resources.roundaboutanti;
  399.             }
  400.             else
  401.             {
  402.                 clockDirection = true;
  403.                 round_btn.Image = Properties.Resources.roundabout;
  404.             }
  405.         }
  406.  
  407.         private void speedSlider_MouseUp(object sender, MouseEventArgs e)
  408.         {
  409.             string value = speedSlider.Value.ToString();
  410.             speed_lbl.Text = value + " %";
  411.             try
  412.             {
  413.                 mobilePlatform.Write(value + '\n');
  414.             }
  415.             catch (Exception)
  416.             {
  417.                 disconnect();
  418.             }
  419.         }
  420.  
  421.         private void pid_btn_Click(object sender, EventArgs e)
  422.         {
  423.             try
  424.             {
  425.                 feedback_lbl.Text = $"Активирана ОВ: \r\n" +
  426.                     $" Kп={kp_num.Value.ToString("0.00")}\r\n" +
  427.                     $" Kи={ki_num.Value.ToString("0.00")}\r\n" +
  428.                     $" Kд={kd_num.Value.ToString("0.00")} ";
  429.                 isOpenLoop = false;
  430.                 string command = "P";
  431.                 command += kp_num.Value.ToString("00.00");
  432.                 command += ki_num.Value.ToString("00.00");
  433.                 command += kd_num.Value.ToString("00.00");
  434.                 command += '\n';
  435.                 mobilePlatform.Write(command);
  436.             }
  437.             catch (Exception)
  438.             {
  439.                 disconnect();
  440.             }
  441.         }
  442.  
  443.         private void reset_btn_Click(object sender, EventArgs e)
  444.         {
  445.             kp_num.Value = 1.0m;
  446.             ki_num.Value = 1.5m;
  447.             kd_num.Value = 0.05m;
  448.         }
  449.  
  450.         private void wf_btn_Click(object sender, EventArgs e)
  451.         {
  452.             try
  453.             {
  454.                 feedback_lbl.Text = "Отворена система";
  455.                 isOpenLoop = true;
  456.                 mobilePlatform.Write("open\n");
  457.             }
  458.             catch (Exception)
  459.             {
  460.                 disconnect();
  461.             }
  462.         }
  463.     }
  464. }
  465.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement