Как использовать контакты d0 и d1 arduino uno (другие) в качестве цифрового выхода, когда я не хочу использовать Serial
Я искал эту тему почти везде и получил разные результаты, которые не могли меня удовлетворить
Мой новый проект - светодиодный куб 4x4
Из которых
Будет содержать 4 ряда и каждый ряд будет содержать 16 светодиодов
Итак, мне нужно использовать все цифровые контакты 0-15 в качестве цифрового выхода.
И другие контакты 16-20 для заземления.
Но проблема в том, что этот проект требует подключения выводов d0 и d1 в качестве цифрового выходного вывода. (Не последовательная связь)
В некоторых местах я видел, что эксперты говорят
- Если вы хотите использовать последовательную связь, то вы не можете их использовать.
- Вы не можете использовать его, пока ваш arduino подключен к ПК.
- Вы не можете этого сделать ,так как это может нанести вред устройству
- Сначала вы должны отключить последовательное соединение.
Хорошо, прочитав это, я запутался, мне не нужно использовать какое-либо последовательное соединение (консоль и другие) в этом проекте LED cube, поэтому я попытался отключить последовательное соединение, не написав код ниже.
Serial.begin(9600);
Итак, освободит ли это эти контакты d0 и d1 как цифровые для меня ? Или USB - соединение также рассматривается как последовательное соединение?
Итак, как же я могу это сделать? И действительно ли это повредит моей плате?
2 ответа
Лучший ответ:
Если вы не используете последовательный порт, контакты 0 и 1 являются обычными контактами ввода-вывода. Все очень просто.
Если вы хотите использовать последовательную связь, то вы не можете их использовать.
Правильно.
Вы не можете использовать его, пока ваш arduino подключен к ПК.
Неправильно. Вы можете использовать USB-кабель в качестве источника питания. Однако вы не сможете использовать его для общения.
Вы не можете этого сделать, так как это может нанести вред устройству
Что такое “это”? Устройство может пострадать, если вы подадите слишком большой ток на вывод ввода-вывода/от него, независимо от того, является ли это выводом, который можно использовать для последовательной связи.
Сначала вы должны отключить последовательное соединение.
Только если вы включили его раньше. Если вы никогда не включаете Serial
, вам
больше ничего не нужно делать.
Загрузчик всегда включает UART0 при загрузке кода в ваш Arudino Nano. Таким образом, в конце концов контакты D0 и D1 используются для их альтернативных функций в качестве приемника и передатчика UART без вашего участия в вашем коде.
Скопируйте следующий код в любую вашу программу sketch или C, чтобы отключить модуль UART0, прежде чем вы инициализируете контакты d0 и d1 как цифровой ввод-вывод, затем вы можете установить два контакта как цифровой ввод-вывод, как обычно, и они будут работать отлично.
UCSR0B &= ~(1<<3);
UCSR0B &= ~(1<<4);
Arduino init() делает это https://github.com/arduino/ArduinoCore-avr/blob/24e6edd475c287cdafee0a4db2eb98927ce3cf58/cores/arduino/wiring.c#L383, @Juraj
Спасибо за информацию. Я рекомендую использовать доступ к регистру, чтобы быть более общим для тех, кто, как и я, разрабатывает код на Eclipse с использованием C и загружает его в ATmega328P на Arduino Nano. Я не использую Arduino IDE., @Mohamed Atef
затем поместите этот отказ от ответственности в ответ, чтобы люди не начинали помещать эти две строки в скетчи Arduino, @Juraj
К вашему сведению, я попытался поместить две строки кодов в скетч arduino, и это сработало. Спасибо за вашу заботу., @Mohamed Atef
конечно, это работает, но это излишне, @Juraj
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
- Как подключиться к Arduino с помощью WiFi?
- avrdude ser_open() can't set com-state
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату
Светодиод потребляет примерно 3 вольта и 30 мА (максимальная скорость), а выходные контакты arduino-5 вольт и 40 мА , так что это не должно повредить моей плате, так что, если не писать код " Serial.begin(9600);", код решит мою проблему, верно?, @Subha Jeet Sikdar
@SubhaJeetSikdar: 40 мА-это “абсолютный максимальный рейтинг”. При нормальных условиях работы источник питания не должен превышать 20 мА с одного контакта. Обратите внимание, что существуют также ограничения на _sum_ токов, питаемых одним портом. См.Таблицу данных., @Edgar Bonet