Ардуино

ХелиОС за Ардуино

ХелиОС за Ардуино
Микроконтролери Ардуина користе један програм за контролу свих прекидача, ЛЕД диода и других делова система. Први програм који је научио корисник Ардуина је обично 'Блинк' програм који користи функцију одлагања за укључивање и искључивање ЛЕД диоде у равномерном обрасцу. Овај једноставан програм може се проширити на многе ствари, али не може укључивати мултитаскинг.

За напредније пројекте треба да промените вредности и читате податке у реалном времену, што није могуће са стандардном функцијом одлагања у Ардуину. Стога је потребно другачије решење. Срећом, ХелиОС може помоћи.

Ограничења Ардуина

Као што је поменуто у уводу, стандардни језик Ардуина може се применити на много начина. Међутим, постоји проблем: Ардуино не може да обавља више задатака. На пример, не можете подесити да три различита ЛЕД светлуцају у независним интервалима. Овај задатак није могуће извршити јер ће, ако користите одлагање, ЛЕД са највећим закашњењем блокирати трептање осталих ЛЕД док чека на пребацивање стања.

Стандардно анкетирање је такође проблематично, јер провера стања дугмета захтева предузимање радње. У стандардном Ардуину морате да подесите функцију за испитивање стања прекидача или било ког другог стања.

Иако постоје решења за решавање ових проблема (нпр.г., хардверски прекиди, функција милиса, имплементација ФрееРТОС), али ова решења такође имају ограничења. Да би превазишао проблеме ових решења, Манние Петерсон је изумео ХелиОС. ХелиОС је мали и ефикасан, а може чак да ради и на 8-битним контролерима.

Размотрите доњи код, који је у најбољем случају непоуздан, јер ће извештај о одлагању спречити проверу дугмета.

инт буттонПин = 2; // број клина тастера
инт ледПин = 4; // број ЛЕД пина
// променљиве ће се променити:
инт буттонСтате = 0; // променљива за очитавање статуса тастера
воид сетуп ()
// иницијализујемо ЛЕД пин као излаз:
пинМоде (ледПин, ОУТПУТ);
пинМоде (ЛЕД_БУИЛТИН, ИЗЛАЗ);
// иницијализујемо тастер као улаз:
пинМоде (буттонПин, ИНПУТ);

воид лооп ()
// читање стања вредности дугмета:
буттонСтате = дигиталРеад (буттонПин);
// проверавамо да ли је притиснуто дугме. Ако јесте, буттонСтате је ХИГХ:
иф (буттонСтате == ХИГХ)
дигиталВрите (ледПин, ХИГХ); // укључити ЛЕД
остало
дигиталВрите (ледПин, ЛОВ); // искључити ЛЕД

дигиталВрите (ЛЕД_БУИЛТИН, ВИСОКО); // укључити ЛЕД (ХИГХ је ниво напона)
кашњење (1000); // сачекајте секунду
дигиталВрите (ЛЕД_БУИЛТИН, ЛОВ); // искључите ЛЕД тако што ћете напон НИСКО
кашњење (1000); // сачекајте секунду

Када покренете овај код, видећете да ће 'ледПин' нормално трептати. Међутим, када притиснете дугме, оно неће упалити, или ако се одгоди, одложит ће серију трептања. Да би овај програм функционисао, можете се пребацити на друге методе одлагања; међутим, ХелиОС пружа алтернативу.

Линук уграђен у Ардуино (ХелиОС)

Упркос „ОС“ у свом имену, ХелиОС није оперативни систем: он је библиотека вишезадаћних функција. Међутим, он имплементира 21 позив функције који може поједноставити сложене контролне задатке. За задатке у реалном времену систем мора да обрађује спољне информације онако како су примљене. Да би то урадио, систем мора моћи да обавља више задатака.

Неколико стратегија може се користити за руковање задацима у стварном времену: стратегије вођене догађајима, уравнотежене стратегије у току и стратегије обавештавања о задацима. Са ХелиОС-ом можете користити било коју од ових стратегија помоћу функцијских позива.

