0

我正在制作一个 Visual C# 可执行文件,我想使用一个 for 循环,它为下面 Arduino 代码中定义的 3 个 LED 的两种情况发送“A”和“B”:

int data;
void setup() {
  Serial.begin(9600);
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);
}

void loop() {
  if (Serial.available()){
    data=Serial.read();
    if (data=='A'){
        digitalWrite(12, HIGH);   
        digitalWrite(11, LOW);
        delay(2000);
        digitalWrite(13, HIGH);
        delay(500);
        digitalWrite(13, LOW);
        delay(500);
        digitalWrite(13, HIGH);
        delay(500);
        digitalWrite(13, LOW);
        delay(500);
    }

    else{
        digitalWrite(12, LOW);   
        digitalWrite(11, HIGH);
        delay(10000);
  }
  }
}

这是我的 Visual C# 代码,用于从文本框中获取循环次数,然后执行 AB、AB、...(n 次 - 等于文本框中的数字)。

if (textBox1.Text != "")
            {
            int LoopNum = Convert.ToInt32(textBox1.Text);
            for (int i=0; i < LoopNum; i++)
            {
                serialPort1.Write("A");
                serialPort1.Write("B");
            }
        }
 else
            {
                MessageBox.Show("Please select the number of cycle!", "My Application", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
        }

我意识到我的程序中的循环很快就完成了(发送一堆 AB 然后停止),而我的 Arduino 继续运行直到它完成。有什么方法可以延迟我的程序吗?我读到线程选项不是一种合适的方式,因为它会产生问题......有什么建议吗?

4

1 回答 1

0

如果您只是在 C# 中寻找延迟,您可以让主线程休眠:

Thread.Sleep(500);

这基本上就像 arduino 延迟功能一样工作。当然请记住,您通常不想在 arduino 中延迟内容。接收数据时,事情可能会不同步,这可能会在您的设置中产生问题。

于 2016-03-19T12:36:09.040 回答