Member 14006452 Ответов: 1

Ли генератор работать на Arduino файлы?


Я скачал это Генератор Кода Класса C++ [^] а также python, чтобы запустить его. Я думать Я ввел правильную командную строку, но получаю ошибку "недопустимый синтаксис".

ТИА

Код Arduino:
/*
    Basic timer converted to polymorphic/inherited form.
    Utilizes virtual function to effect timer reset.

    reference Arduino.cc thread http://forum.arduino.cc/index.php?topic=567010.new#new
*/

// debounce disabled for users without the library
//#include <Bounce2.h>

#define BUTTON_PIN 6   // to enable the timer DIO6
#define RESET_PIN 8    // to reset a timer DIO8
#define externalLED1 7 //  +5--/\/\/-->|--DIO7

byte LED_PIN = 13;    // on board LED

// Instantiate a Bounce object
//Bounce debouncer = Bounce();

// create a class called 'PLCtimer'

class PLCtimer {
    /*
       This is the base class - All types:
       > produce a positive-going one-scan pulse 'os' upon reaching
       preset value.
       > respond to a reset command by setting accumulated value to
       zero and resetting done and tt.
       > set the done bit upon reaching preset.
    */

  public:
    unsigned long _Accumulator = 0;
    bool _Reset: 1;
    bool _Enable: 1;
    bool _Done: 1;
    bool _OSRise: 1;
    bool _Control: 1;

  private:
    unsigned long _Preset;
    unsigned long _CurrentMillis;
    unsigned long _LastMillis = 0;
    bool _TimerRunning: 1;
    bool _OSFall: 1;
    bool _OSRSetup: 1;
    bool _OSFSetup: 1;


  public:
    // constructor - permits setting of variables upon instantiation
    // Timers are instantiated with enable false by default

    @PLCtimer::PLCtimer(unsigned long pre, boolean en = 0)
    {
      _Preset = pre;
      negativePresetWarning(pre); // preset validation
    }; // end constructor
    /*
       User-added error handler from pert @ Arduino.cc, post #13
       thread http://forum.arduino.cc/index.php?topic=559655.new#new
       Timers may not have a negative preset value.
    */
    void negativeError( void ) __attribute__((error("Negative PLCtimer preset! Check instantiations!")));
    void negativePresetWarning(unsigned long number) {
      if (number < 0) {
        negativeError();
      }
    }
    /*
      ===== Access functions for timer status/controls
    */
    // Allows to start/stop a timer
    void setEN(bool en) {
      _Enable = en;
    }
    // Allows to reset a timer
    void setres(bool res) {
      _Reset = res;
    }
    // Returns enable state of timer
    byte getEN() {
      return _Enable;
    }
    // Returns reset state of timer
    bool getres() {
      return _Reset;
    }
    // Returns done status of timer
    bool getDn() {
      return _Done;
    }
    // Returns timer timing state of timer
    bool getTt() {
      return _TimerRunning;
    }
    // Returns timer timing state of timer
    bool getIntv() {
      return _TimerRunning;
    }
    // Returns state of timer done rising one-shot
    bool getOSRise() {
      return _OSRise;
    }
    // Returns state of timer done falling one-shot
    bool getOSFall() {
      return _OSFall;
    }
  private:
    /*
       Virtual timer Reset function
       Reset conditions to be determined by descendants
    */
    virtual bool Reset();

  public:

    //    Function to operate timers created under PLCtimer
    //    ----------------------------------------
    //    Update timer accumulated value & condition
    //    flags 'tt' (timer timing) and 'dn' (done) based
    //    on timer type.
    //    Function returns boolean status of done, 'dn'
    //    ===========================

    boolean update() {
      _CurrentMillis = millis(); // Get system clock ticks
      if (_Enable or _Control) { // timer is enabled to run
        _Accumulator = _Accumulator + _CurrentMillis - _LastMillis;
        if (_Accumulator >= _Preset) { // timer done?
          _Accumulator = _Preset; // Don't let accumulator run away
          _Done = true;
        }
      }
      _LastMillis = _CurrentMillis;

      // 9/25/18 - Modified the virtual function Reset() to return
      // a boolean.  The derived classes now only return a yes/no
      // to the base class to handle resetting of done and clearing
      // of accumulator.
      // This saves 50+ bytes versus resetting in the derived classes.

      if ( Reset()) { // Find out if reset needed based on derived class' criteria.
        _Done = false;
        _Accumulator = 0;
      }
     
      /*
        ----- Generate a positive going one-shot pulse on timer done f-t transition
      */
      _OSRise = (_Done and _OSRSetup);
      _OSRSetup = !_Done;
      /*
        ----- and another positive going one-shot pulse on timer done t-f transition
      */
      _OSFall = (!_Done and _OSFSetup);
      _OSFSetup = _Done;
      /*
        ----- condition the timer timing status
      */
      if ((_Enable or _Control) and !_Done and !_Reset) {
        _TimerRunning = true;
      }
      else _TimerRunning = false;
      return _Done;
    }; // end of base class update Timer operation

} ; // end of class PLCtimer

void setup() {
}

void loop() {
 
} //end of loop


Что я уже пробовал:

Вместо снимка экрана вот командная строка, которую я использую.

>>> python make_cpp_class.py PLCtimer c:\documents\arduino\PLCtimer_python\PLCtimer_python.ino

enhzflep

Как именно вы представляете себе, что предоставление столь малой информации, которой вы располагаете по этой проблеме, поможет? Вы не показали нам свой код. Вы решили не предоставлять общий доступ к файлу, определяющему элементы данных, которые вы хотите создать и инициализировать.

Можно было бы предположить, что вам нужно будет запустить сценарий против файла данных, который определяет, как вы хотите, чтобы класс был создан. Как только это будет сделано успешно, я бы предположил, что он выплюнет файл .cpp. (что, как вы знаете, в основном и есть файл ".ino" )

Из статьи, которую вы связали, я бы предположил, что вы еще не следовали инструкциям в разделе "формат элемента данных во входном файле".


Правка: Да, посмотрите на последний комментарий на странице. Билл приводит пример ввода и командной строки - ваши, похоже, не похожи на его. ;)

Richard Deeming

Есть форум в нижней части каждой статьи[^] где вы можете задать автору вопросы о коде.

Это с большей вероятностью даст результаты, чем публикация вашего вопроса в QA и надежда, что автор наткнется на него.

Member 14006452

Спасибо. Сделано.

Member 14006452

Спасибо за технику редактирования.

1 Ответов

Рейтинг:
0

vcbeaut

Привет,я тоже хочу этому научиться.Можем ли мы общаться вместе?


Richard Deeming

Если вы хотите добавить комментарий или задать вопрос, нажмите кнопку "есть вопрос или комментарий?" кнопка под вопросом. НЕ опубликуйте свой комментарий как "решение" этого вопроса.