Բովանդակություն:

Թվային ժամացույց Arduino- ում `օգտագործելով վերջնական վիճակի մեքենա. 6 քայլ
Թվային ժամացույց Arduino- ում `օգտագործելով վերջնական վիճակի մեքենա. 6 քայլ

Video: Թվային ժամացույց Arduino- ում `օգտագործելով վերջնական վիճակի մեքենա. 6 քայլ

Video: Թվային ժամացույց Arduino- ում `օգտագործելով վերջնական վիճակի մեքենա. 6 քայլ
Video: Introduction to HT16K33 4 Digit LED Seven Segment Display with Arduino 2024, Նոյեմբեր
Anonim
Թվային ժամացույց Arduino- ում `օգտագործելով վերջնական վիճակի մեքենա
Թվային ժամացույց Arduino- ում `օգտագործելով վերջնական վիճակի մեքենա

Բարև ձեզ, ես ձեզ ցույց կտամ, թե ինչպես կարելի է թվային ժամացույց ստեղծել YAKINDU Statechart Tools- ի միջոցով և աշխատել Arduino- ի վրա, որն օգտագործում է LCD ստեղնաշարի վահան:

Թվային ժամացույցի օրիգինալ մոդելը վերցված է Դեյվիդ Հարելից: Նա հրապարակել է թերթ ՝

«[…] Պետական մեքենաների և պետական գծապատկերների պայմանական ֆորմալիզմի լայն ընդլայնում»:

Այս հոդվածում նա հետազոտության համար օգտագործեց թվային ժամացույցի օրինակը: Ես այն օգտագործել եմ որպես ոգեշնչում և վերակառուցել եմ ժամացույցը YAKINDU Statechart Tools- ով (պետական մեքենաների գրաֆիկական մոդելներ ստեղծելու և դրանով C/C ++ ծածկագիր ստեղծելու գործիք) և այն վերակենդանացրել եմ Arduino- ով:

Պարագաներ

Սարքավորումներ:

  • Arduino Uno կամ Mega
  • LCD ստեղնաշարի վահան

Softwareրագրային ապահովում:

  • YAKINDU Statechart գործիքներ
  • Eclipse C ++ IDE Arduino- ի համար

Քայլ 1. Ինչպես է աշխատում թվային ժամացույցը

Image
Image

Սկսենք ՝ սահմանելով, թե ինչպես պետք է աշխատի թվային ժամացույցը: Հիշու՞մ եք այս… ասենք… «ծայրահեղ» թվային ժամացույցները, որոնք բոլորն ունեին դեռ 90 -ականներին: Ինտեգրված վայրկյանաչափ, տարբեր ահազանգեր և նրա նյարդայնացնող ազդանշանը յուրաքանչյուր ամբողջ ժամը: Եթե ոչ, ապա նայեք `90 -ականների թվային ժամացույց:

Այսպիսով, հիմնականում դա կարգավորելի ժամացույց է ՝ տարբեր ռեժիմներով: Հիմնականում կցուցադրվի ընթացիկ ժամանակը, բայց կան որոշ այլ հնարավորություններ: Որպես մուտք, դուք ունեք միացման/անջատման, ռեժիմի և կարգաբերման կոճակ: Բացի այդ, դուք կարող եք միացնել և անջատել լույսը: Ռեժիմի կոճակով դուք կարող եք տարբերակել ռեժիմները և ակտիվացնել/անջատել ժամացույցի գործառույթները.

  • Displayուցադրել ժամանակը (ժամացույց)
  • Displayուցադրել ամսաթիվը (ամսաթիվը)
  • Տեղադրեք զարթուցիչը (rmարթուցիչ 1, rmարթուցիչ 2)
  • Միացնել/անջատել ազդանշանը (սահմանել զանգը)
  • Օգտագործեք վայրկյանաչափ (Stop Watch)

Theաշացանկում ռեժիմը կազմաձևելու համար կարող եք օգտագործել միացման/անջատման կոճակը: Սահմանված կոճակը թույլ է տալիս սահմանել ժամանակը `օր. ժամացույցի կամ ահազանգերի համար: Theամացույցի վայրկյանաչափը կարելի է կառավարել `սկսել և դադարեցնել` օգտագործելով լույսի միացման և անջատման կոճակը: Կարող եք նաև օգտագործել ինտեգրված գրկիչ հաշվիչ

Բացի այդ, կա զանգի ազդանշան, որը հնչում է ամեն մի ամբողջ ժամ, և վերահսկվող լուսավորություն `ինտեգրված: Առաջին քայլին ես դրանք Arduino- ին միացրեցի:

Քայլ 2: Պետական մեքենա

LCD ստեղնաշարի վահան
LCD ստեղնաշարի վահան

Այս օրինակի բացատրության համար ես չեմ ուզում շատ մանրամասնել: Դա ոչ թե այն պատճառով, որ չափազանց բարդ է, այլ մի փոքր չափազանց մեծ է: Ես կփորձեմ բացատրել այն հիմնական գաղափարը, թե ինչպես է այն աշխատում: Կատարումը պետք է ինքնուրույն բացատրվի `նայելով մոդելին կամ ներբեռնեք և մոդելավորեք այն: Պետական մեքենայի որոշ մասեր ամփոփվում են ենթաշրջաններում, ինչպես սահմանված ժամանակաշրջանը: Սրանով պետք է ապահովվի պետական մեքենայի ընթերցելիությունը:

Մոդելը բաժանված է երկու մասի `գրաֆիկական և տեքստային: Տեքստային մասում կսահմանվեն իրադարձությունները, փոփոխականները և այլն: Գրաֆիկական մասում `պետական դիագրամ, նշվում է մոդելի տրամաբանական կատարումը: Պետական մեքենա ստեղծելու համար, որը կատարում է նշված վարքագիծը, անհրաժեշտ են որոշ մուտքային իրադարձություններ, որոնք կարող են օգտագործվել մոդելում ՝ անջատում, կարգավորում, ռեժիմ, լույս և լուս_ռ: Սահմանման բաժնում օգտագործվում է ներքին իրադարձություն, որն ավելացնում է ժամանակի արժեքը յուրաքանչյուր 100 ms- ի համար.

յուրաքանչյուր 100 ms / ժամանակ += 1

100 ms քայլերի հիման վրա ընթացիկ ժամանակը կհաշվարկվի HH: MM: SS ձևաչափով.

display.first = (ժամանակ / 36000) % 24;

display.second = (ժամանակ / 600) % 60; ցուցադրում. երրորդ = (ժամանակ / 10) % 60;

Արժեքները կհամալրվեն LCD էկրանին ՝ օգտագործելով updateLCD գործողությունը, ամեն անգամ, երբ պետական մեքենան կկոչվի.

display.updateLCD (display.first, display.second, display.third, display.text)

Պետական մեքենայի հիմնական կատարումն արդեն սահմանված է «Ինչպես է աշխատում թվային ժամացույցը» բաժնում: Գործիքի շրջանակում ես օգտագործել եմ որոշ «հատուկ» մոդելավորման տարրեր, ինչպիսիք են CompositeState- ը, History- ը, Sub-Diagrams- ը, ExitNodes- ը և այլն: Մանրամասն նկարագրությունը կարելի է գտնել Օգտագործողի ուղեցույցում:

Քայլ 3: LCD ստեղնաշարի վահան

LCD ստեղնաշարի վահանը բավականին հիանալի է պարզ նախագծերի համար, որոնք պահանջում են էկրան ՝ վիզուալիզացիայի համար և որոշ կոճակներ ՝ որպես մուտքագրում ՝ տիպիկ, պարզ HMI (Մարդկային մեքենայի միջերես): LCD ստեղնաշարի վահանը պարունակում է օգտվողի հինգ կոճակ և ևս մեկը `վերակայման համար: Հինգ կոճակները բոլորը միասին միացված են Arduino- ի A0 կապին: Նրանցից յուրաքանչյուրը միացված է լարման բաժանարարին, ինչը թույլ է տալիս տարբերակել կոճակները:

Դուք կարող եք օգտագործել analogRead (0) ՝ հատուկ արժեքները գտնելու համար, որոնք, իհարկե, կարող են տարբերվել արտադրողի կողմից: Այս պարզ նախագիծը ցուցադրում է LCD- ի ընթացիկ արժեքը.

#ներառել «Arduino.h»

#ներառել «LiquidCrystal.h» LiquidCrystal LCD (8, 9, 4, 5, 6, 7); void setup () {lcd.begin (16, 2); lcd.setCursor (0, 0); lcd.write («Չափված արժեք»); } void loop () {lcd.setCursor (0, 1); lcd.print (""); lcd.setCursor (0, 1); lcd.print (analogRead (0)); ուշացում (200); }

Ահա իմ չափված արդյունքները.

  • Ոչ մեկը ՝ 1023
  • Ընտրեք `640
  • Ձախ: 411
  • Ներքև ՝ 257
  • Մինչև 100
  • Աջ: 0

Այս շեմերով հնարավոր է կարդալ կոճակները.

#սահմանել ՈՉ ՄԻ 0 #սահմանել ԸՆՏՐԵԼ 1 #սահմանել ՁԱՅՆ 2 #սահմանել ԻՆՔՆ 3 #սահմանել ՄԻՆՉ 4 #սահմանել IGHԻՇՏ 5 static int readButton () {int result = 0; արդյունք = analogRead (0); եթե (արդյունք <50) {վերադարձ ԱIGHԻՆ; } if (արդյունք <150) {վերադարձնել վեր; } if (արդյունք <300) {վերադարձ ներքև; } if (արդյունք <550) {return LEFT; } if (արդյունք <850) {վերադարձ SELECT; } վերադարձնել NONE; }

