Перестали выводиться данные в com порт

Тема в разделе "Arduino & Shields", создана пользователем _Scotty_the_Engineer_, 9 фев 2021.

Метки:
  1. Всем привет :)
    Итак, имеется мега, к которой подключены различные датчики. При отправке в порт единички нам должны выдаваться данные, собранные с этих самых датчиков. Т.е. мы отправляем в порт единичку - а нам выводятся всякие значения с датчиков. Проблема в следующем - первые примерно 10 раз все работает прекрасно и данные выводятся. А вот после десятого ввода единички ничего уже не выводится, т.е. порт просто молчит, сколько бы единичек я не вводил.
    Из-за чего такое может быть?
     
  2. parovoZZ

    parovoZZ Гуру

    из-за кривого кода.
     
  3. Mestniy

    Mestniy Гуру

    Можно ваш код посмотреть?=)
     
  4. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Посмотрите отсюда. Работало. Вы не упомянули какой прогой из ПК данные гоните в Ардуино. Я когда прогу писал (Визуал Бейсик) для ПК, данные которой должен получать этот скетч - именно в ПК-шном коде появлялся затык после нескольких передач. И на Ардуину ничего не отправлялось. Пришлось повозиться. С год назад выкладывал на сайте тот код.

    Код (C++):
    *
    **************************************************
    * Программа расширителя (размножителя) портов ПК. *
    *                                                *
    **************************************************
    */
      String inputString = "";         // a String to hold incoming data
      String PinNum = "";              // a String number of Pin
      String Command ="";              // a String name of command
      String PinVol ="";               // a String volume of command
      bool stringComplete = false;     // whether the string is complete
      int I, L;
    //=========================================================================
    void setup() {   // put your setup code here, to run once

      inputString.reserve(200);       // reserve 200 bytes for the inputString

      for (I = 2; I < 20; I++)  {     // конфигурирование выводов Ардуины
        pinMode(I, OUTPUT);
        digitalWrite(I, LOW);
      }
      Serial.begin(9600, SERIAL_8N1);
    }
    //=========================================================================
    void loop() {   // put your main code here, to run repeatedly:

      if (stringComplete)  {                           // Если строка получена полностью
      if (inputString.substring(0, 6) == "A-o-L ")  {  // Если строка начинается с "A-o-L "

         Command = inputString.substring(6, 9);        // Выделяем команду
         PinNum =  inputString.substring(9, 12);           // Выделяем номер пина текстовый

         I = PinNum.toInt();                           // Номер пина в виде переменной
     
      if (Command == "On ")  {     // Если на позиции стоит "On "
         digitalWrite(I, HIGH);
      }
      if (Command == "Off")  {     // Если на позиции стоит "Off"
         digitalWrite(I, LOW);
      }
      if (Command == "PWM")  {     // Если на позиции стоит "PWM"
         PinVol = inputString.substring(16);
         L= PinVol.toInt();
         analogWrite(I, L);
      }

        Serial.print(Command);    // print the string when a newline arrives:
        Serial.println(I);

        inputString = "";         // clear the string:
        stringComplete = false;
       }
      }
    }                             // Бесконечный цикл
    //=========================================================================
    /*
      SerialEvent occurs whenever a new data comes in the hardware serial RX. This
      routine is run between each time loop() runs, so using delay inside loop can
      delay response. Multiple bytes of data may be available.
    */

    void serialEvent() {

      while (Serial.available()) {
         char inChar = (char)Serial.read();      // get the new byte
         inputString += inChar;                  // add it to the inputString
      if (inChar == '\n') {                      // if the incoming character is a newline, set a
         stringComplete = true;                  // flag so the main loop can do something about it:
        }
      }
    }
    //=========================================================================
     
     
    Последнее редактирование: 10 фев 2021
  5. parovoZZ

    parovoZZ Гуру

    Никогда не понимал смешения ангельских комментариев с русскими. Что за небрежность?
     
  6. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Такая небрежность. Я уже чаще думаю на английском, чем на русском. Ну чтож тут поделаешь. В коде куски из справочной литературы, а в переводчики я не нанимался. Кому надо - переведет и английский под-учит.
     
    Последнее редактирование: 10 фев 2021