Բովանդակություն:
- Պարագաներ
- Քայլ 1. Ինչպես է աշխատում թվային ժամացույցը
- Քայլ 2: Պետական մեքենա
- Քայլ 3: LCD ստեղնաշարի վահան
- Քայլ 4. Պետական մեքենայի միացում
- Քայլ 5: Միացրեք իրերը միասին
- Քայլ 6: Ստացեք օրինակը
Video: Թվային ժամացույց Arduino- ում `օգտագործելով վերջնական վիճակի մեքենա. 6 քայլ
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:47
Բարև ձեզ, ես ձեզ ցույց կտամ, թե ինչպես կարելի է թվային ժամացույց ստեղծել YAKINDU Statechart Tools- ի միջոցով և աշխատել Arduino- ի վրա, որն օգտագործում է LCD ստեղնաշարի վահան:
Թվային ժամացույցի օրիգինալ մոդելը վերցված է Դեյվիդ Հարելից: Նա հրապարակել է թերթ ՝
«[…] Պետական մեքենաների և պետական գծապատկերների պայմանական ֆորմալիզմի լայն ընդլայնում»:
Այս հոդվածում նա հետազոտության համար օգտագործեց թվային ժամացույցի օրինակը: Ես այն օգտագործել եմ որպես ոգեշնչում և վերակառուցել եմ ժամացույցը YAKINDU Statechart Tools- ով (պետական մեքենաների գրաֆիկական մոդելներ ստեղծելու և դրանով C/C ++ ծածկագիր ստեղծելու գործիք) և այն վերակենդանացրել եմ Arduino- ով:
Պարագաներ
Սարքավորումներ:
- Arduino Uno կամ Mega
- LCD ստեղնաշարի վահան
Softwareրագրային ապահովում:
- YAKINDU Statechart գործիքներ
- Eclipse C ++ IDE Arduino- ի համար
Քայլ 1. Ինչպես է աշխատում թվային ժամացույցը
Սկսենք ՝ սահմանելով, թե ինչպես պետք է աշխատի թվային ժամացույցը: Հիշու՞մ եք այս… ասենք… «ծայրահեղ» թվային ժամացույցները, որոնք բոլորն ունեին դեռ 90 -ականներին: Ինտեգրված վայրկյանաչափ, տարբեր ահազանգեր և նրա նյարդայնացնող ազդանշանը յուրաքանչյուր ամբողջ ժամը: Եթե ոչ, ապա նայեք `90 -ականների թվային ժամացույց:
Այսպիսով, հիմնականում դա կարգավորելի ժամացույց է ՝ տարբեր ռեժիմներով: Հիմնականում կցուցադրվի ընթացիկ ժամանակը, բայց կան որոշ այլ հնարավորություններ: Որպես մուտք, դուք ունեք միացման/անջատման, ռեժիմի և կարգաբերման կոճակ: Բացի այդ, դուք կարող եք միացնել և անջատել լույսը: Ռեժիմի կոճակով դուք կարող եք տարբերակել ռեժիմները և ակտիվացնել/անջատել ժամացույցի գործառույթները.
- Displayուցադրել ժամանակը (ժամացույց)
- Displayուցադրել ամսաթիվը (ամսաթիվը)
- Տեղադրեք զարթուցիչը (rmարթուցիչ 1, rmարթուցիչ 2)
- Միացնել/անջատել ազդանշանը (սահմանել զանգը)
- Օգտագործեք վայրկյանաչափ (Stop Watch)
Theաշացանկում ռեժիմը կազմաձևելու համար կարող եք օգտագործել միացման/անջատման կոճակը: Սահմանված կոճակը թույլ է տալիս սահմանել ժամանակը `օր. ժամացույցի կամ ահազանգերի համար: Theամացույցի վայրկյանաչափը կարելի է կառավարել `սկսել և դադարեցնել` օգտագործելով լույսի միացման և անջատման կոճակը: Կարող եք նաև օգտագործել ինտեգրված գրկիչ հաշվիչ
Բացի այդ, կա զանգի ազդանշան, որը հնչում է ամեն մի ամբողջ ժամ, և վերահսկվող լուսավորություն `ինտեգրված: Առաջին քայլին ես դրանք Arduino- ին միացրեցի:
Քայլ 2: Պետական մեքենա
Այս օրինակի բացատրության համար ես չեմ ուզում շատ մանրամասնել: Դա ոչ թե այն պատճառով, որ չափազանց բարդ է, այլ մի փոքր չափազանց մեծ է: Ես կփորձեմ բացատրել այն հիմնական գաղափարը, թե ինչպես է այն աշխատում: Կատարումը պետք է ինքնուրույն բացատրվի `նայելով մոդելին կամ ներբեռնեք և մոդելավորեք այն: Պետական մեքենայի որոշ մասեր ամփոփվում են ենթաշրջաններում, ինչպես սահմանված ժամանակաշրջանը: Սրանով պետք է ապահովվի պետական մեքենայի ընթերցելիությունը:
Մոդելը բաժանված է երկու մասի `գրաֆիկական և տեքստային: Տեքստային մասում կսահմանվեն իրադարձությունները, փոփոխականները և այլն: Գրաֆիկական մասում `պետական դիագրամ, նշվում է մոդելի տրամաբանական կատարումը: Պետական մեքենա ստեղծելու համար, որը կատարում է նշված վարքագիծը, անհրաժեշտ են որոշ մուտքային իրադարձություններ, որոնք կարող են օգտագործվել մոդելում ՝ անջատում, կարգավորում, ռեժիմ, լույս և լուս_ռ: Սահմանման բաժնում օգտագործվում է ներքին իրադարձություն, որն ավելացնում է ժամանակի արժեքը յուրաքանչյուր 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 օր փորձաշրջանով: Դրանից հետո դուք պետք է լիցենզիա ստանաք, որն անվճար է ոչ առևտրային օգտագործման համար:
Խորհուրդ ենք տալիս:
Ինչպես պատրաստել անալոգային ժամացույց և թվային ժամացույց Led Strip- ով `օգտագործելով Arduino: 3 քայլ
Ինչպես պատրաստել անալոգային ժամացույց և թվային ժամացույց Led Strip- ով Arduino- ի միջոցով. Այսօր մենք պատրաստելու ենք անալոգային ժամացույց & Թվային ժամացույց Led Strip- ով և MAX7219 Dot մոդուլով Arduino- ով: willամանակը կուղղի տեղական ժամային գոտու հետ: Անալոգային ժամացույցը կարող է օգտագործել ավելի երկար LED ժապավեն, այնպես որ այն կարող է կախվել պատից ՝ արվեստի գործ դառնալու համար
Arduino թվային ժամացույց ՝ օգտագործելով DS1302: 4 քայլ
Arduino թվային ժամացույց ՝ օգտագործելով DS1302: Ներածություն Բարև տղերք, հուսով եմ, որ բոլորդ հիանալի եք: Սա լինելու է կարճ և պարզ նախագիծ այն մասին, թե ինչպես կարելի է թվային ժամացույց պատրաստել Arduino- ի միջոցով: Այս նախագծում մենք պատրաստելու ենք թվային ժամացույց Arduino- ի և հերթափոխի գրանցամատյանի միջոցով: Այս
Rանկացած մեքենա/մեքենա դարձնել Bluetooth հավելվածի վերահսկման մեքենա ՝ 9 քայլ
Rանկացած R/C մեքենա վերածել Bluetooth ծրագրի կառավարման R/C մեքենայի. Այս նախագիծը ցույց է տալիս սովորական հեռակառավարման մեքենան Bluetooth (BLE) կառավարման մեքենայի Wombatics SAM01 ռոբոտաշինական տախտակով, Blynk App- ով և MIT App Inventor- ով փոխելու քայլերը: շատ ցածր գնով RC մեքենաներ են `բազմաթիվ հնարավորություններով, ինչպիսիք են LED լուսարձակները և
Վերջնական վիճակի մեքենա MSP430- ի վրա. 6 քայլ
Վերջնական վիճակի մեքենա MSP430- ի վրա. Ես ձեզ ցույց կտամ, թե ինչպես ծրագրավորել MSP430G2 գործարկման սկավառակը վերջնական վիճակի մեքենաներով (FSM) ՝ օգտագործելով YAKINDU Statechart Tools- ը անմիջապես Texas Instruments Code Composer Studio- ում: Այս ձեռնարկը պարունակում է վեց քայլ. YAKINDU Statechart Tools- ի տեղադրում որպես
Պարզ թվային ժամացույց ՝ օգտագործելով Arduino Nano և DS1307: 4 քայլ
Պարզ թվային ժամացույց Arduino Nano & DS1307- ի միջոցով. Այս հոդվածում ես ձեզ ցույց կտամ Arduino- ի միջոցով թվային ժամացույց պատրաստելու ձեռնարկ: Arduino- ի տախտակը, որը ես օգտագործում եմ, Arduino Nano V3- ն է, DS1307- ը ՝ որպես ժամանակի տվյալների մատակարար, MAX7219 7 հատվածը `որպես դիտել ցուցադրումը: ձեռնարկը մտնելուց առաջ խորհուրդ եմ տալիս, որ