Ногодрыгалка цифровая.

Тема в разделе "Глядите, что я сделал", создана пользователем Ariadna-on-Line, 6 май 2019.

  1. Работа цифрового устройства заключается в "дрыганье ногами" и/или в какой-либо реакции на "дрыганье ног". Поэтому удобность "подрыгать ногами" - главная и непременная необходимость в электронике. Во времена исчезнувших параллельных портов это особенно актуально. В этом проекте - Ардуино по USB принимает данные из графического приложения на компьютере, и повторяет логические уровни на своих выводах (кроме выводов 0, 1, так как они задействованы для работы USB канала). Приложение написано на Visual Basic 6. Всех электронщиков - с наступающим Днем Радио !!! 73! 88!
    Код (C++):
    /*
    **************************************************
    * Программа расщирителя(размножителя) портов ПК. *
    *            Ardino_PC_Ports_Expander            *
    **************************************************
    */

      String inputString = "";         // строка для сохранения входящих данных
      String PinNum = "";              // номер пина в текстовом виде
      String Command ="";
      bool stringComplete = false;     // когда строка завершена
      int I, L;
    //=========================================================================
    void setup() {   // put your setup code here, to run once

      inputString.reserve(200);       // зарезервировать строку 200 байт

      for (I = 2; I < 20; I++)  {     // Конфигурирование всех пинов Ардуины
        pinMode(I, OUTPUT);           // на вывод данных.
        digitalWrite(I, LOW);         // Установить 0 на всех пинах.
      }
      Serial.begin(9600);
    }
    //=========================================================================
    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);           // Выделяем номер пина текстовый
         I = PinNum.toInt();                           // Номер пина в виде переменной

      if (Command == "On ")  {     // Если на позиции стоит "On "
         digitalWrite(I, HIGH);
      }
      if (Command == "Off")  {     // Если на позиции стоит "Off"
         digitalWrite(I, LOW);
      }
        // Serial.print(Command);    // Печатать входящую строку (не обязательно)
        // Serial.println(I);                // использовалось для отладки

        inputString = "";         // очистить строку
        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.

      Событие SerialEvent происходит всякий раз, когда новые данные поступают в аппаратный последовательный RX.
      Эта процедура запускается между каждым запуском цикла loop (), поэтому использование задержки внутри цикла
      может задерживать ответ. Может быть доступно несколько байтов данных.
    */

    void serialEvent() {

      while (Serial.available()) {
         char inChar = (char)Serial.read();      // получить новый байт
         inputString += inChar;                  // дописать к входящей строке
      if (inChar == '\n') {                      // если пришел символ перехода на новую строку,
         stringComplete = true;                  // ставим флаг циклу - делать что-либо
        }
      }
    }
    //=========================================================================
     

    Вложения:

    Последнее редактирование: 6 май 2019
    Tomasina нравится это.
  2. parovoZZ

    parovoZZ Гуру

    А почему в комментариях мешанина из ангельского и русскаго?
     
  3. Я где-то писАл, что прошляпил вопросы информационного обмена. Посчитал когда-то не интересным для электронщика-схемотехника. Поэтому приходится пользоваться справочниками и примерами из них. Исправляюсь - перевожу на русиш.
    ... Перевёл.
    ПС. Программа совершенно не отслеживает "нештатных ситуаций" за ненадобностью этого в хобби-делах. В планах - добавить исполнение "ногодрыгательных" последовательностей.
     

    Вложения:

    Последнее редактирование: 6 май 2019
  4. Vovka

    Vovka Гик

    Ага, вот как выглядит исходник для Бэйсика! :D
     
  5. "Пользовательский" код в среде Обьектно-Ориентированного Программирования (ООП).
     
  6. Belkin

    Belkin Гик

    А это точно VB6, не а "VC+" какой-нибудь ? ;)
    Что-то мой VB6 ругается... ;)
     
  7. Точно - VB6. Это не самодостаточный скетч Ардуины. Это - пользовательский код без графического "каркаса". Выложить проект, или архив здешние правила не позволяют. Назовите куда - выложу..
     
    Последнее редактирование: 7 май 2019
  8. KindMan

    KindMan Гик

    Это где написано?
     
  9. Не буду спорить. Щас попробую... Пардон - Зипы позволяет. Выкладываю.
     

    Вложения:

    Belkin нравится это.
  10. Добавил генерацию меандра на любой (одиночной) ноге посылками команд в Ардуину по USB. Период - 2 секунды.
     

    Вложения: