Агуулгын хүснэгт:
- Хангамж
- Алхам 1: Дижитал цаг хэрхэн ажилладаг талаар
- Алхам 2: Төрийн машин
- Алхам 3: LCD товчлуурын бамбай
- Алхам 4: Төрийн машинтай харилцах
- Алхам 5: Аливаа зүйлийг хамтдаа холбох
- Алхам 6: Жишээ авах
Видео: Эцсийн төлөвт машиныг ашиглан Arduino дээрх дижитал цаг: 6 алхам
2024 Зохиолч: John Day | [email protected]. Хамгийн сүүлд өөрчлөгдсөн: 2024-01-30 11:02
Сайн байна уу, би танд YAKINDU Statechart Tools ашиглан дижитал цаг бүтээж, LCD товчлуурын бамбай ашигладаг Arduino дээр хэрхэн ажиллахыг харуулах болно.
Дижитал цагны анхны загварыг Дэвид Харелээс авсан болно. Тэрээр энэ тухай нийтлэл нийтэлжээ
"[…] төлөв байдлын машин ба төлөв байдлын уламжлалт формализмыг өргөтгөх."
Энэхүү нийтлэлдээ тэрээр судалгаандаа дижитал цагны жишээг ашигласан болно. Би үүнийг урам зориг болгон ашиглаж, цагийг YAKINDU Statechart Tools (төрийн машинуудын график загварыг бүтээх, түүнтэй хамт C/C ++ код үүсгэх хэрэгсэл) ашиглан дахин бүтээж, Arduino дээр дахин амьдруулсан.
Хангамж
Техник хангамж:
- Arduino Uno эсвэл Mega
- LCD товчлуурын бамбай
Програм хангамж:
- YAKINDU Statechart хэрэгсэл
- Arduino -д зориулсан Eclipse C ++ IDE
Алхам 1: Дижитал цаг хэрхэн ажилладаг талаар
Дижитал цаг хэрхэн ажиллах ёстойг тодорхойлж эхэлье. 90 -ээд оны үед хүн бүхэнд байсан "хэт дажгүй" дижитал цагийг та санаж байна уу? Нэгдсэн секундомер, өөр өөр дохиолол, бүтэн цаг тутамд залхаах дохио. Хэрэв үгүй бол 90 -ээд оны дижитал цагийг үзээрэй.
Үндсэндээ энэ бол янз бүрийн горимтой, тохируулж болох цаг юм. Үндсэндээ одоогийн цагийг харуулах боловч бусад онцлог шинж чанарууд байдаг. Оролтын хувьд танд асаах/унтраах, горим, тохируулах товчлуур байна. Үүнээс гадна та гэрлийг асааж, унтрааж болно. Горимын товчлуурын тусламжтайгаар та горимыг ялгаж, цагийн онцлогийг идэвхжүүлэх/идэвхгүй болгох боломжтой.
- Цагийг харуулах (Цаг)
- Огноог харуулах (Огноо)
- Сэрүүлгийг тохируулах (Сэрүүлэг 1, Сэрүүлэг 2)
- Хонхыг идэвхжүүлэх/идэвхгүй болгох (Хонхыг тохируулах)
- Секундомер ашиглах (Stop Watch)
Цэс дотор та горимыг тохируулахын тулд асаах/унтраах товчийг ашиглаж болно. Set товчлуур нь танд цагийг тохируулах боломжийг олгодог. цаг эсвэл сэрүүлгийн хувьд. Секундомерыг асаах, унтраах товчлуурыг ашиглан асааж, зогсоож болно. Та мөн нэгдсэн тойрог ашиглаж болно
Цаашилбал, бүтэн цаг тутамд хонх дардаг, хянаж болдог арын гэрэлтүүлэг байдаг. Эхний алхам дээр би тэднийг Arduino руу холбосонгүй.
Алхам 2: Төрийн машин
Энэ жишээг тайлбарлахын тулд би нарийвчлан судлахыг хүсэхгүй байна. Энэ нь хэтэрхий төвөгтэй учраас биш, жаахан хэтэрхий том юм. Энэ нь хэрхэн ажилладаг талаархи үндсэн санааг тайлбарлахыг хичээх болно. Гүйцэтгэл нь загварыг үзэх, татаж авах, загварчлах замаар өөрийгөө тайлбарлах ёстой. Төрийн машины зарим хэсгийг тогтоосон цагийн бүс шиг дэд бүсэд нэгтгэн харуулав. Үүний тусламжтайгаар төрийн машины унших чадварыг хангах ёстой.
Энэхүү загварыг график болон текст гэсэн хоёр хэсэгт хуваажээ. Текст хэсэгт үйл явдал, хувьсагч гэх мэтийг тодорхойлох болно. График хэсэгт - төлөв байдлын диаграм - загварын логик гүйцэтгэлийг зааж өгсөн болно. Тодорхойлсон зан төлөвт нийцсэн төлөв байдлын машиныг бий болгохын тулд загварыг ашиглах боломжтой оролтын зарим үйл явдал шаардлагатай: унтраах, тохируулах, горим, гэрэл, гэрэл_r. Тодорхойлолт хэсэгт 100 ms тутамд цаг хугацааны утгыг нэмэгдүүлдэг дотоод үйл явдлыг ашигладаг.
100 мс / цаг тутамд += 1
100 ms алхам дээр үндэслэн одоогийн цагийг HH: MM: SS форматаар тооцоолно.
display.first = (цаг / 36000) % 24;
display.second = (цаг / 600) % 60; display.third = (цаг / 10) % 60;
Төлөвлөсөн машиныг дуудах бүртээ updateLCD үйлдлийг ашиглан утгыг LCD дэлгэц рүү холбоно.
display.updateLCD (дэлгэц, эхний, дэлгэц, секунд, дэлгэц, гурав дахь, дэлгэцийн текст)
Төрийн машины үндсэн гүйцэтгэлийг дижитал цаг хэрхэн ажилладаг хэсэгт аль хэдийн тодорхойлсон болно. Энэ хэрэгсэлд би 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
Эдгээр босгуудын тусламжтайгаар товчлууруудыг унших боломжтой:
#define NONE 0 #тодорхойлох SELECT 1 #define LEFT 2 #DOWNE3 тодорхойлох #UP 4 тодорхойлох #ЗӨВ 5 static int readButton () {int result = 0; үр дүн = analogRead (0); if (үр дүн <50) {ЗӨВ буцах; } if (үр дүн <150) {буцах UP; } if (үр дүн <300) {буцах DOWN; } if (үр дүн <550) {LEFT буцах; } if (үр дүн <850) {буцах SELECT; } буцах NONE; }
Алхам 4: Төрийн машинтай харилцах
Мужийн машины үүсгэсэн C ++ код нь интерфейсийг хангадаг бөгөөд үүнийг төрийн машиныг хянахын тулд хэрэгжүүлэх ёстой. Эхний алхам бол үйл явдлыг Keypad Shield товчлууруудтай холбох явдал юм. Би товчлууруудыг хэрхэн уншихыг аль хэдийн харуулсан, гэхдээ тэдгээрийг төрийн машинд холбохын тулд товчлууруудыг тайлах шаардлагатай байдаг, эс тэгвээс үйл явдлуудыг олон удаа давтаж, урьдчилан таамаглах аргагүй байдалд хүргэдэг. Програм хангамжийн дебютингийн тухай ойлголт шинэ зүйл биш юм. Та Arduino -ийн баримт бичгийг үзэх боломжтой.
Хэрэгжүүлэх явцад би унаж буй ирмэгийг олж мэдэв (товчлуурыг суллах). Би товчлуурын утгыг уншиж, 80 ms -ийг хүлээ (50 -ийн оронд 80 -аар илүү сайн үр дүнд хүрсэн), үр дүнг хадгалаад шинэ утгыг уншина уу. Хэрэв oldResult нь NONE биш (дарагдаагүй) биш бөгөөд шинэ үр дүн нь NONE бол товчлуурыг өмнө нь дарж байсан бөгөөд одоо суллагдсан гэдгийг би мэднэ. Дараа нь би төрийн машины оролтын үйл явдлыг нэмэгдүүлдэг.
int oldState = NONE; static void boostEvents () {int buttonPressed = readButton (); саатал (80); oldState = товчлуур дарагдсан; if (oldState! = NONE && readButton () == NONE) {switch (oldState) {case SELECT: {stateMachine-> getSCI_Button ()-> boost_mode (); завсарлага; } тохиолдолд Зүүн: {stateMachine-> getSCI_Button ()-> boost_set (); завсарлага; } тохиолдолд ДОО: {stateMachine-> getSCI_Button ()-> boost_light (); завсарлага; } тохиолдолд UP: {stateMachine-> getSCI_Button ()-> boost_light_r (); завсарлага; } тохиолдолд ЗӨВ: {stateMachine-> getSCI_Button ()-> boost_onoff (); завсарлага; } анхдагч: {завсарлага; }}}}
Алхам 5: Аливаа зүйлийг хамтдаа холбох
Үндсэн програм нь гурван хэсгийг ашигладаг:
- Төрийн машин
- Таймер
- Дэлгэц зохицуулагч (ердийн 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-> enter (); }Цикл нь гурван зүйлийг хийдэг:
- Оруулах үйл явдлыг нэмэгдүүлэх
- Өнгөрсөн хугацааг тооцоолж, таймерыг шинэчилнэ үү
- Төрийн машин руу залгаарай
урт одоогийн_хугацаа = 0; урт сүүлийн_цикл_хугацаа = 0; void loop () {boostEvents (); 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 хоногийн туршилтаар эхлүүлж болно. Үүний дараа та арилжааны бус зорилгоор ашиглах үнэгүй лиценз авах ёстой.
Зөвлөмж болгож буй:
ESP8266 ашиглан сүлжээний цаг дижитал цаг: 4 алхам (зурагтай)
ESP8266 ашиглан сүлжээний цагийн дижитал цаг: Бид NTP серверүүдтэй холбогддог, сүлжээ эсвэл интернетийн цагийг харуулдаг хөөрхөн бяцхан дижитал цаг бүтээх талаар суралцдаг. WeMos D1 mini -ийг ашиглан WiFi сүлжээнд холбогдож, NTP цагийг олж, OLED модуль дээр харуулна
Arduino UNO ба нэг суваг 5V хатуу төлөвт буухиа модулийг ашиглан чийдэнг хэрхэн хянах вэ: 3 алхам
Arduino UNO ба нэг суваг 5V хатуу төлөвт релей модулийг ашиглан чийдэнг хэрхэн хянах вэ: Тодорхойлолт: Уламжлалт механик релетэй харьцуулахад хатуу төлөвт буухиа (SSR) нь олон давуу талтай: удаан эдэлгээтэй, асаах нь илүү өндөр байдаг. унтраах хурд, дуу чимээ байхгүй. Нэмж дурдахад энэ нь чичиргээ, механик эсэргүүцлийг илүү сайн харуулдаг
Arduino IDE ашиглан M5stick C ашиглан цаг хийх - M5stack M5stick-C-тэй RTC бодит цагийн цаг: 4 алхам
Arduino IDE ашиглан M5stick C ашиглан цаг хийх | M5stack M5stick-C-тэй RTC бодит цагийн цаг: Сайн байна уу залуусаа, энэ зааварчилгаанд бид Arduino IDE ашиглан m5stack-ийн m5stick-C хөгжүүлэлтийн самбар ашиглан хэрхэн цаг хийхийг сурах болно. Тиймээс m5stick нь огноо, цаг, цагийг харуулах болно. дэлгэц дээр сарын долоо хоног
RPi цаг уурын станц ба дижитал цаг: 4 алхам (зурагтай)
RPi цаг уурын станц ба дижитал цаг: Энэ бол хурдан бөгөөд хялбар төсөл бөгөөд үзүүлэх сайхан дэлгэц юм. Энэ нь цаг хугацаа, цаг агаарын нөхцөл байдал, температурыг хоёуланг нь харуулдаг. Хэрэв танд харсан зүйл тань таалагдаж байвал миний хийсэн зүйлийг дагаж мөрдөхийн тулд намайг Instagram, Twitter (@Anders644PI) дээр дагаарай
Автомат алсын удирдлага асаах / унтраах нь камер дээрх MIC үүрийг ашиглах / бага хүчдэлийн хатуу төлөвт реле: 4 алхам (зурагтай)
Автомат алсын удирдлагаар асаах / унтраах нь камер дээрх MIC үүр / бага хүчдэлийн хатуу төлөвт реле: Тойм: Бид камерыг асаалттай үед илрүүлэхийн тулд камерын MIC үүрийг ашигласан. Бид MIC үүрийг илрүүлэх, камерын нэгэн зэрэг алсын төхөөрөмжийг автоматаар асаах, унтраах зорилгоор бага хүчдэлийн хатуу төлөвт реле бүтээсэн. Хатуу төлөв