Подскажите по библиотеке

Тема в разделе "Arduino & Shields", создана пользователем D_REC, 30 янв 2022.

  1. D_REC

    D_REC Нерд

    Решил воспользоваться библиотекой CyberLib. В которой D13_Low равноценно digitalWrite(13,LOW).

    Подскажите, как при такой записи пользоваться директивой #define.

    #define dir 13
    dir_Low - ругается.
     
  2. KindMan

    KindMan Гуру

    А как по вашему выглядит это запись после преобразования?
     
  3. User248

    User248 Гик

    Макрос в этой библиотеке выглядит, видимо, так:
    Код (C++):

    #define D13_Low digitalWrite(13, LOW)
     
     
  4. akl

    akl Гуру

    макрос выглядит так
    Код (C++):
    #define D13_High PORTB|=B00100000
    #define D13_Low PORTB &=B11011111
    но не проще ли самому освоить все эти штуки с регистрами вместо использования этой сомнительнойо библиотеки
     
    parovoZZ нравится это.
  5. parovoZZ

    parovoZZ Гуру

    Конечно, ругается. Переменная dir_Low нигде не описана.
     
  6. User248

    User248 Гик

    Проще, если у вас опыт лет 5+.
     
  7. User248

    User248 Гик

    Вообще, не понятно, что хочет сделать автор темы.
     
  8. D_REC

    D_REC Нерд

    Сразу теряется все удобство ардуино. А именно нужно пошевелить мозгами, посмотреть распиновка под конкретную атмегу.
    На данный момент при отладке мне достаточно скорости работы этой библиотеки. Так как я ещё не знаю какую атмегу буду использовать.

    Вопрос в том, как облегчить себе труд, что бы не искать по всей программе D13. То есть использовать директиву, которая этим и занимается. Но до этого я не сталкивался с выражением у которого аргумент не в скобках. Как быть в этом случае. Как при изменении вверху программы с d13 на d5, получить автоматическую замену во всех d5_low, d5_high...
     
  9. User248

    User248 Гик

    Теперь понятно. Тогда так:
    Код (C++):
    #define dir_Low D13_Low
     
  10. D_REC

    D_REC Нерд

    То есть мне нужно написать как минимум 4 директивы?
    Две на открытие порта на выход/ вход и две на установку лог 0/1 ?
     
  11. akl

    akl Гуру

    попробуй так
    Код (C++):
    #define High(x) D##x##_High
    #define Low(x) D##x##_Low
    применять так
    Код (C++):
    High(13);
    Low(13);
    ну и вместо 13 соответственно можно че угодно
    Код (C++):
    #define dir 13
    High(dir);
     
     
    Последнее редактирование: 30 янв 2022
  12. akl

    akl Гуру

    а нет так #define dir 13 уже не работает. короче муть эти макросы лучше подругому делать
     
  13. D_REC

    D_REC Нерд

    Как это запихнуть в D13_Low/ D13_low ?

    Что бы все значения в программе DIR поменялись на D13. Не зависимо от того стоит оно в d13_low, d13_high, d13_kapusta.
     
  14. User248

    User248 Гик

    Повторюсь, только так:
    Код (C++):
    #define Low D13_Low
    #define High D13_High
    Под это свой код и подгоняйте.
     
  15. D_REC

    D_REC Нерд

    Смысла в такой замене совсем не вижу. Ведь обращаться мне нужно не к одному только пину д13.

    Ладно, будем искать.
     
  16. b707

    b707 Гуру

    а нафига вы тогда взяли CyberLib, если вам нужны обычные ардуиновские digitalWrite() и Read() ?
    Хотите удобства - пользуйтесь ардуиновским синтаксисом

    CyberLib для тех, кто хочет все вручную прописывать для лучшего контроля
     
  17. b707

    b707 Гуру

    немного добавлю к предыдущему ответу.

    D_REC, похоже что вы немного не понимаете. CyberLib - быстрая библиотека, но она именно потому быстрая, что из нее выкинуты все удобства ардуино. Код CyberLib пишется под конкретный МК и с выбором конкретных пинов. Никаких "я еще не знаю, какую атмегу использовать" - тут не прокатывает. Писать программу как в ардуино, чтобы изменением одной строчки можно было менять пин - тут тоже не получится, а если получится - код станет таким же медленным, как в обычном ардуино и смысла использовать CyberLib совсем не будет.

    А вообще самый лучший совет, какой дали выше - самому изучить управление пинами через прямую запись типа
    Код (C++):
    PORTB|=B00100000;
    - тогда и код будет быстрым, и как тут поменять пин вы сами разберетесь
     
  18. User248

    User248 Гик

    А если так:
    Код (C++):

    #define dir 13

    #if dir == 12
    #define Low D12_Low
    #elif dir == 13
    #define Low D13_Low
    #endif
     
     
  19. parovoZZ

    parovoZZ Гуру

    Это первое, что надо сделать в начале любой разработки. Т.е. сперва разрабатывается схемотехника с оглядкой на возможности МК. А потом пишется программа.
     
  20. parovoZZ

    parovoZZ Гуру

    Пишешь макросы вкл/выкл пин и оно становится удобным и быстрым.