Као и ФрееРТОС, ХелиОС побољшава мултитаскинг могућности контролера. Међутим, програмери који планирају сложени пројекат од кључне важности морају да користе ФрееРТОС или нешто слично јер је ХелиОС намењен ентузијастима и хобистима који желе да истраже моћ мултитаскинга.

Инсталирање ХелиОС-а

Када користите Ардуино библиотеке, нове библиотеке се могу инсталирати са ИДЕ-ом. За верзије 1.3.5 и више, одаберете да користите Либрари Манагер.


Можете и да преузмете зип датотеку са веб странице и помоћу те датотеке инсталирате ХелиОС.


Имајте на уму да морате да укључите ХелиОС у свој код пре него што почнете да га користите.

Пример

Доле наведени код се може користити да ЛЕД у секунди трепће. Иако смо додали ХелиОС код, коначни ефекат је исти као и уводни водич.

Главна разлика овде је у томе што морате креирати задатак. Овај задатак је стављен у стање чекања и постављен је тајмер који обавештава задатак када треба да се покрене. Поред тога, петља садржи само једну изјаву: кХелиОСЛооп (). Ова петља покреће сав код дефинисан у сетуп () коду. Када планирате свој код, потребно је да поставите све пинове, константе и функције у горњу поставку.

#инцлуде
// Користи се за чување стања ЛЕД диоде
волатиле инт ледСтате = 0;
волатиле инт буттонСтате = 0;
цонст инт буттонПин = 2;
цонст инт ледПин = 4;
// Дефинишите задатак трептаја
воид таскБлинк (кТаскИд ид_)
иф (ледСтате)
дигиталВрите (ЛЕД_БУИЛТИН, ЛОВ);
ледСтате = 0;
остало
дигиталВрите (ЛЕД_БУИЛТИН, ВИСОКО);
ледСтате = 1;



// Дефинишите задатак читања дугмета
воид буттонРеад (кТаскИд ид_)
буттонСтате = дигиталРеад (буттонПин);
// проверавамо да ли је притиснуто дугме. Ако јесте, буттонСтате је ХИГХ:
иф (буттонСтате == ХИГХ)
// укључивање ЛЕД диоде:
дигиталВрите (ледПин, ХИГХ);
остало
// искључити ЛЕД:
дигиталВрите (ледПин, ЛОВ);


воид сетуп ()
// ид прати задатке
кТаскИд ид = 0;
// Ово иницира Хелиос структуре података
кХелиОССетуп ();
пинМоде (ЛЕД_БУИЛТИН, ИЗЛАЗ);
пинМоде (ледПин, ОУТПУТ);
// иницијализујемо тастер као улаз:
пинМоде (буттонПин, ИНПУТ);
// Додај и затим учини да таскБлинк чека
ид = кТаскАдд ("ТАСКБЛИНК", & таскБлинк);
кТаскВаит (ид);
// Интервал тајмера за 'ид'
кТаскСетТимер (ид, 1000000);
ид = кТаскАдд ("ТИПКА", & буттонРеад);
кТаскСтарт (ид);

воид лооп ()
// Ово и само ово је увек у току када се користи Хелиос
кХелиосЛооп ();

Овим кодом можете програмирати ЛЕД да трепће у било ком тренутку, а да не бринете да ли ће Ардуино каснити.

Закључак

Овај пројекат је сјајан за људе који су нови у Ардуину, јер вам омогућава да користите уобичајени Ардуино код за руковање задацима у стварном времену. Међутим, метода описана у овом чланку намењена је само хобистима и истраживачима. За озбиљније пројекте неопходне су друге методе.

Најбољи Линук Дистрос за игре у 2021
Линук оперативни систем далеко је превалио свој изворни, једноставни изглед заснован на серверима. Овај ОС се изузетно побољшао последњих година и сад...
Како снимити и стримовати своју играћу сесију на Линук-у
У прошлости се играње игара сматрало само хобијем, али с временом је играчка индустрија забележила огроман раст у погледу технологије и броја играча. ...
Најбоље игре за ручно праћење
Оцулус Куест је недавно представио сјајну идеју ручног праћења без контролера. Са све већим бројем игара и активности које извршавају подршку формално...