Мазмуну:

Arduino - Мезгилдүү үзгүлтүк: 4 кадам
Arduino - Мезгилдүү үзгүлтүк: 4 кадам

Video: Arduino - Мезгилдүү үзгүлтүк: 4 кадам

Video: Arduino - Мезгилдүү үзгүлтүк: 4 кадам
Video: Хаотический LFO на светоуправляемом транзисторе 2024, Июль
Anonim
Arduino - мезгилдүү үзгүлтүк
Arduino - мезгилдүү үзгүлтүк

Бул Инструкция Arduino программаларында мезгил үчүн үзгүлтүккө учуроону колдонуу жөнүндө. Бул Arduino көп нерсени жасай аларын билген, бирок муну кантип жасоону такыр билбеген, жаңыдан башталып келе жаткан Arduino программисти үчүн бир кадам.

Эгерде иштөө көйгөйү болсо, мен сиз бир же бир нече delay () функцияларын колдонуп жатасыз деп ойлойм. Айла - кечиктирүү () функциясынан (функцияларынан) арылуу жана үзүүнү алмаштыруу. Delay () функциясы Arduino кечиктирүүнү () бүтүшүн күтүп жатканда эч нерсе кылууга мажбурлайт. Үзгүлтүктү колдонуу программаңызга кечигүүнүн бүтүшүн күтүп, башка нерселерди кылууга мүмкүнчүлүк берет. Адатта, delay () колдонулганда башка нерселер үчүн колдонулушу мүмкүн болгон колдонулбаган өлгөн убакыттын көп саны бар. Үзгүлтүктү колдонуу бул маселени чечет.

1 -кадам: Interrupt Handler

1. Программаңызга үзгүлтүккө учурагычты кошуңуз. Жөн гана көчүрүү жана орнотуунун жогору жагындагы бир жерге чаптоо ();

const unsigned long TIMER0_COUNT = 500; // 500 мс таймер аралыгы

// TIMER0 үзгүлтүк иштетүүчү туруксуз бол убакыт = жалган; ISR (TIMER0_COMPA_vect) {static unsigned long count = 0; if (++ count> TIMER0_COUNT) {count = 0; убакыт = чындык; // убакыт ар бир TIMER0_COUNT мс} коюлган (убакыт негизги тартипте тазаланышы керек)}

2 -кадам: Мезгилдик убакыт интервалын коюңуз

2. Убакыт аралыгын коюңуз. Бул регулярдуу түрдө ~ 1 msec сайын күйүп турган TIMER0 үзгүлтүгүнө кайтат.

Сиздин "интервал" - бул иштетүү үчүн TIMER0 үзүлүүлөрүнүн саны. Ар бир интервал ~ 1 msec, андыктан сиз интервалды иштетүүдөн мурун канча TIMER0 үзүлүшүн эсептейсиз. IOW, TIMER0_COUNT өзгөрмөсүн канча миллисекунд күткүңүз келсе, ошого коюңуз. Мисалы, 500 секунданын жарымында колдонуңуз. 3000ди 3 секунд колдонуңуз.

3 -кадам: үзгүлтүккө учуратуу

3. Setup () ыкмаңызга "TIMER0 инициализациясы" кодун кошуңуз. Дагы, жөн эле көчүрүү жана орнотуу ().

// *** TIMER0 инициализациясы ***

cli (); // бардык үзгүлтүктөрдү өчүрүү TIMSK0 = 0; // төмөнкү чуркоо үчүн таймерди өчүрүү OCR0A = 0xBB; // үзгүлтүксүз саноо TIMSK0 | = _BV (OCIE0A); // piggy back to interrupt sei (); // бурулуш үзгүлтүктөрдү кайра күйгүзүү

4 -кадам: Кодуңузду кайда кошсо болот

4. "time check" кодун loop () ыкмаңызга кошуңуз. Көчүрүү жана циклге коюу ().

эгер (убакыт) {

убакыт = жалган; // бул жерде бир нерсе кыл}

"Time = false;" линия маанилүү. Бул сызыксыз "бул жерде бир нерсе кыл" саптары программа циклди () аткарган сайын аткарылмак.

Албетте, сиз өзүңүздүн ишмердүүлүгүңүздү "бул жерде бир нерсе кыл" сапына алмаштырасыз. Бир аз текстти басып чыгаруу же LEDди күйгүзүү менен баштаңыз.

Сен бүттүң!

Сунушталууда: