- Требуемый материал:
- Принципиальная электрическая схема:
- Объяснение программирования:
- Настройка оборудования для последовательности мигания светодиода:
- Загрузка и работа:
Это второй учебник из серии учебных пособий, в которых мы изучаем LaunchPad MSP430G2 от Texas Instruments с использованием Energia IDE. В последнем туториале по Blinky LED мы познакомились с Советом по разработке LaunchPad и Energia IDE, мы также загрузили нашу первую программу, которая должна мигать встроенным светодиодом через равные промежутки времени.
В этом руководстве мы узнаем, как использовать параметры цифрового чтения и цифровой записи, чтобы считывать состояние устройства ввода, такого как переключатель, и управлять несколькими выходами, такими как светодиоды. В конце этого руководства вы научитесь работать с цифровыми входами и выходами, которые можно использовать для сопряжения многих цифровых датчиков, таких как ИК-датчик, ИК-датчик и т. Д., А также для включения или выключения выходов, таких как светодиод, зуммер и т. Д. Звучит интересно правильно!!? Давайте начнем.
Требуемый материал:
- Панель запуска MSP430G2
- LED любого цвета - 8
- Переключатель - 2
- Резистор 1к - 8
- Соединительные провода
Принципиальная электрическая схема:
В нашем предыдущем руководстве мы заметили, что на самой стартовой панели есть два светодиода и переключатель на плате. Но в этом уроке нам понадобится нечто большее, так как мы планируем последовательно загорать восемь светодиодных индикаторов при нажатии кнопки. Мы также изменим последовательность нажатия другой кнопки, чтобы было интересно. Итак, нам нужно построить схему с 8 светодиодными лампами и двумя переключателями, полную схему можно найти ниже.
Здесь 8 светодиодов - это выходы, а два переключателя - входы. Мы можем подключить их к любому контакту ввода / вывода на плате, но я подключил LRD от контакта P1.0 к P2.1 и переключатели 1 и 2 к контактам P2.4 и P2.3 соответственно, как показано выше.
Все катодные выводы светодиода связаны с землей, а анодный вывод подключается к выводам ввода / вывода через резистор. Этот резистор называется токоограничивающим резистором, этот резистор не является обязательным для MSP430, потому что максимальный ток, который может выдавать его вывод ввода / вывода, составляет всего 6 мА, а напряжение на выводе составляет всего 3,6 В. Однако их рекомендуется использовать. Когда любой из этих цифровых выводов становится высоким, загорается соответствующий светодиод. Если вы можете вспомнить последние учебные пособия по светодиодной программе, тогда вы помните, что digitalWrite (LED_pin_name, HIGH) заставит светодиод светиться, а digitalWrite (LED_pin_name, LOW) выключит светодиод.
Переключатели являются устройством ввода, один конец переключателя подключен к клемме заземления, а другой - к цифровым контактам P2.3 и P2.4. Это означает, что всякий раз, когда мы нажимаем на переключатель, вывод ввода / вывода (2.3 или 2.4) будет заземлен и останется свободным, если кнопка не будет нажата. Давайте посмотрим, как мы можем использовать это расположение при программировании.
Объяснение программирования:
Программа должна быть написана для последовательного управления светодиодом 8 при нажатии переключателя 1, а затем при нажатии переключателя 2 последовательность должна быть изменена. Полная программа и демонстрация видео можно найти в нижней части этой страницы. Далее я буду объяснять программу построчно, чтобы вы могли легко ее понять.
Как всегда, мы должны начать с функции void setup (), внутри которой мы объявим, что используемые контакты являются входными или выходными контактами. В нашей программе 8 выводов светодиодов являются выходными, а 2 переключателя - входами. Эти 8 светодиодов подключены от P1.0 к P2.1, который является контактом 2–9 на плате. Затем переключатели подключаются к контактам P2.3 и 2.4, которые имеют номера контактов 11 и 12 соответственно. Итак, мы объявили следующее в void setup ()
void setup () {для (int я = 2; я <= 9; я ++) {pinMode (я, ВЫХОД); } для (int я = 2; я <= 9; я ++) {digitalWrite (я, LOW); } pinMode (11, INPUT_PULLUP); pinMode (12, INPUT_PULLUP); }
Как мы знаем, функция pinMode () объявляет вывод как выводимый или вводимый, а функция digitalWrite () делает его высоким (ON) или низким (OFF). Мы использовали цикл for, чтобы сделать это объявление, чтобы уменьшить количество строк. Переменную «я» будет увеличен от 2 до 9 в течение цикла и для каждого приращения функции внутри будет выполняться. Еще одна вещь, которая может вас смутить, - это термин « INPUT_PULLUP ». Вывод можно объявить как входной, просто вызвав функцию pinMode (Pin_name, INPUT), но здесь мы использовали INPUT_PULLUP вместо INPUT, и оба они имеют заметное изменение.
Когда мы используем какие-либо выводы микроконтроллера, вывод должен быть подключен к низкому или высокому уровню. В этом случае контакты 11 и 12 подключены к переключателю, который при нажатии будет заземлен. Но когда переключатель не нажат, контакт ни к чему не подключен, это состояние называется плавающим контактом, и это плохо для микроконтроллеров. Поэтому, чтобы избежать этого, мы используем подтягивающий или понижающий резистор, чтобы удерживать вывод в состоянии, когда он переходит в плавающее положение. В микроконтроллере MSP430G2553 контакты ввода / вывода имеют встроенный подтягивающий резистор. Чтобы использовать это, все, что нам нужно сделать, - это вызвать INPUT_PULLUP вместо INPUT во время объявления, как это было сделано выше.
Теперь перейдем к функции void loop () . Все, что написано в этой функции, будет выполняться вечно. Первым шагом в нашей программе является проверка того, нажат ли переключатель, и если он нажат, мы должны начать последовательно мигать светодиодами. Чтобы проверить, нажата ли кнопка, используется следующая строка
если (digitalRead (12) == НИЗКИЙ)
Здесь новая функция - это функция digitalRead () , эта функция будет считывать состояние цифрового вывода и вернет HIGH (1), когда на вывод будет некоторое напряжение, и вернет низкий LOW (0), когда вывод заземлен. В нашем оборудовании вывод будет заземлен только тогда, когда мы нажмем кнопку, в противном случае он будет высоким, поскольку мы использовали подтягивающий резистор. Поэтому мы используем оператор if, чтобы проверить, была ли нажата кнопка.
После нажатия кнопки мы попадаем в бесконечный цикл while (1) . Здесь мы начинаем последовательно мигать светодиодами. Бесконечное время цикла показано ниже, и все, что написано внутри цикла не будет работать вечно, пока перерыв; заявление используется.
белый (1) {}
Внутри бесконечности, пока мы проверяем состояние второго переключателя, который подключен к выводу 11.
Если этот переключатель нажат, мы мигаем светодиодом в одной определенной последовательности, иначе мы будем мигать в другой последовательности.
if (digitalRead (11) == LOW) {для (int i = 2; i <= 9; i ++) {digitalWrite (i, HIGH); задержка (100); } для (int i = 2; i <= 9; i ++) digitalWrite (i, LOW); }
Чтобы последовательно мигать светодиодом, мы снова используем цикл for , но на этот раз мы используем небольшую задержку в 100 миллисекунд с помощью функции delay (100), чтобы мы могли заметить, что светодиод загорается. Чтобы за раз светился только один светодиод, мы также используем другой цикл for, чтобы выключить все светодиоды. Итак, мы включаем светодиод, ждем на некоторое время, затем выключаем все светодиоды, затем увеличиваем счетчик, включаем светодиод, ждем на некоторое время, и цикл продолжается. Но все это будет происходить до тех пор, пока не будет нажат второй переключатель.
Если нажать второй переключатель, то мы изменим последовательность, программа будет более или менее такой же, как ожидалось, для последовательности, в которой горит светодиод. Линии показаны ниже, попробуйте взглянуть и выяснить, что было изменено.
else {для (int я = 9; я> = 2; я--) {digitalWrite (я, ВЫСОКИЙ); задержка (100); } для (int i = 2; i <= 9; i ++) digitalWrite (i, LOW); }
Да, цикл for был изменен. Раньше мы заставляли светодиод светиться от номера 2 до 9. Но теперь мы собираемся начать с номера 9 и постепенно уменьшать его до 2. Таким образом мы можем заметить, нажат переключатель или нет.
Настройка оборудования для последовательности мигания светодиода:
Хорошо, хватит теории и программной части. Давайте возьмем некоторые компоненты и посмотрим, как эта программа выглядит в действии. Схема очень проста и, следовательно, может быть легко построена на макете. Но я припаял светодиод и переключатели на монтажной плате, чтобы она выглядела аккуратно. Плата, которую я спаял, показана ниже.
Как видите, выходные контакты светодиода и переключателя вынесены как контакты разъема. Теперь нам нужно использовать провода разъема «мама-мама» для подключения светодиодов и переключателей к плате MSP430 LaunchPad, как показано на рисунке ниже.
Загрузка и работа:
Как только вы закончите с оборудованием, просто подключите плату MSP430 к компьютеру, откройте Energia IDE и используйте программу, приведенную в конце этой страницы. Убедитесь, что в Energia IDE выбраны правильная плата и COM-порт, и нажмите кнопку «Загрузить». Программа должна быть успешно скомпилирована, и после загрузки появится сообщение «Done Uploading».
Теперь нажмите кнопку 1 на плате, и светодиод должен загореться в последовательности, как показано ниже.
Вы также можете удерживать вторую кнопку, чтобы проверить, не меняется ли последовательность. Полная работа проекта показана на видео ниже. Если вас устраивают результаты, вы можете попробовать внести некоторые изменения в код, например изменить время задержки, изменить последовательность и т. Д. Это поможет вам лучше изучить и понять.
Надеюсь, вы поняли руководство и узнали из него что-то полезное. Если вы столкнулись с какой-либо проблемой, задайте вопрос в разделе комментариев или воспользуйтесь форумом. Давайте встретимся в другом руководстве, где мы узнаем, как считывать аналоговые напряжения с помощью нашей стартовой панели MSP30.