Управляйте двумя сервоприводами из приложения Winfroms C # с Arduino Uno - PullRequest
0 голосов
/ 03 сентября 2018

Я пытаюсь понять, как управлять двумя сервоприводами отдельно от winfroms C# настольного приложения.

В C# инициализация:

 myport.PortName = "COM6";
 myport.BaudRate = 9600;
 myport.Open();

Контролируется trackBar1:

private void trackBar1_Scroll(object sender, EventArgs e)
{
     if (myport.IsOpen)
     {
         myport.WriteLine(trackBar1.Value.ToString());
     }
}

Код Arduino перемещает сервоприводы с pin 9 и 11, один движется влево, синхронно к правой стороне:

#include <Servo.h>
Servo servo1;
Servo servo2;
int val;

void setup() {
    Serial.begin(9600);
    servo1.attach(9);
    servo2.attach(11);
}

void loop() {
  val = Serial.parseInt();
  if(val != 0){
    servo1.write(val);
    servo2.write(val);
  }
}

для управления направлением, я могу создать отдельную функцию void для servo1 и servo2 с различным значением угла, но я не могу понять, как получить отдельное управление для каждого сервопривода из приложения C#. Я не уверен, что я должен добавить в Arduino uploaded code и C#, например, если я хочу управлять servo2 с pin 11 с trackBar2 и servo1 с pin 9 с trackBar1 :

private void trackBar2_Scroll(object sender, EventArgs e)
{
    if (myport.IsOpen)
    {
        myport.WriteLine(trackBar2.Value.ToString());
    }
}

Любой совет, руководство или пример был бы очень полезен

1 Ответ

0 голосов
/ 03 сентября 2018

Один из вариантов: вместо чтения целых на вашем Arduino, дождаться символа 'A' или 'B', а затем прочитать int. Если персонаж «А», переместите сервопривод 1, если персонаж «Б», переместите сервопривод 2. В своем приложении .net напишите «A» или «B» перед отправкой значения трекбара

Примечание: не проверено

// in Arduino
void loop() {
  switch(Serial.read())
  {
    case 'A':
      servo1.write(Serial.parseInt());
      break;
    case 'B':
      servo2.write(Serial.parseInt());
      break;
  }
}


// in c#
myport.Write('B')
myport.WriteLine(trackBar2.Value.ToString());
...