2016-03-19 9 views
0

Ich mache eine Visual C# ausführbare Datei, und ich möchte eine for-Schleife verwenden, die 'A' und 'B' für die beiden im Arduino-Code definierten Fälle unten für 3 LEDs sendet:Verzögerung in Visual C# - Arduino

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); 
    } 
    } 
} 

Und das ist meine Visual C# -Code, um die Anzahl der Schleife aus einem Textfeld und dann tun, AB, AB, ... (n-mal - gleich der Zahl in der Textbox).

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); 
     } 

erkannte ich die Schleife in meinem Programm sehr bald beendet (sendet ein Bündel von ABs und stoppt dann), während mein Arduino gehen immer wieder, bis es fertig ist. Gibt es eine Möglichkeit, dass ich meinem Programm eine Verzögerung hinzufügen kann? Ich habe gelesen, dass Thread-Option nicht geeignet ist, da es Probleme schafft ... Irgendwelche Vorschläge?

+0

Ich denke, Sie möchten eine serialport1.flush zwischen Ihrem senden und senden senden –

+0

@Someonethatmatters Danke für Ihren Kommentar. Ich habe versucht serialport1.basestream.flush(); aber es tut nichts. Meine C# -Schleife endet in Sekundenbruchteilen, während das Arduino 1 Minute später endet. – Kamran

Antwort

0

Wenn Sie nur für eine Verzögerung in C# suchen Sie den Haupt-Thread Schlaf machen könnte:

Thread.Sleep(500); 

, die im Wesentlichen wie die Arduino-Delay-Funktion arbeitet. Erinnere dich natürlich daran, dass du oft Dinge im Arduino nicht verzögern willst. Beim Empfang von Daten können Dinge nicht mehr synchron sein, was zu Problemen bei der Einrichtung führen kann.