Мазмұны:
- Жабдықтар
- 1 -қадам: Сандық сағат қалай жұмыс істейді
- 2 -қадам: Мемлекеттік машина
- 3 -қадам: СКД пернетақтасы
- 4 -қадам: Мемлекеттік машинаның интерфейсі
- 5 -қадам: заттарды бірге жалғау
- 6 -қадам: Мысалды алыңыз
Бейне: Ақырлы күй машинасын қолданатын Arduino сандық сағаты: 6 қадам
2024 Автор: John Day | [email protected]. Соңғы өзгертілген: 2024-01-30 10:24
Сәлеметсіз бе, мен сізге YAKINDU Statechart Tools көмегімен сандық сағатты қалай құруға болатынын және LCD пернетақтасы қалқанын қолданатын Arduino -да жұмыс істеуге болатынын көрсетемін.
Сандық сағаттардың түпнұсқалық үлгісі Дэвид Харелден алынды. Ол туралы мақала жариялады
«[…] Мемлекеттік машиналар мен күй диаграммаларының әдеттегі формализмінің кеңеюі.»
Бұл жұмыста ол өзінің зерттеулері үшін цифрлық сағат үлгісін қолданды. Мен оны шабыт ретінде қолдандым және сағатты YAKINDU Statechart Tools көмегімен қалпына келтірдім (мемлекеттік машиналардың графикалық модельдерін құруға және C/C ++ кодын құруға арналған құрал) және оны Arduino -да өмірге келтірдім.
Жабдықтар
Жабдық:
- Arduino Uno немесе Mega
- СКД пернетақтасы
Бағдарламалық қамтамасыз ету:
- YAKINDU Statechart құралдары
- Arduino үшін Eclipse C ++ IDE
1 -қадам: Сандық сағат қалай жұмыс істейді
Сандық сағаттардың қалай жұмыс істейтінін анықтаудан бастайық. Сіз есіңізде ме, айталық … 90 -шы жылдары барлығында болған «өте керемет» цифрлық сағаттар? Біріктірілген секундомер, әр түрлі дабылдар және оның тітіркендіргіш дыбысы әр сағат сайын. Егер жоқ болса, қараңыз: 90 -шы жылдардағы цифрлық сағат.
Негізінде бұл әр түрлі режимдегі конфигурацияланатын сағат. Негізінен, ағымдағы уақыт көрсетіледі, бірақ басқа да мүмкіндіктер бар. Енгізу ретінде сізде қосу/өшіру, режим және орнату түймесі бар. Сонымен қатар, сіз шамды қосуға және өшіруге болады. Режим түймесінің көмегімен сіз режимдерді ажырата аласыз және сағат мүмкіндіктерін қосуға/өшіруге болады:
- Уақытты көрсету (Сағат)
- Күнді көрсету (Күн)
- Дабылды орнатыңыз (Дабыл 1, Дабыл 2)
- Шыңдауды қосу/өшіру (Шыңдауды орнату)
- Секундомерді қолданыңыз (Stop Watch)
Мәзірлерде режимді конфигурациялау үшін қосу/өшіру түймесін пайдалануға болады. Орнату түймесі уақытты орнатуға мүмкіндік береді - мысалы. сағат немесе дабылдар үшін. Секундомерді жарықты қосу және өшіру түймесінің көмегімен басқаруға болады - қосылады және тоқтатылады. Сіз сондай -ақ кіріктірілген есептегішті пайдалана аласыз
Сонымен қатар, әр сағат сайын қоңырау шалатын қоңырау және басқарылатын артқы жарық бар. Бірінші қадамда мен оларды Arduino -ға қосқан жоқпын.
2 -қадам: Мемлекеттік машина
Мен бұл мысалды түсіндіру үшін егжей -тегжейлі барғым келмейді. Бұл тым күрделі болғандықтан емес, сәл үлкен. Мен оның қалай жұмыс істейтіні туралы негізгі идеяны түсіндіруге тырысамын. Модельді қарап шығу немесе оны жүктеу мен модельдеу арқылы орындау өзін-өзі түсіндіруі керек. Мемлекеттік машинаның кейбір бөліктері белгіленген уақыт аймағы сияқты қосалқы аймақтарда жинақталған. Бұл жағдайда мемлекеттік машинаның оқылуын қамтамасыз ету керек.
Модель екіге бөлінеді - графикалық және мәтіндік. Мәтіндік бөлімде оқиғалар, айнымалылар және т.б. анықталатын болады. Графикалық бөлімде - күй диаграммасы - модельдің логикалық орындалуы көрсетілген. Белгіленген әрекетті орындайтын күй машинасын құру үшін модельде қолдануға болатын кейбір енгізу оқиғалары қажет: қосу, орнату, режим, жарық және жарық_r. Анықтау бөлімінде әрбір 100 мс уақытты арттыратын ішкі оқиға қолданылады:
әр 100 мс / уақыт += 1
100 мс қадамға сүйене отырып, ағымдағы уақыт HH: MM: SS форматында есептеледі:
display.first = (уақыт / 36000) % 24;
display.second = (уақыт / 600) % 60; display.third = (уақыт / 10) % 60;
Мәндер СКД дисплейіне қосылу арқылы updateLCD операциялық режимін қолданады.
display.updateLCD (көрсету: бірінші, көрсету.екінші, көрсету.үшінші, көрсету.текст)
Мемлекеттік машинаның негізгі орындалуы Digital Watch қалай жұмыс істейді бөлімінде анықталған. Құралда мен CompositeState, History, Sub-Diagrams, ExitNodes және т.б сияқты кейбір «арнайы» модельдеу элементтерін қолдандым. Толық сипаттаманы Қолданушы нұсқаулығынан табуға болады.
3 -қадам: СКД пернетақтасы
СКД пернетақтасы экраны қарапайым жобалар үшін өте керемет, ол үшін визуалды экран мен кейбір түймелер енгізу қажет - әдеттегі, қарапайым HMI (адамдық машина интерфейсі). СКД пернетақтасы қалқанында бес пайдаланушы түймесі және қалпына келтіруге арналған тағы бір түйме бар. Бес түйме бірге Arduino A0 түйреуішіне қосылған. Олардың әрқайсысы түймелерді ажыратуға мүмкіндік беретін кернеу бөлгішке қосылған.
Нақты мәндерді табу үшін analogRead (0) көмегімен, әрине, өндірушіге қарай әр түрлі болуы мүмкін. Бұл қарапайым жоба СКД -да ағымдағы мәнді көрсетеді:
#«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
Осы шектерде түймелерді оқу мүмкін:
#анықтау NONE 0 #анықтау SELECT 1 #анықтау SOL 2 нәтиже = analogRead (0); if (нәтиже <50) {ОҢҒА қайту; } if (нәтиже <150) {қайтару UP; } if (нәтиже <300) {DOWN қайтару; } if (нәтиже <550) {LEFT қайтару; } if (нәтиже <850) {SELECT қайтару; } қайтару NONE; }
4 -қадам: Мемлекеттік машинаның интерфейсі
Мемлекеттік машинаның құрылған C ++ коды интерфейстерді қамтамасыз етеді, оларды мемлекеттік машинаны басқару үшін енгізу қажет. Бірінші қадам - оқиғаларды пернетақта экраны пернелерімен қосу. Мен батырмаларды қалай оқу керектігін көрсеткенмін, бірақ оларды мемлекеттік машинамен байланыстыру үшін түймелерді ажырату қажет - әйтпесе оқиғалар бірнеше рет көтеріледі, бұл күтпеген әрекетке әкеледі. Бағдарламалық жасақтаманың дебунгі туралы түсінік жаңа емес. Сіз Arduino құжаттамасын қарай аласыз.
Іске асыруда мен құлаған жиекті анықтаймын (түймені босату). Мен түйменің мәнін оқыдым, 80 мс күтемін (50 орнына 80мен жақсы нәтиже алдым), нәтижені сақтап, жаңа мәнді оқыдым. Егер oldResult NONE (қысылмаған) болмаса және жаңа нәтиже NONE болса, мен білемін, түйме бұрын басылған және қазір босатылған. Содан кейін мен мемлекеттік машинаның кіріс оқиғасын көтеремін.
int oldState = NONE; static void elevEvents () {int buttonPressed = readButton (); кешіктіру (80); oldState = түйме басылды; if (oldState! = NONE && readButton () == NONE) {switch (oldState) {case SELECT: {stateMachine-> getSCI_Button ()-> lift_mode (); үзіліс; } СОЛ ҚАЛДЫ: {stateMachine-> getSCI_Button ()-> boost_set (); үзіліс; } жағдай ТӨМЕН: {stateMachine-> getSCI_Button ()-> жоғарылату_лайт (); үзіліс; } жағдай ЖОҒАРЫ: {stateMachine-> getSCI_Button ()-> lift_light_r (); үзіліс; } жағдай ДҰРЫС: {stateMachine-> getSCI_Button ()-> жоғарылату_қайырылуы (); үзіліс; } әдепкі: {break; }}}}
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 = ағымдағы_уақыт; ағымдағы_уақыт = миллис (); timer_sct-> updateActiveTimer (stateMachine, current_time - last_cycle_time); stateMachine-> runCycle (); }
6 -қадам: Мысалды алыңыз
Міне бітті. Мүмкін, мен іске асырудың барлық егжей -тегжейін айтпадым, бірақ сіз мысалға қарап немесе пікір қалдыра аласыз.
Мысалды жұмыс істейтін IDE -ге қосыңыз: Файл -> Жаңа -> Мысал -> YAKINDU Statechart Мысалдары -> Келесі -> Arduino -Сандық сағат (C ++)
> Сіз IDE -ны мына жерден жүктей аласыз <<
Сіз 30 күндік сынақтан бастай аласыз. Осыдан кейін сіз лицензияны алуыңыз керек, ол коммерциялық емес мақсатта пайдалануға ақысыз!
Ұсынылған:
DS1302 қолданатын Arduino сандық сағаты: 4 қадам
DS1302 көмегімен Arduino цифрлық сағаты: Кіріспе Сәлеметсіздер ме, балалар, бәрің жақсы жұмыс жасайсыңдар деп сенемін. Бұл Arduino көмегімен цифрлық сағатты қалай жасауға болатыны туралы қысқаша және қарапайым жоба болады. Бұл жобада біз Arduino мен ауысым регистрінің көмегімен цифрлық сағатты жасайтын боламыз. Бұл
Arduino Nano & DS1307 қолданатын қарапайым сандық сағат: 4 қадам
Arduino Nano & DS1307 қолданатын қарапайым сандық сағат: Бұл мақалада мен сізге Arduino көмегімен цифрлық сағатты құруға арналған оқулықты көрсетемін. Мен қолданатын Arduino тақтасы - Arduino Nano V3, DS1307 - уақытты жеткізуші, MAX7219 7 сегменті. Оқу құралына кірмес бұрын мен мынаны ұсынамын
DIY сандық сағаты: 3 қадам
DIY сандық сағаты: сағатсыз бөлмеде уақытты айтудың әдісін іздеп жүрсіз бе, әлде электрониканың қарапайым, қызықты жобасы? Бұдан әрі бармаңыз
Қайта өңделген материалды қолданатын «қарапайым» Digilog сағаты (сандық аналог)!: 8 қадам (суреттермен)
Қайта өңделген материалды қолданатын «қарапайым» Digilog сағаты (сандық аналог)!: Барлығына сәлем! Сонымен, осы нұсқаулықта мен арзан материалды қолдана отырып, осы Digital + аналогтық сағатты қалай жасау керектігін айтамын! Сіз кете аласыз және осы нұсқаулықты оқуды жалғастыра алмайсыз. Бейбітшілік! Мен шынымен кешірім сұраймын, егер
Дабыл функциясы бар Arduino сандық сағаты (реттелетін ПХД): 6 қадам (суреттермен)
Дабыл функциясы бар Arduino сандық сағаты (реттелетін ПХД): Бұл DIY нұсқаулығында мен сізге өзіңіздің сандық сағатты қалай жасау керектігін көрсетемін. Бұл жобада мен Arduino UNO - Atmega328p микроконтроллеріне негізделген жеке ПХД жасауды шештім