Mündəricat:
- Təchizat
- Addım 1: Rəqəmsal Saat necə işləyir
- Addım 2: Dövlət Maşını
- Addım 3: LCD Klaviatura Qalxanı
- Addım 4: Dövlət Maşını ilə əlaqə qurun
- Addım 5: Şeyi Birlikdə Kablolama
- Addım 6: Nümunə alın
Video: Sonlu vəziyyət maşını istifadə edərək Arduino -da rəqəmsal saat: 6 addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:45
Salam, sizə YAKINDU Statechart Tools ilə rəqəmsal bir saatın necə yaradılacağını və LCD Keypad Shield istifadə edən bir Arduino ilə işləyəcəyini göstərəcəyəm.
Rəqəmsal saatın orijinal modeli David Hareldən götürülmüşdür. Haqqında bir məqalə nəşr etdi
"[…] Dövlət maşınlarının və vəziyyət diaqramlarının ənənəvi formalizminin geniş yayılması."
Bu yazıda araşdırması üçün rəqəmsal saat nümunəsindən istifadə etdi. Bir ilham olaraq istifadə etdim və saatı YAKINDU Statechart Tools (dövlət maşınlarının qrafik modellərini yaratmaq və onunla C/C ++ kodu yaratmaq üçün bir vasitə) ilə yenidən qurdum və Arduino -da həyata qaytardım.
Təchizat
Avadanlıq:
- Arduino Uno və ya Mega
- LCD Klaviatura Qalxanı
Proqram təminatı:
- YAKINDU Statechart Alətləri
- Arduino üçün Eclipse C ++ IDE
Addım 1: Rəqəmsal Saat necə işləyir
Rəqəmsal saatın necə işləməli olduğunu təyin edərək başlayaq. Bunları xatırlayırsınızmı… deyək ki … hər kəsin 90 -cı illərdə "ultra sərin" rəqəmsal saatları? İnteqrasiya edilmiş bir saniyəölçən, fərqli həyəcan siqnalları və hər saatda sinir bozucu siqnalı. Əgər yoxsa, bir baxın: 90 -cı illərin rəqəmsal saatı.
Beləliklə, əsasən fərqli rejimi olan konfiqurasiya edilə bilən bir saatdır. Əsasən, cari vaxt göstəriləcək, lakin digər xüsusiyyətlər var. Giriş olaraq, bir açma/söndürmə, bir rejim və bir düymə var. Əlavə olaraq işığı yandırıb söndürə bilərsiniz. Rejim düyməsi ilə rejimi ayırd edə və saat xüsusiyyətlərini aktivləşdirə/söndürə bilərsiniz:
- Saatı göstərin (Saat)
- Tarixi göstərin (Tarix)
- Siqnal qurun (Siqnal 1, Siqnal 2)
- Zəngi aktiv edin/deaktiv edin (Zəng Qur)
- Saniyəölçəndən istifadə edin (Stop Watch)
Menyularda rejimi konfiqurasiya etmək üçün açma/söndürmə düyməsindən istifadə edə bilərsiniz. Ayar düyməsi vaxtı təyin etməyə imkan verir - məs. saat və ya həyəcan siqnalları üçün. İşıq yandırmaq və söndürmək düyməsindən istifadə edərək saniyəölçən idarə oluna bilər - işə salına və dayandırıla bilər. İnteqrasiya edilmiş bir sayğacdan da istifadə edə bilərsiniz
Bundan əlavə, hər tam saatda zəng vuran və idarə edilə bilən arxa işığın inteqrasiyası var. İlk addımda onları Arduinoya bağlamadım.
Addım 2: Dövlət Maşını
Bu nümunənin izahı üçün çox detallı getmək istəmirəm. Çox mürəkkəb olduğu üçün deyil, bir az çox böyükdür. Bunun necə işlədiyinə dair əsas fikri izah etməyə çalışacağam. Modelə baxmaq və ya yükləmək və simulyasiya etməklə icra özünü izah etməlidir. Dövlət maşınının bəzi hissələri müəyyən vaxt bölgəsi kimi alt bölgələrdə toplanır. Bununla dövlət maşınının oxunması təmin edilməlidir.
Model iki hissəyə bölünür - qrafik və mətn. Mətn hissəsində hadisələr, dəyişənlər və s. Qrafik hissədə - vəziyyət diaqramı - modelin məntiqi icrası göstərilmişdir. Göstərilən davranışı yerinə yetirən bir dövlət maşını yaratmaq üçün modeldə istifadə edilə bilən bəzi giriş hadisələri tələb olunur: açma, qurma, rejim, işıq və işıq_r. Tərif bölməsində, hər 100 ms -də vaxt dəyərini artıran bir daxili hadisə istifadə olunur:
hər 100 ms / dəfə += 1
100 ms addımlara əsaslanaraq cari vaxt HH: MM: SS formatında hesablanacaq:
display.first = (vaxt / 36000) % 24;
display.second = (vaxt / 600) % 60; display.third = (vaxt / 10) % 60;
Dəyərlər, hər dəfə dövlət maşını çağırıldıqda, updateLCD əməliyyatını istifadə edərək LCD ekrana bağlanacaq:
display.updateLCD (display.ilk, display.second, display.third, display.text)
Dövlət maşınının əsas icrası artıq Rəqəmsal Saatın Necə Çalışdığı bölməsində müəyyən edilmişdir. Alətin içərisində CompositeState, History, Sub-Diagrams, ExitNodes və s. Kimi "xüsusi" modelləşdirmə elementlərindən istifadə etdim. Ətraflı təsviri İstifadəçi Bələdçisində tapa bilərsiniz.
Addım 3: LCD Klaviatura Qalxanı
LCD Keypad Shield, vizual olaraq bir ekran və giriş olaraq bəzi düymələr tələb edən sadə layihələr üçün olduqca sərindir - tipik, sadə bir HMI (İnsan Maşın İnterfeysi). LCD Keypad Shield beş istifadəçi düyməsini və sıfırlama üçün başqa bir düyməni ehtiva edir. Beş düymə birlikdə Arduino A0 pininə bağlıdır. Hər biri düymələri fərqləndirməyə imkan verən bir gərginlik bölücüsünə bağlıdır.
Əlbəttə ki, istehsalçı tərəfindən fərqli ola biləcək xüsusi dəyərləri tapmaq üçün analogRead (0) istifadə edə bilərsiniz. Bu sadə layihə LCD -də cari dəyəri göstərir:
#"Arduino.h" daxil edin
#"LiquidCrystal.h" daxil edin LiquidCrystal lcd (8, 9, 4, 5, 6, 7); void setup () {lcd.begin (16, 2); lcd.setCursor (0, 0); lcd.write ("Ölçülmüş dəyər"); } void loop () {lcd.setCursor (0, 1); lcd.print (""); lcd.setCursor (0, 1); lcd.print (analogRead (0)); gecikmə (200); }
Ölçdüyüm nəticələr bunlardır:
- Yox: 1023
- Seçin: 640
- Sol: 411
- Aşağı: 257
- Yuxarı: 100
- Sağda: 0
Bu eşiklərlə düymələri oxumaq mümkündür:
#define NONE 0 #define SEÇ 1 nəticə = analogRead (0); əgər (nəticə <50) {sağa dön; } if (nəticə <150) {UP qaytar; } if (nəticə <300) {geri AŞAĞI; } if (nəticə <550) {LEFT qaytar; } if (nəticə <850) {SELECT qaytar; } NONE qaytar; }
Addım 4: Dövlət Maşını ilə əlaqə qurun
Vəziyyət maşınının yaradılan C ++ kodu, dövlət maşınını idarə etmək üçün tətbiq olunmalı olan interfeyslər təmin edir. İlk addım, hadisələri Keypad Shield düymələri ilə bağlamaqdır. Düymələrin necə oxunacağını artıq göstərmişəm, ancaq onları dövlət maşını ilə əlaqələndirmək üçün düymələrin açılması tələb olunur - əks halda hadisələr dəfələrlə qaldırılaraq gözlənilməz davranışla nəticələnər. Proqram təminatçılığının ləğvi anlayışı yeni deyil. Arduino sənədlərinə baxa bilərsiniz.
Həyata keçirərkən, düşən bir kənar aşkar edirəm (düyməni buraxaraq). Düymənin dəyərini oxudum, 80 ms gözləyin (50 əvəzinə 80 ilə daha yaxşı nəticələr əldə etdim), nəticəni qeyd edin və yeni dəyəri oxuyun. OldResult NONE (sıxılmamış) olmasaydı və yeni nəticə NONE olarsa, bilirəm ki, düymə əvvəllər basıldı və indi buraxıldı. Sonra, dövlət maşınının giriş hadisəsini qaldırıram.
int oldState = NONE; statik void liftEvents () {int buttonPressed = readButton (); gecikmə (80); oldState = düyməsinə basıldı; if (oldState! = NONE && readButton () == NONE) {switch (oldState) {case SELECT: {stateMachine-> getSCI_Button ()-> lift_mode (); fasilə; } SOL QALDI: {stateMachine-> getSCI_Button ()-> lift_set (); fasilə; } hal AŞAĞI: {stateMachine-> getSCI_Button ()-> lift_light (); fasilə; } YUKARI: {stateMachine-> getSCI_Button ()-> lift_light_r (); fasilə; } hal HAQQI: {stateMachine-> getSCI_Button ()-> lift_onoff (); fasilə; } default: {break; }}}}
Addım 5: Şeyi Birlikdə Kablolama
Əsas proqram üç hissədən ibarətdir:
- Dövlət Maşını
- Taymer
- Ekran İşləyicisi (tipik lcd.print (…))
DigitalWatch* stateMachine = yeni DigitalWatch (); CPPTimerInterface* timer_sct = yeni CPPTimerInterface (); DisplayHandler* displayHandler = yeni DisplayHandler ();
Dövlət maşını bir ekran işləyicisindən istifadə edir və vaxtlı hadisələri idarə etmək üçün yenilənəcək bir taymer aldı. Daha sonra dövlət maşını işə salınır və daxil olur.
boş quraşdırma () {stateMachine-> setSCI_Display_OCB (displayHandler); stateMachine-> setTimer (timer_sct); stateMachine-> init (); stateMachine-> daxil edin (); }Döngü üç şeyi edir:
- Giriş hadisələrini artırın
- Keçən vaxtı hesablayın və taymeri yeniləyin
- Dövlət maşınına zəng edin
uzun cari_vaxt = 0; uzun son_sikl_müddəti = 0; void loop () {boostEvents (); last_cycle_time = cari_ zaman; cari_vaxt = milis (); timer_sct-> updateActiveTimer (stateMachine, current_time - last_cycle_time); stateMachine-> runCycle (); }
Addım 6: Nümunə alın
Bu belədir. Yəqin ki, tətbiqin hər bir detalından bəhs etməmişəm, amma nümunəyə baxa və ya şərh yaza bilərsiniz.
Nümunəni işləyən bir IDE -yə əlavə edin: Fayl -> Yeni -> Nümunə -> YAKINDU Statechart Nümunələri -> Sonrakı -> Arduino -Rəqəmsal Saat (C ++)
> IDE -ni buradan yükləyə bilərsiniz <<
30 günlük sınaq ilə başlaya bilərsiniz. Daha sonra, qeyri-kommersiya məqsədləri üçün pulsuz olan bir lisenziya almalısınız!
Tövsiyə:
Arduino istifadə edərək Led Strip ilə Analog Saat və Rəqəmsal Saat Necə Hazırlanır: 3 Addım
Arduino istifadə edərək Led Strip ilə Analog Saat və Rəqəmsal Saat Necə Hazırlanır: Bu gün biz Analog Clock & Led Strip və Arduino ilə MAX7219 Dot modulu olan rəqəmsal saat yerli vaxt qurşağı ilə saatı düzəldəcək. Analog saat daha uzun bir LED şeridi istifadə edə bilər, buna görə də sənətkar olmaq üçün divara asıla bilər
DS1302 istifadə edərək Arduino Rəqəmsal Saat: 4 addım
DS1302 istifadə edərək Arduino Rəqəmsal Saatı: GirişSalam uşaqlar, inşallah hamınız əla iş görürsünüz. Bu, Arduino istifadə edərək rəqəmsal saatın necə ediləcəyi ilə bağlı qısa və sadə bir layihə olacaq. Bu layihədə Arduino və növbənin reyestrinin köməyi ilə rəqəmsal saat hazırlayacağıq. Bu
Arduino və Led Dot Matrix Ekranından istifadə edərək rəqəmsal saat: 6 addım
Arduino və Led Dot Matrix Ekranından istifadə edən rəqəmsal saat: Hal -hazırda, İstehsalçılar, Yaradıcılar, layihələrin prototiplərinin sürətli inkişafı üçün Arduinoya üstünlük verirlər. Arduino, istifadəsi asan olan hardware və proqram təminatına əsaslanan açıq mənbəli elektronika platformasıdır. Arduino çox yaxşı istifadəçi cəmiyyətinə malikdir.Bu layihədə
Arduino Nano və DS1307 istifadə edərək sadə rəqəmsal saat: 4 addım
Arduino Nano və DS1307 istifadə edərək sadə rəqəmsal saat: Bu yazıda sizə Arduino istifadə edərək rəqəmsal saat hazırlamaq üçün bir dərslik göstərəcəyəm .. İstifadə etdiyim Arduino lövhəsi vaxt məlumat təminatçısı olaraq Arduino Nano V3, DS1307, MAX7219 7 Segmentidir. Dərsliyə girməzdən əvvəl bunu tövsiyə edirəm
16 LED -i idarə etmək üçün 2 Vəziyyət Qeydindən (74HC595) istifadə edərək: 9 addım
16 LED -i Sürmək üçün 2 Vəziyyət Qeydindən (74HC595) istifadə etmək: Bu dövrədə 2 növbəli qeyd (74HC595) istifadə olunacaq. Vəziyyət qeydləri 16 LED -in çıxışı kimi idarə olunacaq. Hər bir keçid registrində 8 LED işləyəcək. Vəziyyət qeydləri hər bir keçid qeydinin çıxışı digərinin dublikatı kimi görünəcək şəkildə bağlanmışdır