Iskra Neo неправильно работает с PC

Тема в разделе "Arduino & Shields", создана пользователем al895, 12 ноя 2017.

Метки:
  1. al895

    al895 Нуб

    С Искры не приходят данные через COM на PC в программу на C#. C Uno работает нормально.
    Помогите, может кто сталкивался?

    Имеются Arduino Uno и Iskra Neo.
    На Arduino Uno отладил скетч - с Serial принимается команда, что то делается (что то включается/выключается или считывается показание датчика) и в Serial посылается подтверждение или показание датчика.
    С монитором (из adruino IDE) скетч работает и на Arduino Uno и с Iskra Neo (подключал как Leonardo).
    Написал программу на C#, которая работает с COM портом (использовал SerialPort из System.IO.Ports). Подключение к PC по USB.
    С Arduino Uno программа работает точно также, как с монитора.
    С Iskra Neo команды в COM порт уходят и выполняются, но ничего не приходит с платы. При посылке команды моргает TX, а затем еще два раза почему то TX моргает, хотя ничего не передается, а RX молчит.
    С монитора на обеих платах при посылке команды TX моргает, затем моргает RX - все как задумано. Ну и с Arduino Uno все работает нормально с PC.

    Вот код скетча:
    Код (C++):

    #define LED_PIN 13
    #define SPEED_1 5
    #define DIR_1 4
    String message;
    int temp;

    void setup() {
      Serial.begin(9600);
      pinMode(LED_PIN, OUTPUT);
      pinMode(SPEED_1, OUTPUT);
      pinMode(DIR_1, OUTPUT);
    }
    void loop(){
      if (Serial.available())
      {
      while (Serial.available())
      {
      char incomingChar = Serial.read();
      if (incomingChar != '\n')
      message += incomingChar;
      else
      {
      if (message == "shut_on")
      {
      shutOn();
      }
      else if (message == "shut_off")
      {
      shutOff();
      }
      else if (message == "who")
      {
      Serial.println("My_Control");

      }
      else if (message == "get_a0")
      {
      temp = analogRead(A0);
      Serial.println(temp);
      }

      }
      }
      message = "";
      }
      delay(200);
    }
    void shutOn()
    {
      Serial.println("ON");
      digitalWrite(DIR_1, LOW);
      analogWrite(SPEED_1, 255);
      delay (1000);
      analogWrite(SPEED_1, 0);

    }
    void shutOff()
    {
      Serial.println("OFF");
      digitalWrite(DIR_1, HIGH);
      analogWrite(SPEED_1, 255);
      delay(1000);
      analogWrite(SPEED_1, 0);

    }
     
    А вот кусок кода на C#:
    Код (C++):

    private void button3_Click(object sender, EventArgs e)
      {
      label1.Text = "";
      currentPort.Open();
      Thread.Sleep(500);
      if (currentPort.IsOpen)
      {
      currentPort.WriteLine("shut_off");
      label1.Text = ReadFromPort();
      }
      }
      private string ReadFromPort()
      {
      Thread.Sleep(500);
      var ret = "нет ответа";
      if (currentPort.BytesToRead > 0)
      {
      ret = currentPort.ReadLine();
      }
      currentPort.Close();
      return ret;
      }
     
     
    Повторы, более длительные задержки - не помогает. В currentPort.BytesToRead всегда ноль.
    Но проблема, похоже в Iskra Neo - RX то не загорается. За то в момент, когда по идее идет передача (Serial.println) TX моргает два раза.
     
    Последнее редактирование: 13 ноя 2017
  2. akl

    akl Гуру

    возможно надо везде вместо Serial. писать Serial1. (у леонардо с этим какие-то заморочки)
     
  3. al895

    al895 Нуб

    Serial1 вообще не видит ничего.
     
  4. ostrov

    ostrov Гуру