Քայլ 4. Պետական մեքենայի միացում

Պետական մեքենայի միացում
Պետական մեքենայի միացում

Պետական մեքենայի գեներացված C ++ կոդը ապահովում է ինտերֆեյսեր, որոնք պետք է իրականացվեն պետական մեքենան վերահսկելու համար: Առաջին քայլը իրադարձությունները իրադարձությունների ստեղնաշարի վահանի հետ կապելն է: Ես արդեն ցույց եմ տվել, թե ինչպես կարդալ կոճակները, բայց դրանք պետական մեքենային միացնելու համար անհրաժեշտ է կոճակները հանել, այլապես իրադարձությունները բազմիցս կբարձրանան, ինչը կհանգեցնի անկանխատեսելի վարքագծի: Softwareրագրային ապահովման ապամոնտաժման հայեցակարգը նոր չէ: Դուք կարող եք ծանոթանալ Arduino փաստաթղթերին:

Իմ իրականացման ընթացքում ես հայտնաբերում եմ ընկնող եզր (բաց թողնելով կոճակը): Ես կարդում եմ կոճակի արժեքը, սպասում եմ 80 ms (ավելի լավ արդյունքներ եմ ստացել 80 -ի փոխարեն 50 -ի փոխարեն), պահում եմ արդյունքը և կարդում նոր արժեքը: Եթե հին արդյունքը ՈՉԻՆՉ էր (չճնշված), իսկ նոր արդյունքը ՝ ՈՉԻՆՉ, ես գիտեմ, որ կոճակը սեղմված էր նախկինում և այժմ ազատ է արձակվել: Այնուհետև ես բարձրացնում եմ պետական մեքենայի համապատասխան մուտքային իրադարձությունը:

int oldState = ՈՉ ՄԻ; static void raiseEvents () {int buttonPressed = readButton (); ուշացում (80); oldState = buttonPressed; if (oldState! = NONE && readButton () == NONE) {switch (oldState) {case SELECT: {stateMachine-> getSCI_Button ()-> raise_mode (); ընդմիջում; } դեպք ՁԱՅՆ ՝ {stateMachine-> getSCI_Button ()-> raise_set (); ընդմիջում; } գործ ներքև ՝ {stateMachine-> getSCI_Button ()-> բարձրացնել_լույս (); ընդմիջում; } գործ UP: {stateMachine-> getSCI_Button ()-> raise_light_r (); ընդմիջում; } դեպք IGHԻՇՏ. {stateMachine-> getSCI_Button ()-> raise_onoff (); ընդմիջում; } կանխադրված ՝ {ընդմիջում; }}}}

Քայլ 5: Միացրեք իրերը միասին

Հիմնական ծրագիրը ներառում է երեք մաս.

  • Պետական մեքենա
  • Timամաչափ
  • A Display Handler (տիպիկ lcd.print (…))

DigitalWatch* stateMachine = նոր DigitalWatch (); CPPTimerInterface* timer_sct = նոր CPPTimerInterface (); DisplayHandler* displayHandler = նոր DisplayHandler ();

Պետական մեքենան օգտագործում է ցուցադրման կարգավորիչ և ստացել ժամանակաչափ, որը կթարմացվի ժամանակավոր իրադարձությունները վերահսկելու համար: Դրանից հետո պետական մեքենան նախաստորագրվում և մուտքագրվում է:

void setup () {stateMachine-> setSCI_Display_OCB (displayHandler); stateMachine-> setTimer (timer_sct); stateMachine-> init (); stateMachine-> մուտքագրել (); }Օղակը կատարում է երեք բան.

  • Բարձրացրեք մուտքային իրադարձությունները
  • Հաշվարկեք անցած ժամանակը և թարմացրեք ժամաչափը
  • Callանգահարեք պետական մեքենա

երկար ընթացիկ ժամանակ = 0; երկար վերջին_հեծանիվ = 0; void loop () {raiseEvents (); last_cycle_time = ընթացիկ_ժամանակ; current_time = millis (); timer_sct-> updateActiveTimer (stateMachine, current_time - last_cycle_time); stateMachine-> runCycle (); }

Քայլ 6: Ստացեք օրինակը

Վերջ: Հավանաբար, ես չեմ նշել կատարման յուրաքանչյուր մանրամասնություն, բայց դուք կարող եք նայել օրինակին կամ թողնել մեկնաբանություն:

Օրինակ ավելացրեք ընթացիկ IDE- ի հետ ՝ Ֆայլ -> Նոր -> Օրինակ -> YAKINDU Statechart Օրինակներ -> Հաջորդ -> Arduino -Թվային ժամացույց (C ++)

> IDE- ն կարող եք ներբեռնել այստեղից <<

Դուք կարող եք սկսել 30 օր փորձաշրջանով: Դրանից հետո դուք պետք է լիցենզիա ստանաք, որն անվճար է ոչ առևտրային օգտագործման համար:

Խորհուրդ ենք տալիս: