2016-03-19 25 views
0

Visual C# yürütülebilir dosyası yapıyorum ve 3 LED için Arduino kodunda tanımlanan iki durum için' A 've' B 'gönderen bir for döngüsü kullanmak istiyorum:Visual C# 'de Gecikme - 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); 
    } 
    } 
} 

Ve bu, benim bir metin kutusundan döngü sayısını almak ve sonra AB, AB, ... yapmak için Visual C# kodumdur (n times - metin kutusundaki numaraya eşittir).

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

ben tamamlanana kadar benim Arduino devam ediyor ise benim programda döngü çok yakında bitirir (ABs bir demet gönderir ve daha sonra durur) gerçekleşmiştir. Programıma gecikme ekleyebileceğim bir yol var mı? Ben iş parçacığı seçeneği, problem yarattığı için uygun bir yol olmadığını okudum ... Herhangi bir öneri?

+0

Sanırım bir gönderiyi bir seriport1.flush içine koymak istiyorsun ve göndermek a göndermek b –

+0

@Someonethatmatters Yorumunuz için teşekkürler. Serialport1.basestream.flush() öğesini denedim; ama hiçbir şey yapmıyor. Arduino 1 dakika sonra bitirirken C# döngüsüm ikinci sırada tamamlandı. – Kamran

cevap

0

sadece C# gecikme arıyorsanız ana iş parçacığı uyku yapabilir: esasen arduino gecikme fonksiyonu gibi çalışır

Thread.Sleep(500); 

. Elbette bunu hatırlıyorum, arduinodaki maddeleri geciktirmek istemezsin. Veri alırken, kurulumunuzda sorun yaratabilecek şeyler senkronizasyondan çıkabilir.