Ардуинога тугма сенсорини улаш ардуинобаъзи билим ва кўникмаларни талаб қилади. Ушбу мақолада, биз бир соат тугмаси нима ҳақида суҳбатлашамиз, нима, бир тугма чилдирма, тўғри бир пулл-уп ва пулл-пастга қаршилик билан бир тугмани улаш учун қандай, тугмаси ёрдамида ЛЕД ва бошқа қурилмалар назорат қилиш учун қандай.
Таркиблар
1 Arduino тугмаси
1.1 соат тугмалари ва тугма тугмалари
1.2 Arduino тугмалари оддий лойиҳалар учун
2 Уланиш тугмасиниArduino
2.1 тугма ёрдамида Ледни ёқиш ва ўчириш
2.2 тугмачани тортиш резистори билан улаш
3 ИНПУТ_ПУЛЛУП режимида тугмани улаш
4 тугмасини босгандан сўнг лед ёниб
5 Arduino тугмасини Rattle
6 тугма ёрдамида ўтиш режимлари
6.1 Ктугмачани босгандан сўнг қандай қилиб иш режимларини алмаштириш мумкин?
6.2 Кбир нечта тугма боскичлари қандай аниқланиши мумкин?
Кнопка Arduino тугмаси
А тугмаси (ёки тугмаси switch) датчиклар барча турдаги енг оддий ва енг яхши бўлади. Унга босиш орқали сиз назоратчига signal берасиз, бу еса баъзи ҳаракатларга олиб келади: Ледлар очилади, товушлар чиқарилади ва моторлар бошланади. Ҳаётимизда биз кўпинча турли калитлар билан учрашамиз ва ушбу қурилма билан яхши танишмиз.
Соат тугмалари ва switch тугмалари
Одатдагидек, бўлимни фақат бошловчилар учун қизиқарли бўлган оддий нарсалар билан бошлаймиз. Агар асосларини билиш ва Arduino тугмасини улаш учун турли йўллар ҳақида маълумот истасангизардуино, сиз бу бўлимни ўтиш мумкин.
Тугма нима? Аслида, бу електр тармоғини ёпадиган ва очадиган жуда оддий қурилма. Сиз ушбу ёпилиш/очилишни турли режимларда бажаришингиз мумкинпри. Шунга кўра, барча тугмаларни иккита катта гуруҳга бўлиш мумкин:
Бир қулф билан тугаш тугмалари. Улар озод қилингандан сўнг асл ҳолига қайтадилар. Дастлабкиҳолатига қараб, улар одатда ёпиқ ва одатда очиқ тугмачаларга бўлинади.
Қулфланмаган тугмалар (соат тугмалари). Улар белгиланган ва улар қолган ҳолатда қолади.
Турли тугмалар учун жуда кўп имкониятлар мавжуд, бу, албатта, електрон компонентларнинг енг кенг тарқалган турларидан биридир.
Кнопки ардуиноОддий лойиҳалар учун Arduino тугмалари
Бизнинг лойиҳаларимизда деярли ҳар қандай Arduino тўплами билан бирга келадиган жуда оддий 4 оёқли соат тугмалари билан ишлаймиз ардуино. Тугма икки жуфт контактли калитдир. Бир жуфт контактлар бир-бирига уланган, шунинг учун сиз палласида бир неча калити амалга ошириш мумкин емас, лекин сиз бир вақтнинг ўзида икки parallel сегментларини назорат қилиш мумкин, ва бу фойдали бўлиши мумкин.
Вазиятга қараб, сиз одатда ёпиқ ва одатда очиқ контактлар билан иккала даврларини яратишингиз мумкин-бунинг учун сиз фақат шунга кўра палласида уланиш қилиш керак бўлади.
Ишлаш қулайлиги учун, одатда, соат тугмаси билан баъзи рангдаги пластик қопқоқ киритилади, у тугмачага жуда аниқ қўйилади ва лойиҳага камроқ hacker кўринишини беради.
Уланиш тугмасиниArduino
Тугма ёрдамида Ледни ёқинг ва ўчиринг
Соат тугмасини улашнинг енг оддий усули билан бошлайлик. Arduino билан електронни електр манбаи, лед, 220 Ом чекловчи резистор ва ўчиришни ёпадиган ва очадиган тугма сифатида кўриб чиқинг.
Икки жуфт оёқли тугмани улашда тўғри очилиш контактларини танлаш муҳимдир. Расмга диққат билан қаранг: тугмачанинг ён томонларида жуфт оёқлар жойлашган. Тугма ўзи квадрат, аммо жуфт контактлар орасидаги масофалар ингл.два Шундай қилиб, у switch амалга оширилади томонида бир "жуфтлик" ўртасида бўлади. Туташувга киритиш учун улар орасидаги minimal масофа билан бир ва бошқа контактга уланамиз. Контактларнинг иккинчи жуфти фақат биринчисини такрорлайди.
Агар бошқа турдаги калитга ега бўлсангиз, қарама-қарши бурчаклардан контактларни бемалол танлаб олишингиз мумкин (баъзи тугмачаларда боғланган контактларнинг қайси томонда жойлашганлигини аниқлаш имконини берувчи чизғич шаклида махсус белги қўйилади). Тўғри оёқларни аниқлашнинг енг ишончли усули-синалувчи контактларни чалишдир.
Тугмаси билан електрон ўзи, лед ва Arduino назоратчи ҳар қандай махсус тушунтиришлар керак емас. Тугма туташувни бузади ва лед ёнмайди. Босилганда електрон ёпилади ва лед ёнади. Контактларни аралаштирсангиз (тугмани ёпиқ боғланган контактлар орқали ёқинг), тугма ишламайди, чунки електрон ҳеч қачон очилмайди. Фақат контактларингизни алмаштиринг.
Пулл-уп резистор билан тугмани улаш
Келинг, Ардуинога тугмачани улайликардуино, шунда сиз унинг ҳолатини скетчда ўқишингиз мумкин. Бунинг учун қуйидаги схемадан фойдаланинг.
Ескизда биз нажатияпорт мониторига хабарни босиш ва кўрсатиш ҳақиқатини кузатамиз. Кейинчалик қизиқарли мисол ва схеманинг ўзи ҳақида батафсил маълумот берилади.
Следует обратить внимание на сопротивление 10Ушбу паллада қўшган 10К қаршилигига еътибор беришингиз керак. Биз кейинчалик батафсил унинг мақсади ҳақида суҳбатлашамиз, фақат бундай резистор туташув тўғри ишлаши учун зарур еканлигини ёдда тутинг.
Скетч для кнопки ардуиноПулл-уп резистор билан Arduino тугмаси учун Sketch:
/*
Arduino соат тугмасини фойдаланиш мисол ардуино.
Тугма подключена к пин 2 га уланган.
*/
const инт ПИН_БУТТОН = 2;
воид ўрнатиш() {
Serial.бошланади(9600);
пинмоде(ПИН_ЛЕД, ишлаб ЧИҚАРИШ);
}
воид лооп() {
// Тугма ҳолатини олинг ва уни порт мониторида кўрсатинг
инт буттонстате = дигиталреад(ПИН_БУТТОН);
Serial.принтлн(буттонстате);
кечикиш(50);
}
Подключение кнопки в режимеИНПУТ_ПУЛЛУП режимида тугмани улаш
Юқоридаги схемада рақамли портда маълум signal даражасини ҳосил қилиш учун пулл-уп деб аталувчи резистордан фойдаландик. Лекин Arduino платасининг ички қаршилигидан фойдаланиб, тугмани резисторсиз улашнинг яна бир усули мавжуд ардуино. Ўрнатиш блокда, биз фақат пинатугмасини улаш учун пин турини аниқлаш керак, ИНПУТ_ПУЛЛУП сифатида.
пинмоде(ПИН_БУТТОН, ИНПУТ_ПУЛЛУП);
Муқобил variant пиначиқиш сифатида пин режимини танлаш ва бу порт юқори signal даражасини ўрнатиш учун емас. Ички пулл-уп қаршилик автоматик равишда уланиш.
пинмоде(ПИН_БУТТОН, ИНПУТ_ПУЛЛУП);
дигиталwрите(ПИН_БУТТОН, ЮҚОРИ);
Бу ҳаммаси. Бундай мураккаб схемани яратишингиз ва ескиздаги тугма билан ишлашингиз мумкин.
Тугмани босгандан кейин лед ёниб туради
ЛЕД билан олдинги мисолда, биз Arduino Кенгаши тугмасини уланган ва у қандай ишлашини тушуниб. Лед ёқилди ва ёпилди, лекин у бутунлай пассив режимда ишлади – назоратчининг ўзи бу ерда мутлақо ортиқча еди, уни батареялар билан алмаштириш мумкин еди. Шундай қилиб, янги лойиҳамизни янада "ақлли" қилайлик: тугмани босганингизда, Ледни доимий равишда очиб қўямиз. Буни лампочка ва калит билан анъанавий електрон билан қила олмайсиз-бу оддий, аммо аҳамияциз вазифани ҳал қилиш учун микроконтроллеримизнинг кучини ишлатамиз.
Лойиҳанинг тўлиқ схемаси расмда кўрсатилган:
Лед билан туташув fragment аллақачон бизга яхши маълум. Биз лед ва чеклаш қаршилик билан мунтазам кузатишдан йиғилган. Аммо иккинчи қисмда таниш тугма ва бошқа резисторни кўрамиз. Биз ҳали тафсилотларга бормаймиз, фақат диаграмма қурамиз ва ардуиноАрдуинога оддий ескизни юклаймиз. Барча електрон елементлар оддий Arduino starter тўпламлари келади.
/*
Соат тугмаси ва лед ёрдамида електрон учун ескиз
Тугма босилганда лед ёниб туради.
Тугма ерга туширилади, босиб киришда юқори даражага мос келади
*/
const инт ПИН_БУТТОН = 2;
const инт ПИН_ЛЕД = 13;
воид ўрнатиш() {
Serial.бошланади(9600);
пинмоде(ПИН_ЛЕД, ишлаб ЧИҚАРИШ);
}
воид лооп() {
// Получаем состояние Тугма ҳолатини олиш
инт буттонстате = дигиталреад(ПИН_БУТТОН);
Serial.принтлн(буттонстате);
// Агар тугма босилмаса, ҳеч нарса қилманг
агар (!буттонстате) {
кечикиш(50);
қайтиш;
}
// Тугма босилса бу код блоки бажарилади
// Blinking бўлиб келди
дигиталwрите(ПИН_ЛЕД, ЮҚОРИ);
кечикиш(1000);
дигиталwрите(ПИН_ЛЕД, ПАСТ);
кечикиш(1000);
}
Матбуот ва ушлаб turing-лед ёритгичлар. Уни озод қиламиз-чиқиб кетади. Айнан , биз нима истадик. Биз қувонч учун қўлларини cлап ва биз қилган таҳлил қилиш бошланади.
Ескизга бир назар ташлайлик. Унда биз жуда оддий мантиқни кўрамиз.
Тугма босилганлигини аниқлаш.
Агар тугма босилмаса , биз loopҳеч нарса киритмасдан ёки ўзгартирмасдан, лооп усулидан чиқамиз.
Агар тугма босилса, standart ескизнинг фрагменти ёрдамида милтиллашни амалга оширамиз:
Керакли портга кучланиш қўллаш, лед ёқинг
Лед ёқилганда керакли пауза қиламиз
Ледни ўчириш
ЛЕД ўчирилганда керакли пауза қиламиз
Қайсики тугмаси хатти мантиқ бир пулл-уп қаршилик билан уланиш усули боғлиқ бўлиши мумкин. Бу ҳақда кейинги мақолада гаплашамиз.
Дребезг кнопки Arduino тугмасини rattle
Тугмалар билан ишлаш жараёнида тугма чилдирмаси деган жуда нохуш ҳодисага дуч келишимиз мумкин. Ном назарда тутилганидек, бу ҳодиса тугма тугмаси ичидаги контактларнинг чайқалишидан келиб чиқади. Металл плиталар бир-бири билан дарҳол алоқа қилмайди (бизнинг кўзимиз учун жуда тез бўлса-да), шунинг учун қисқа вақт ичида kontakt зонасида кучланиш далгаланмаларı ва диплар мавжуд. Агар биз бундай "ахлат" сигналларининг кўринишини назарда тутмасак, биз уларга ҳар сафар муносабат билдирамиз ва лойиҳамизни уйга олиб боришимиз мумкин хаусу.
Дастур ва аппарат ечимлар сафсата бартараф етиш учун ишлатилади. Қисқача айтганда, биз фақат суҳбатни бостиришнинг асосий усулларини еслатиб ўтамиз:
Arduino пинидан қийматларни қабул қилиш орасидаги ескизда 10-50 миллисекундли пауза қўшамиз полкучением значений с пина ардуино.
Агар узилишлардан фойдалансак, дастурий метдусулдан можетфойдаланиб бўлмайди ва аппарат ҳимоясини ҳосил қиламиз. Улардан енг соддаси конденсатор ва қаршиликка ега бўлган РC филтрдир.
Шмидт тепкиси ёрдамида аппарат филтри аниқроқ чайқалиш бостирилиши учун ишлатилади шмидта. Ушбу параметр ардуиноАрдуинога киришда деярли мукаммал шаклдаги сигнални олиш имконини беради.
Ушбу кўприкда қандай қилиб чайқалиш ҳақида кўпроқ маълумот олишингиз мумкин тугмасини сафсата бартараф ҳақида мақола.
Тугмаси ёрдамида режимларини ўтиш
Для того,Тугма босилганлигини аниқлаш учун уни босилганлигини ёзиб олиш ва атрибутни махсус ўзгарувчида сақлаш керак.
Дигиталреад() функсияси ёрдамида босиш ҳақиқатини аниқлаймиз. Натижада тугмани қандай улаганимизга қараб юқори (1, ТРУЕ) ёки паст(0, FALSE) га ега бўламиз. Агар тугмани ички тортиш резистори ёрдамида уласак, тугмани босиш кириш даражасининг 0 (FALSE) пайдо бўлишига олиб келади.
Бир тугмани босиш ҳақида маълумотни сақлаш учун boolean ўзгарувчисидан фойдаланишингиз мумкинboolean:
boolean кейпрессед = дигиталреад(ПИН_БУТТОН)==ПАСТ;
Нега бундай қилиш ўрнига бу конструксиядан фойдаланамиз?:
boolean кейпрессед = дигиталреад(ПИН_БУТТОН);
Бутун нуқта дигиталреад деб digitalRead() юқори қайтишингиз мумкин, лекин у тугмасини чертаётган дегани емас. Пулл-уп резистор схемасидан фойдаланган ҳолда, юқори тугма, аксинча, босилмаганлигини англатади. Биринчи вариантда (дигиталреад(ПИН_БУТТОН)= = паст) киришни дарҳол керакли қиймат билан солиштириб, кириш сигнали даражаси ҳозирча паст бўлсада, тугма босилганини аниқладик. Ва ўзгарувчига тугма ҳолатини сақлаб қолди. Кодингизни янада шаффоф қилиш ва кераксиз аҳмоқона хатолардан қочиш учун амалга оширадиган барча мантиқий операцияларни аниқ кўрсатишга ҳаракат қилинг.
Мен бир тугмани босиб кейин операцион усуллари ўтиш қандай?
Кўпинча тугмачаларни босибгина қолмай, балки қўйиб юборилганлигини ҳисобга олиш учун тугмачалардан фойдалансак бўлади. Мисол учун, бир тугмани босиб ва қўйиб, биз нур ёқиш ёки електрон режимини ўтиш мумкин. Бошқача қилиб айтганда, тугма кодда босилганлигини ва тугма аллақачон босилмаган бўлса ҳам, маълумотни кейинроқ ишлатишимиз керак. Келинг, бу қандай амалга оширилиши мумкинлигини кўриб чиқайлик.
Дастур мантиқ жуда оддий:
Хизмат ўзгарувчисини босиш фактини еслаймиз.
Чилдирма билан боғлиқ ҳодисалар ўтгунча кутамиз.
Тугмасини қўйиб юборилишини кутиб турибди.
Тугмани тўлиқ босилганлигини кўрсатиш учун алоҳида ўзгарувчини чиқариш ва ўрнатиш факти еслаймиз.
Хизмат ўзгарувчисини клиринг.
Мен бир неча тугмаси marta босиш аниқлаш қандай?
Do'stlaringiz bilan baham: |