Решил воспользоваться библиотекой CyberLib. В которой D13_Low равноценно digitalWrite(13,LOW). Подскажите, как при такой записи пользоваться директивой #define. #define dir 13 dir_Low - ругается.
макрос выглядит так Код (C++): #define D13_High PORTB|=B00100000 #define D13_Low PORTB &=B11011111 но не проще ли самому освоить все эти штуки с регистрами вместо использования этой сомнительнойо библиотеки
Сразу теряется все удобство ардуино. А именно нужно пошевелить мозгами, посмотреть распиновка под конкретную атмегу. На данный момент при отладке мне достаточно скорости работы этой библиотеки. Так как я ещё не знаю какую атмегу буду использовать. Вопрос в том, как облегчить себе труд, что бы не искать по всей программе D13. То есть использовать директиву, которая этим и занимается. Но до этого я не сталкивался с выражением у которого аргумент не в скобках. Как быть в этом случае. Как при изменении вверху программы с d13 на d5, получить автоматическую замену во всех d5_low, d5_high...
То есть мне нужно написать как минимум 4 директивы? Две на открытие порта на выход/ вход и две на установку лог 0/1 ?
попробуй так Код (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);
Как это запихнуть в D13_Low/ D13_low ? Что бы все значения в программе DIR поменялись на D13. Не зависимо от того стоит оно в d13_low, d13_high, d13_kapusta.
Повторюсь, только так: Код (C++): #define Low D13_Low #define High D13_High Под это свой код и подгоняйте.
Смысла в такой замене совсем не вижу. Ведь обращаться мне нужно не к одному только пину д13. Ладно, будем искать.
а нафига вы тогда взяли CyberLib, если вам нужны обычные ардуиновские digitalWrite() и Read() ? Хотите удобства - пользуйтесь ардуиновским синтаксисом CyberLib для тех, кто хочет все вручную прописывать для лучшего контроля
немного добавлю к предыдущему ответу. D_REC, похоже что вы немного не понимаете. CyberLib - быстрая библиотека, но она именно потому быстрая, что из нее выкинуты все удобства ардуино. Код CyberLib пишется под конкретный МК и с выбором конкретных пинов. Никаких "я еще не знаю, какую атмегу использовать" - тут не прокатывает. Писать программу как в ардуино, чтобы изменением одной строчки можно было менять пин - тут тоже не получится, а если получится - код станет таким же медленным, как в обычном ардуино и смысла использовать CyberLib совсем не будет. А вообще самый лучший совет, какой дали выше - самому изучить управление пинами через прямую запись типа Код (C++): PORTB|=B00100000; - тогда и код будет быстрым, и как тут поменять пин вы сами разберетесь
А если так: Код (C++): #define dir 13 #if dir == 12 #define Low D12_Low #elif dir == 13 #define Low D13_Low #endif
Это первое, что надо сделать в начале любой разработки. Т.е. сперва разрабатывается схемотехника с оглядкой на возможности МК. А потом пишется программа.