Снова библиотеки...

Тема в разделе "Arduino & Shields", создана пользователем M0ln1a, 11 июн 2015.

  1. M0ln1a

    M0ln1a Гик

    А как быть с pinMode? Его надо чем-либо заменять?
     
  2. Unixon

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

    В C++ вы не можете просто так превратить идентификатор в строку и передать ее как параметр. С помощью препроцессора это в принципе делается, но не так красиво.

    Кроме того, какой в этом смысл? Вы что, будете на ходу переименовывать пины? Зачем?
     
  3. M0ln1a

    M0ln1a Гик

    А с чего Вы взяли, что я их буду менять? В другов случае "светиков" может быть и 2, и 3, и больше!
     
  4. DrProg

    DrProg Вечный нерд

    Захватывающее чтиво! И все же, что хочет автор от своей перспективной функции я так и не понял.
     
  5. Unixon

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

    Короче, как вы хотите сделать, это все переворачивает с ног на голову. Так не нужно делать.
    Код (Text):

    class LED
    {
      private:
       byte m_Pin;
      public:
       byte pin() const { return m_Pin; }
      public:
       LED(const byte pin);
       ~LED() {}
    };

    LED::LED(const byte pin)
    {
      m_Pin = pin;
    }

    LED flash(13), boom(10), bang(7);

    void foo(const LED& led, byte state)
    {
      digitalWrite(led.pin(), state);
    }

    void bar(void)
    {
      foo(flash,1);
      foo(boom,0);
      foo(bang,1);
    }
     
     
    Последнее редактирование: 11 июн 2015
  6. M0ln1a

    M0ln1a Гик

    Не понимаю... Зачем нужны byte, что такое ~LED() {}, Какие действия выполняют bar, foo, boom, bang?
    Сделайте пожалуйста пример на мигание или чем нибудь другом.
     
  7. Unixon

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

    byte - тип переменной, параметра функции.
    flash, boom, bang - объекты класса LED
    foo, bar - функции для примера
    LED::LED() - конструктор LED
    LED:: ~LED() - деструктор LED
     
  8. Unixon

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

    Код (Text):

    class LED
    {
      private:
       byte m_Pin;
      public:
       byte pin() const { return m_Pin; }
       void in();
       void out();
       void on();
       void off();
       void blink(const int ontime, const int offtime, const int count);
       void blink(const int pulsetime, const int count);
      public:
       explicit LED(const byte pin);
       ~LED();
    };

    LED::LED(const byte pin)
    {
      m_Pin = pin;
      out();
      off();
    }

    LED::~LED()
    {
      in();
      off();
    }

    void LED::in()
    {
      pinMode(m_Pin, INPUT);
    }

    void LED::out()
    {
      pinMode(m_Pin, OUTPUT);
    }

    void LED::on()
    {
      digitalWrite(m_Pin, HIGH);
    }

    void LED::off()
    {
      digitalWrite(m_Pin, LOW);
    }

    void LED::blink(const int ontime, const int offtime, const int count)
    {
      for (int i = 0; i < count; i++)
      {
       on(); delay(ontime);
       off(); delay(offtime);
      }
    }

    void LED::blink(const int pulsetime, const int count)
    {
      blink(pulsetime, pulsetime, count);
    }

    LED flash(13), boom(10), bang(7);

    void test(void)
    {
    flash.blink(200,50,10);
    boom.blink(100,1,1);
    bang.blink(3000,100,1);
    }
     
    Последнее редактирование: 11 июн 2015
  9. DrProg

    DrProg Вечный нерд

    Я вот не пойму, зачем классы нужны в данном случае? Чтобы устать? Функция вроде бы требуется простейшая - помигать лампочкой с заданной частотой заданное время, нет?
     
  10. Unixon

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

    Это же просто пример подхода к использованию элементов языка.
     
  11. DrProg

    DrProg Вечный нерд

    Это пример того как заморочить человека замороченного и на более простых элементах. )))
     
  12. Unixon

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

    Посмотрите на код ТС на первой странице, там то же самое, только неправильно.
     
  13. DrProg

    DrProg Вечный нерд

    Как вы там глаза не сломали, я его пропустил.

    Вообще, может я не прав, но я противник умножать без нужды сущее. Если можно сделать проще, то надо сделать проще. Здесь можно было и на два порядка.
     
  14. M0ln1a

    M0ln1a Гик

    Ошибки на Вашу библиотеку:


    C:\Users\Егор Ельцов\Documents\Arduino\libraries\GeneralF\GeneralF.cpp: In member function 'void LED::blink(int, int, int)':
    C:\Users\Егор Ельцов\Documents\Arduino\libraries\GeneralF\GeneralF.cpp:41:29: error: expected ';' before 'i'
    for (int i = 0; i < count i++)


    C:\Users\Егор Ельцов\Documents\Arduino\libraries\GeneralF\GeneralF.cpp: At global scope:
    C:\Users\Егор Ельцов\Documents\Arduino\libraries\GeneralF\GeneralF.cpp:48:11: error: expected unqualified-id before 'void'
    void LED::void blink(const int pulsetime, const int count)
     
  15. Unixon

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

    Просто опечатка, должно быть for (int i = 0; i < count; i++)

    Аналогично. void LED::blink(const int pulsetime, const int count)
     
  16. Unixon

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

    Что то мне подсказывает, что вы не понимаете смысла написанного, раз для вас элементарная опечатка представляет проблему...
     
  17. M0ln1a

    M0ln1a Гик

    Ну насчёт блинк я понимаю, но первая логическая строка - нет... Я её даже никогда не использовал!
     
  18. Unixon

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

    Вы сообщения компилятора понимаете? :)
     
  19. M0ln1a

    M0ln1a Гик

    НЕТ! :)
     
  20. M0ln1a

    M0ln1a Гик

    Разобрался)