فهرست مطالب:
- تدارکات
- مرحله 1: نحوه عملکرد ساعت دیجیتال
- مرحله 2: ماشین دولتی
- مرحله 3: محافظ صفحه کلید LCD
- مرحله 4: ارتباط با دستگاه دولتی
- مرحله 5: سیم کشی کارها با هم
- مرحله 6: مثال را دریافت کنید
تصویری: ساعت دیجیتال در آردوینو با استفاده از ماشین حالت محدود: 6 مرحله
2024 نویسنده: John Day | [email protected]. آخرین اصلاح شده: 2024-01-30 08:54
سلام ، من به شما نشان می دهم که چگونه می توان یک ساعت دیجیتالی را با YAKINDU Statechart Tools ایجاد کرد و بر روی Arduino کار کرد ، که از یک صفحه نمایش صفحه کلید LCD استفاده می کند.
مدل اصلی ساعت دیجیتال از دیوید هارل گرفته شده است. او مقاله ای درباره
"[…] بسط گسترده فرمالیسم متعارف ماشین های حالت و نمودارهای حالت."
در این مقاله ، او از نمونه ساعت دیجیتال برای تحقیقات خود استفاده کرد. من از آن به عنوان الهام استفاده کرده و ساعت را با YAKINDU Statechart Tools (ابزاری برای ایجاد مدل های گرافیکی ماشین های حالت و تولید کد C/C ++ با آن) بازسازی کرده و با آردوینو به آن زندگی بخشیده ام.
تدارکات
سخت افزار:
- آردوینو اونو یا مگا
- محافظ صفحه کلید LCD
نرم افزار:
- ابزارهای YACINDU Statechart
- Eclipse C ++ IDE برای آردوینو
مرحله 1: نحوه عملکرد ساعت دیجیتال
بیایید با تعریف نحوه کار ساعت دیجیتال شروع کنیم. آیا اینها را به خاطر می آورید … بگذارید بگوییم … ساعتهای دیجیتالی "فوق العاده جالب" که همه در دهه 90 داشتند؟ کرونومتر یکپارچه ، آلارم های مختلف و بوق آزاردهنده آن در هر ساعت کامل. اگر نه ، نگاهی بیندازید: ساعت دیجیتال دهه 90.
بنابراین اساساً یک ساعت قابل تنظیم با حالت های مختلف است. به طور عمده ، زمان فعلی نمایش داده می شود ، اما برخی ویژگی های دیگر نیز وجود دارد. به عنوان ورودی ، دکمه روشن/خاموش ، حالت و دکمه تنظیم را دارید. علاوه بر این ، می توانید چراغ را خاموش و روشن کنید. با استفاده از دکمه حالت می توانید بین حالت ها تمایز قائل شوید و ویژگی های ساعت را فعال یا غیرفعال کنید:
- نمایش زمان (ساعت)
- نمایش تاریخ (تاریخ)
- تنظیم زنگ هشدار (زنگ هشدار 1 ، زنگ هشدار 2)
- فعال/غیرفعال کردن زنگ (تنظیم زنگ)
- استفاده از کرونومتر (Stop Watch)
در منوها ، می توانید از دکمه روشن/خاموش برای پیکربندی حالت استفاده کنید. دکمه تنظیم به شما امکان می دهد زمان را تنظیم کنید - به عنوان مثال برای ساعت یا زنگ ساعت با استفاده از دکمه روشن و خاموش کردن ، کرونومتر قابل کنترل - شروع و متوقف می شود. همچنین می توانید از دور شمارنده یکپارچه استفاده کنید
علاوه بر این ، یک زنگ وجود دارد که هر یک ساعت کامل زنگ می زند و یک نور پس زمینه قابل کنترل یکپارچه شده است. در اولین قدم ، آنها را به آردوینو وصل نکردم.
مرحله 2: ماشین دولتی
نمی خواهم برای توضیح این مثال به جزئیات زیادی بپردازم. این به این دلیل نیست که بسیار پیچیده است ، فقط کمی بزرگ است. من سعی می کنم ایده اصلی نحوه عملکرد آن را توضیح دهم. اجرای باید با نگاهی به مدل یا بارگیری و شبیه سازی آن برای خود توضیح داده شود. برخی از قسمتهای ماشین حالت در مناطق فرعی خلاصه می شوند ، مانند منطقه زمان تعیین شده. با این کار ، خوانایی دستگاه دولتی باید تضمین شود.
مدل به دو بخش گرافیکی و متنی تقسیم شده است. در قسمت متنی ، رویدادها ، متغیرها و غیره تعریف خواهند شد. در قسمت گرافیکی - نمودار حالت - اجرای منطقی مدل مشخص شده است. برای ایجاد یک ماشین حالت ، که رفتار مشخص شده را برآورده می کند ، برخی از رویدادهای ورودی مورد نیاز است که می تواند در مدل مورد استفاده قرار گیرد: onoff ، set ، mode ، light و light_r. در بخش تعریف ، از یک رویداد داخلی استفاده می شود که هر 100 میلی ثانیه مقدار زمان را افزایش می دهد:
هر 100 میلی ثانیه / زمان += 1
بر اساس مراحل 100 میلی ثانیه ، زمان فعلی در قالب HH: MM: SS محاسبه می شود:
display.first = (زمان / 36000)٪ 24 ؛
display.second = (time / 600)٪ 60؛ display.third = (time / 10)٪ 60؛
هر بار که دستگاه حالت نامیده می شود ، مقادیر با استفاده از updateLCD به صفحه LCD متصل می شوند:
display.updateLCD (display.first ، display.second ، display.third ، display.text)
اجرای اصلی ماشین حالت در بخش نحوه کار ساعت دیجیتال مشخص شده است. در داخل ابزار من از برخی المان های مدل سازی "ویژه" مانند CompositeState ، History ، Sub-Diagrams ، ExitNodes و غیره استفاده کرده ام. توضیحات مفصل در راهنمای کاربر یافت می شود.
مرحله 3: محافظ صفحه کلید LCD
محافظ صفحه کلید LCD برای پروژه های ساده که نیاز به یک صفحه نمایش برای تجسم و برخی دکمه ها به عنوان ورودی دارند - یک HMI معمولی و ساده (رابط کاربری ماشین انسان) بسیار مناسب است. محافظ صفحه کلید LCD شامل پنج دکمه کاربر و یکی دیگر برای تنظیم مجدد است. پنج دکمه همه با هم به پین 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 #تعریف UP 4 #تعریف RIGHT 5 static int readButton () {int result = 0؛ result = analogRead (0)؛ if (نتیجه <50) {return RIGHT؛ } if (نتیجه <150) {return UP؛ } if (نتیجه <300) {return DOWN؛ } if (نتیجه <550) {return LEFT؛ } if (نتیجه <850) {return SELECT؛ } بازگشت هیچ }
مرحله 4: ارتباط با دستگاه دولتی
کد تولید شده C ++ ماشین حالت رابط هایی را فراهم می کند که برای کنترل ماشین حالت باید اجرا شوند. اولین قدم اتصال رویدادها با کلیدهای Keypad Shield است. من قبلاً نحوه خواندن دکمه ها را نشان دادم ، اما برای اتصال آنها به دستگاه حالت ، حذف دکمه ها لازم است - در غیر این صورت ، رویدادها چندین بار مطرح می شوند ، که منجر به رفتارهای غیرقابل پیش بینی می شود. مفهوم حذف نرم افزار جدید نیست. می توانید به مستندات آردوینو نگاهی بیندازید.
در اجرای خود ، من یک لبه در حال سقوط (رها کردن دکمه) را تشخیص می دهم. مقدار دکمه را می خوانم ، 80 میلی ثانیه صبر می کنم (با 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 ()؛ زنگ تفريح؛ } case LEFT: {stateMachine-> getSCI_Button ()-> raise_set ()؛ زنگ تفريح؛ } case DOWN: {stateMachine-> getSCI_Button ()-> raise_light ()؛ زنگ تفريح؛ } case UP: {stateMachine-> getSCI_Button ()-> raise_light_r ()؛ زنگ تفريح؛ } case RIGHT: {stateMachine-> getSCI_Button ()-> raise_onoff ()؛ زنگ تفريح؛ } پیش فرض: {break؛ }}}}
مرحله 5: سیم کشی کارها با هم
برنامه اصلی از سه بخش استفاده می کند:
- ماشین دولتی
- یک تایمر
- Handler Display (ال سی دی چاپ معمولی (…))
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 () {raiseEvents ()؛ last_cycle_time = زمان فعلی؛ current_time = millis ()؛ timer_sct-> updateActiveTimer (stateMachine ، current_time - last_cycle_time) ؛ stateMachine-> runCycle ()؛ }
مرحله 6: مثال را دریافت کنید
خودشه. احتمالاً ، من تمام جزئیات پیاده سازی را ذکر نکرده ام ، اما می توانید به مثال نگاه کنید یا نظر خود را بنویسید.
مثال را به یک IDE در حال اجرا اضافه کنید:
> شما می توانید IDE را از اینجا بارگیری کنید <<
می توانید با یک دوره آزمایشی 30 روزه شروع کنید. پس از آن ، باید مجوز دریافت کنید ، که برای استفاده غیر تجاری رایگان است!
توصیه شده:
با استفاده از سرو موتور ، هر ساعت یک ساعت را بچرخانید - آردوینو: 8 مرحله
چرخش سند ساعت در هر دقیقه با استفاده از سرو موتور - آردوینو: در این آموزش ما یاد می گیریم که چگونه یک ساعت ماسه ای کوچک (1 دقیقه ای) را در هر 60 ثانیه با استفاده از سرو موتور و Visuino بچرخانیم ، یک فیلم نمایشی تماشا کنید
نحوه ساخت ساعت آنالوگ و ساعت دیجیتال با نوار LED با استفاده از آردوینو: 3 مرحله
نحوه ساخت ساعت آنالوگ و ساعت دیجیتال با نوار LED با استفاده از آردوینو: امروز ما یک ساعت آنالوگ تولید می کنیم & amp؛ ساعت دیجیتال با Led Strip و ماژول MAX7219 Dot با آردوینو. زمان را با منطقه زمانی محلی تصحیح می کند. ساعت آنالوگ می تواند از نوار LED طولانی تری استفاده کند ، بنابراین می توان آن را به دیوار آویزان کرد تا به یک هنر تبدیل شود
ساعت دیجیتال آردوینو با استفاده از DS1302: 4 مرحله
ساعت دیجیتال آردوینو با استفاده از DS1302: مقدمه سلام بچه ها ، امیدوارم همه شما عالی باشید. این یک پروژه کوتاه و ساده در مورد نحوه ساخت یک ساعت دیجیتال با استفاده از آردوینو خواهد بود. در این پروژه ، ما می خواهیم یک ساعت دیجیتالی با کمک آردوینو و یک شیفت رجیستر بسازیم. این
ماشین حالت محدود در MSP430: 6 مرحله
ماشین حالت نهایی در MSP430: من به شما نشان می دهم که چگونه یک برنامه راه اندازی MSP430G2 را با ماشین های حالت محدود (FSM) با استفاده از YAKINDU Statechart Tools مستقیماً در استودیو Texas Instruments Code Composer برنامه ریزی کنید. این آموزش شامل شش مرحله است: نصب YAKINDU Statechart Tools به عنوان
آردوینو HMI با استفاده از ماشین های حالت: 9 مرحله
Arduino HMI با استفاده از ماشین های حالت: در این دستورالعمل ، من به شما نحوه استفاده از YAKINDU Statechart Tools برای دستیابی به یک HMI ساده و قابل توسعه را با استفاده از محافظ صفحه کلید LCD 16x2 برای Arduino نشان می دهم. ماشینهای حالت نهایی (FSM) یک الگوی طراحی قدرتمند برای توسعه هستند ماشین انسان پیچیده