Управление ардуино программой на ПК

Тема в разделе "Arduino & Shields", создана пользователем 1590kazak1590, 15 май 2016.

  1. 1590kazak1590

    1590kazak1590 Нерд

    Привет!
    Есть такая задача - сделать программу на визуал студио, для управления ардуино через сериал порт.
    Нашёл шаблон с кодом и комментариями(http://www.vr-online.ru/content/rabota-s-rs-232-portom-v-c-571)
    Написал для ардуино скетч.

    Код (C++):
    void setup() {
    pinMode(2,1);
    Serial.begin(9600);
    }
    void loop() {
     
    if (Serial.available() > 0)
       {
          int incomingByte = Serial.read();
          tone (2,incomingByte); // под рукой была пищалка
          Serial.print(incomingByte);
       }

    }
    Пищалка пищит через стандартный монитор порта из Arduino IDE, но с формами на С# работать не хочет.

    Есть кто поопытней, в чём может быть проблема?

    Или посоветуйте готовое решение для нубов (важно не принимать и отправлять данные, а управлять кнопочками с компьютера) =)
     

    Вложения:

  2. Alex19

    Alex19 Гуру

    Давно запускал, что-то аналогичное.

    Вероятнее в инициализации Serial porta порта, моя инициализация для VS2010 c .Net 3.5
    Код (C++):
    ArduinoSerialPort.PortName = "COM25";
    ArduinoSerialPort.BaudRate = 115200;

    ArduinoSerialPort.Parity = Parity.None;
    ArduinoSerialPort.DataBits = 8;
    ArduinoSerialPort.StopBits = StopBits.One;

    ArduinoSerialPort.Encoding = Encoding.UTF8;

    ArduinoSerialPort.NewLine = "\n";

    ArduinoSerialPort.RtsEnable = false;
    ArduinoSerialPort.DtrEnable = true;
    Готового решения не подскажу, погуглите, примеров тьма. К примеру этот - http://www.instructables.com/id/Interfacing-your-arduino-with-a-C-program/?ALLSTEPS.

    Начинал от сюда - http://playground.arduino.cc/Interfacing/Csharp. Там в низу есть ссылки на примеры, работа с Serial - http://bravomofo.blogspot.com.by/2010/03/serial-talk.html.
     
    1590kazak1590 нравится это.
  3. Megakoteyka

    Megakoteyka Оракул Модератор

    Если контроллер принимает байты, то и отправлять нужно байты.
    А если отправляете строку, то контроллер должен принимать строку и парсить ее в число.
    Если хотите просто посылать команды с компа, то делайте так:
    На ПК:
    Код (C++):

    SerialPort port = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
    port.Open();
    ...
    byte command = 5;
    port.Write(new byte[] { command }, 0, 1);
    На ардуино:
    Код (C++):

    if (Serial.available() > 0)
    {
      int incomingByte = Serial.read();
      Serial.print(incomingByte);
      switch(incomingByte)
      {
        case 1:
          // выполнение команды 1
          break;
        ...
        case 10:
          // выполнение команды 10
          break;
      }
    }
    Не забудьте подставить нужное имя порта и скорость.
     
    1590kazak1590 нравится это.