- Необходим материал:
- Електрическа схема:
- Обяснение на програмирането:
- Хардуерна настройка за мигаща LED последователност:
- Качване и работа:
Това е вторият урок от поредица от уроци, в който изучаваме MSP430G2 LaunchPad от Texas Instruments с помощта на Energia IDE. В последния урок на Blinky LED представихме себе си на борда за разработка на LaunchPad и на Energia IDE, качихме и първата си програма, която е да мига вградения светодиод на регулярен интервал.
В този урок ще научим как да използваме опцията за цифрово четене и цифрово писане, за да четем състоянието на входно устройство като превключвател и да управляваме множество изходи като светодиодите. В края на този урок бихте се научили да работите с цифрови входове и изходи, които могат да се използват за свързване на много цифрови сензори като IR сензор, PIR сензор и т.н., както и за включване или изключване на изходи като LED, зумер и др. Звучи интересно нали !!? Да започваме.
Необходим материал:
- MSP430G2 LaunchPad
- LED от всякакъв цвят - 8
- Превключвател - 2
- 1k резистор - 8
- Свързващи проводници
Електрическа схема:
В предишния ни урок забелязахме, че самата стартова подложка се предлага с два светодиода и превключвател на дъската. Но в този урок ще ни трябва повече от това, тъй като планираме да светим осем светодиодни лампи последователно при натискане на бутон. Също така ще променим последователността при натискане на друг бутон, само за да го направим интересен. Така че трябва да изградим верига с 8 LED светлини и два превключвателя, пълната схема може да бъде намерена по-долу.
Тук 8-те светодиода са изходите, а двата превключвателя - входовете. Можем да ги свържем към всеки I / O щифт на платката, но аз съм свързал LRD от пин P1.0 към P2.1 и превключвам 1 и 2 към щифтове P2.4 и P2.3, както е показано по-горе.
Всички катодни щифтове на светодиода са свързани към земята и анодният щифт е свързан към I / O щифтовете чрез резистор. Този резистор се нарича резистор за ограничаване на тока, този резистор не е задължителен за MSP430, тъй като максималният ток, който може да произведе I / O щифтът е само 6 mA, а напрежението на щифта е само 3,6 V Въпреки това е добра практика да ги използвате. Когато някой от тези цифрови щифтове стане висок, съответният светодиод ще се включи. Ако можете да си припомните последните уроци LED програма, тогава ще запомните, че digitalWrite (LED_pin_name, HIGH) ще накара LED да свети, а digitalWrite (LED_pin_name, LOW) ще завърти светодиода.
Превключвателите са входно устройство, единият край на превключвателя е свързан към заземяващия терминал, а другият е свързан към цифрови щифтове P2.3 и P2.4. Това означава, че всеки път, когато натиснем превключвателя, I / O щифтът (2.3 или 2.4) ще бъде заземен и ще остане свободен, ако бутонът не бъде натиснат. Нека видим как можем да използваме тази подредба по време на програмиране.
Обяснение на програмирането:
Програмата трябва да бъде написана, за да управлява последователно 8-те светодиода при натискане на превключвателя 1 и след това при натискане на превключвателя 2 последователността трябва да се промени. В пълна програма и демонстрация Видео може да се намери в дъното на тази страница. По-нататък по-долу ще обясня програмата ред по ред, за да можете лесно да я разберете.
Както винаги трябва да започнем с функцията void setup (), вътре в която бихме декларирали пиновете, които използваме, за входни или изходни щифтове. В нашата програма 8-те светодиодни извода се извеждат, а 2-те превключвателя са входове. Тези 8 светодиода са свързани от P1.0 до P2.1, което е пин номер 2 до 9 на платката. След това превключвателите са свързани към пин P2.3 и Pin 2.4, който е съответно пин с номера 11 и 12. Така че ние обявихме следното в void setup ()
void setup () {for (int i = 2; i <= 9; i ++) {pinMode (i, OUTPUT); } за (int i = 2; i <= 9; i ++) {digitalWrite (i, LOW); } pinMode (11, INPUT_PULLUP); pinMode (12, INPUT_PULLUP); }
Както знаем, функцията pinMode () декларира пина за изход или вход, а функцията digitalWrite () го прави висок (ON) или нисък (OFF). Използвахме цикъл for, за да направим тази декларация, за да намалим броя на редовете. Променливата "и" ще се увеличава 2-9 в FOR контур и за всяко нарастване вътрешността на функция ще бъде изпълнена. Друго нещо, което може да ви обърка, е терминът „ INPUT_PULLUP “. ПИН може да бъде деклариран като вход само чрез извикване на функцията pinMode (Pin_name, INPUT), но тук използваме INPUT_PULLUP вместо INPUT и двамата имат забележима промяна.
Когато използваме каквито и да било щифтове на микроконтролера, щифтът трябва да бъде свързан към ниско или към високо. В този случай щифтовете 11 и 12 са свързани към превключвателя, който ще бъде свързан към земята при натискане. Но когато превключвателят не е натиснат, щифтът не е свързан с нищо, това състояние се нарича плаващ щифт и е лошо за микроконтролерите. Така че, за да избегнем това, използваме или издърпващ или падащ резистор, за да задържим щифта в състояние, когато той влезе в плаващ. В микроконтролера MSP430G2553 I / O щифтовете имат вграден издърпващ резистор. За да използваме всичко, което трябва да направим, е да извикаме INPUT_PULLUP вместо INPUT по време на декларацията, точно както направихме по-горе.
Сега позволява стъпка във функцията void loop () . Каквото и да е написано в тази функция, ще бъде изпълнено завинаги. Първата стъпка в нашата програма е да проверим дали ключът е натиснат и ако е натиснат, трябва да започнем да мигаме светодиодите последователно. За да проверите дали бутонът е натиснат, се използва следният ред
if (digitalRead (12) == LOW)
Тук новата функция е функцията digitalRead () , тази функция ще прочете състоянието на цифров щифт и ще върне HIGH (1), когато щифтът получава някакво напрежение и ще върне ниско LOW (0), когато щифтът е заземен. В нашия хардуер щифтът ще бъде заземен само когато натиснем бутона, в противен случай ще бъде висок, тъй като сме използвали издърпващ резистор. Затова използваме оператора if , за да проверим дали бутонът е бил натиснат.
След като бутонът бъде натиснат, ние влизаме в безкрайния цикъл while (1) . Тук започваме да мигаме последователно светодиодите. По- долу е показан безкраен цикъл while и каквото и да е написано вътре в цикъла, ще работи вечно до прекъсване; израз се използва.
колело (1) {}
Вътре в безкрайността, докато проверяваме състоянието на втория превключвател, който е свързан към щифт 11.
Ако този ключ е натиснат, мигаме светодиода в една конкретна последователност, иначе ще го мигаме в друга последователност.
if (digitalRead (11) == LOW) {for (int i = 2; i <= 9; i ++) {digitalWrite (i, HIGH); забавяне (100); } за (int i = 2; i <= 9; i ++) digitalWrite (i, LOW); }
За да премигваме светодиода последователно, отново използваме цикъла for , но този път използваме малко закъснение от 100 милисекунди, използвайки функцията за забавяне (100) , за да забележим, че светодиодът се повишава. За да накараме само един светодиод да свети едновременно, използваме и друг for цикъл, за да изключим всички светодиоди. Така че ние включваме светодиодно изчакване за известно време и след това изключваме всички светодиоди, след което увеличаваме броя, включваме светодиодното чакане известно време и цикълът продължава. Но всичко това ще се случи, докато вторият превключвател не бъде натиснат.
Ако вторият ключ е натиснат, тогава ние променяме последователността, програмата ще бъде горе-долу същата, очаквайте за последователността, на която е включен светодиода. Редовете са показани по-долу, опитайте да погледнете и да разберете какво е променено.
else {for (int i = 9; i> = 2; i--) {digitalWrite (i, HIGH); забавяне (100); } за (int i = 2; i <= 9; i ++) digitalWrite (i, LOW); }
Да, цикълът for е променен. Преди това направихме светодиода да свети от номер 2 и чак до 9. Но сега ще започнем от номер 9 и ще намалим чак до 2. По този начин можем да забележим дали превключвателят е натиснат или не.
Хардуерна настройка за мигаща LED последователност:
Достатъчно добре от цялата теория и софтуерна част. Нека вземем някои компоненти и да видим как изглежда тази програма в действие. Веригата е много проста и следователно може лесно да бъде изградена върху макет. Но аз съм запоил светодиода и превключвателите на перфектната платка, само за да изглежда добре. Перфектната дъска, която споях, е показана по-долу.
Както можете да видите, изходните щифтове на светодиода и превключвателя са извадени като конектори. Сега използваме женските към женските съединителни проводници, за да свържем светодиодите и превключваме към платката MSP430 LaunchPad, както е показано на снимката по-долу.
Качване и работа:
След като приключите с хардуера, просто свържете вашата платка MSP430 към вашия компютър и отворете Energia IDE и използвайте програмата, дадена в края на тази страница. Уверете се, че дясната платка и COM портът са избрани в IDE на Energia и кликнете върху бутона Качване. Програмата трябва да се компилира успешно и след като бъде качена, ще покаже „Готово качване“.
Сега натиснете бутона 1 на платката и светодиодът трябва да светне последователно, както е показано по-долу
Можете също така да задържите втория бутон, за да проверите дали последователността се променя. Цялостната работа на проекта е показана във видеото по-долу. Ако сте доволни от резултатите, можете да опитате да направите някои промени в кода, като промяна на времето за забавяне, промяна на последователността и т.н. Това ще ви помогне да научите и разберете по-добре.
Надявам се, че сте разбрали урока и сте научили нещо полезно с него. Ако сте се сблъскали с някакъв проблем, не се колебайте да публикувате въпроса в раздела за коментари или да използвате форумите. Нека се срещнем в друг урок, където ще научим как да четем аналогови напрежения с помощта на нашата стартова площадка MSP30.