我正在编写一个串行接口来与控制器进行通信,控制器控制我的机器人的短链接。我担心它会在移动时撞墙,所以我想创建一个紧急停止按钮,这样当我按下它时,机器人将立即停止移动,只有当我发送释放命令“!MG”时才能继续工作。
现在我有两个短按钮和长链接按钮,即。 CW和CCW。我希望停止按钮可以阻止两个链接同时移动。如何通过使用backgroundWorker来实现这一点?我不知道如何在DoWork中安排代码,因为只有点击CW或CCW按钮才能移动长链接和短链接,这使得在DoWork中很难监视它/ p>
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e){}
这是我的shortLinkCW按钮示例,我使用了另一种方法 ShortLinkCW(字符串角度) 覆盖所有命令应该在CW按钮中完成,
private void ShortLinkCW(string Angle)
{
backgroundWorker1.WorkerReportsProgress = true;
backgroundWorker1.RunWorkerAsync();
DateTime dt = DateTime.Now;
String dtn = dt.ToShortTimeString();
String angle_string = Angle;
double angle = Convert.ToDouble(angle_string);
int encoder = 0;
String encoder_string = encoder.ToString();
String data = "!PR 1 " + encoder_string + '\r';
while (angle > 60)
{
encoder = Convert.ToInt32(60 * 22.76);
encoder_string = encoder.ToString();
data = "!PR 1 " + encoder_string + '\r';
shortPort.Write(data);
angle = angle - 60;
Thread.Sleep(2000);
}
encoder = Convert.ToInt32(angle * 22.76);
encoder_string = encoder.ToString();
data = "!PR 1 " + encoder_string + '\r';
shortPort.Write(data);
txtReceive.AppendText("[" + dtn + "] " + "Sent: " + data + "\n");
Thread.Sleep(2000);
getEncoderValueAndCoordinates();
}
对于CW按钮,我只是调用此方法。
private void ShortLinkClockwise_Click(object sender, EventArgs e)
{
if (shortPort == null)
txtReceive.AppendText("ShortPort isn't open yet!" + "\n");
else
esSCW(ShortLinkAngle.Text, "shortCW");
}
有什么建议让我监控Do_work中链接的移动并随时阻止它们(see image here)?
我突然想到的一件事是,如果我能以某种方式注意到在Do_work中点击CW或CWW按钮,然后我可以像ShortLinkCW(字符串角度)一样调用该函数,然后在必要时停止它。有可能吗?