Управление Arduino через WinForms - PullRequest
0 голосов
/ 12 июня 2019

Поэтому я пытаюсь управлять Arduino через последовательный порт, используя приложение WinForms, которое я сделал в Visaul C #. Приложение, форма имеет последовательный порт, кнопку включения и выключения. Когда я нажимаю кнопку ON, форма отправляет строку «ON» через последовательный порт на COM3, к которому подключено мое arduino, и отправляет «OFF», когда я нажимаю кнопку выключения. На стороне Arduino последовательные данные обрабатываются в функции serialEvent(), которая включает и выключает светодиод на плате.

По какой-то причине работает только первая команда «ВКЛ», и после этого светодиод остается включенным независимо от того, сколько раз я нажимал кнопку выключения.

Arduino Side:

int ledPin = 13;

String serialData;

void setup()
{
  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, LOW);
  Serial.begin(9600);
  Serial.setTimeout(10);
}

void loop()
{

}
void serialEvent()
{
  serialData = Serial.readString();

  if(serialData = "ON")
  {
    digitalWrite(ledPin, HIGH);
  }
  else if (serialData = "OFF")
  {
    digitalWrite(ledPin, LOW);
  }

}

Форма сторона:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Swear_Detection
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            port.Open();
        }

        private void Button1_Click(object sender, EventArgs e)
        {
            port.Write("ON");
        }

        private void Button2_Click(object sender, EventArgs e)
        {
            port.Write("OFF");
        }
    }
}

P.S. Не беспокойтесь о названии Swear_Detection XD. Просто то, над чем я работаю.

1 Ответ

0 голосов
/ 13 июня 2019

Ну, я выбрал другой подход, полностью удалил функцию serialEvent() и поместил все в loop(). Вот как выглядит сторона arduino:

int ledPin = 13;

void setup()
{
  Serial.begin(9600);
  pinMode(ledPin,OUTPUT);
}

void loop()
{
  char input = Serial.read();

  switch(input)
  {
    case '0':
    digitalWrite(ledPin, LOW);
    break;
    case '1':
    digitalWrite(ledPin, HIGH);
    break;
  }
}

Соответственно, я также изменил код C # и заменил «ON» и «OFF» на «1» и «0».

Однако это решило проблему только для данных типа if then. Предположим, что я хочу передать информацию, такую ​​как координаты мыши, в форме, а затем обработать эти данные для перемещения робота, тогда этот подход нежизнеспособен. Поэтому я все еще оставляю эту тему открытой для более полного ответа. Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...