色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用YAKINDU Statechart Tools創(chuàng)建數(shù)字手表

科技觀察員 ? 來源:Robin Herrmann ? 作者:Robin Herrmann ? 2022-08-18 16:03 ? 次閱讀

為 16x2 LCD Keypad Shield 使用 YAKINDU 狀態(tài)圖工具創(chuàng)建數(shù)字手表。

我將向您展示如何使用YAKINDU Statechart Tools創(chuàng)建數(shù)字手表并在使用 LCD Keypad Shield 的 Arduino 上運(yùn)行。

數(shù)字手表的原始模型取自大衛(wèi)哈雷爾。他之前發(fā)表過一篇關(guān)于“狀態(tài)機(jī)和狀態(tài)圖的傳統(tǒng)形式的廣泛擴(kuò)展”的論文。在論文中,他以數(shù)字手表為例進(jìn)行了研究。我以此為靈感,使用YAKINDU Statechart Tools (一種用于創(chuàng)建狀態(tài)機(jī)圖形模型并使用它生成 C/C++ 代碼的工具)重建了手表,并在 Arduino 上讓它重新煥發(fā)生機(jī)。

數(shù)字手表的工作原理

讓我們從定義數(shù)字手表應(yīng)該如何工作開始。

基本上,它是一個具有不同模式的可配置手表。主要是顯示當(dāng)前時間,但還有一些其他功能。作為輸入,您有一個開/關(guān)、一個模式和一個設(shè)置按鈕。此外,還可以打開和關(guān)閉燈。

使用模式按鈕,您可以區(qū)分模式并激活/禁用時鐘功能:

顯示時間(時鐘)

顯示日期(日期)

設(shè)置鬧鐘(鬧鐘 1、鬧鐘 2)

啟用/禁用鈴聲(設(shè)置鈴聲)

使用秒表(秒表)

在菜單中,您可以使用開/關(guān)按鈕來配置模式。設(shè)置按鈕允許您設(shè)置時間 - 例如時鐘或鬧鐘。秒表可以通過使用開燈和關(guān)燈按鈕來控制 - 啟動和停止。您還可以使用集成的計圈器。

此外,還有一個鐘聲,每時每刻都在響起,并且集成了一個可控的背光。不過在第一步,我沒有將它們連接到 Arduino。

狀態(tài)機(jī)

poYBAGL98dGAbCURAAHXWlSlR2I169.png

我不想詳細(xì)解釋這個例子。這不是因為它太復(fù)雜,它只是有點太大了。不過我會嘗試解釋它具體如何工作的基本思想。通過查看模型或下載模擬它。狀態(tài)機(jī)的某些部分在子區(qū)域中匯總,例如設(shè)置的時間區(qū)域。這樣就可以確保狀態(tài)機(jī)的可讀性。

該模型共分為兩部分 - 圖形和文本。

在文本部分,將定義事件、變量等。

在圖形部分 - 狀態(tài)圖 - 指定了模型的邏輯執(zhí)行。

要創(chuàng)建滿足指定行為的狀態(tài)機(jī),需要一些輸入事件,這些事件可以在模型中使用:onoff 、set 、mode 、light和light_r。在定義部分中使用了一個內(nèi)部事件,它每 100 毫秒遞增一次時間值:

every 100 ms / time += 1

基于 100 毫秒步長,當(dāng)前時間將以HH:MM:SS格式計算:

display.first = (time / 36000) % 24;
display.second = (time / 600) % 60;
display.third = (time / 10) % 60;

每次調(diào)用狀態(tài)機(jī)時,這些值將通過使用updateLCD操作連接到 LCD 顯示器:

display.updateLCD(display.first, display.second, display.third, display.text)

狀態(tài)機(jī)的基本執(zhí)行已在“數(shù)字手表的工作原理”部分中定義。在該工具中,我使用了一些“特殊”建模元素,如CompositeState 、History 、Sub-Diagrams 、ExitNodes等。

LCD 鍵盤屏蔽
LCD Keypad Shield 對于需要一個可視化屏幕和一些按鈕作為輸入的簡單項目來說非常酷 - 一個典型的簡單 HMI(人機(jī)界面)。LCD Keypad Shield 包含五個用戶按鈕和一個用于重置的按鈕。五個按鈕一起連接到 Arduino 的 A0 引腳。它們中的每一個都連接到一個分壓器,可以區(qū)分按鈕。

您可以使用analogRead(0) 來查找特定值,這當(dāng)然可能因制造商而異。這個簡單的項目在 LCD 上顯示當(dāng)前值:

#include
#include

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

void setup() {
lcd.begin(16, 2);
lcd.setCursor(0,0);
lcd.write("Measured Value");
}

void loop() {
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print(analogRead(0));
delay(200);
}

這些是我的測量結(jié)果:

無:1023

選擇:640

左:411

下降:257

上:100

右:0

poYBAGL98dqAC3pYAAVKAnDIS8U703.png

使用這些閾值可以讀取按鈕:

#define NONE 0
#define SELECT 1
#define LEFT 2
#define DOWN 3
#define UP 4
#define RIGHT 5

static int readButton() {
int result = 0;
result = analogRead(0);
if (result < 50) {
return RIGHT;
}
if (result < 150) {
return UP;
}
if (result < 300) {
return DOWN;
}
if (result < 550) {
return LEFT;
}
if (result < 850) {
return SELECT;
}
return NONE;
}

連接狀態(tài)機(jī)
狀態(tài)機(jī)生成的 C++ 代碼提供了接口,必須實現(xiàn)這些接口才能控制狀態(tài)機(jī)。第一步是將 in 事件與 Keypad Shield 的鍵連接起來。我已經(jīng)展示了如何讀取按鈕,但是為了將它們連接到狀態(tài)機(jī),需要對按鈕進(jìn)行去抖動。否則事件將被多次引發(fā),從而導(dǎo)致不可預(yù)測的行為。軟件去抖動的概念并不新鮮。

在我的實現(xiàn)中,我檢測到下降沿(釋放按鈕)。我讀取按鈕的值,等待 80 毫秒,保存結(jié)果并讀取新值。如果oldResult不是NONE (未按下)并且新結(jié)果是NONE ,那我就能知道該按鈕之前已被按下,現(xiàn)在已被釋放。之后,就可以提出狀態(tài)機(jī)的相應(yīng)輸入事件。

int oldState = NONE;
static void raiseEvents() {
int buttonPressed = readButton();
delay(80);
oldState = buttonPressed;
if (oldState != NONE && readButton() == NONE) {
switch (oldState) {
case SELECT: {
stateMachine->getSCI_Button()->raise_mode();
break;
}
case LEFT: {
stateMachine->getSCI_Button()->raise_set();
break;
}
case DOWN: {
stateMachine->getSCI_Button()->raise_light();
break;
}
case UP: {
stateMachine->getSCI_Button()->raise_light_r();
break;
}
case RIGHT: {
stateMachine->getSCI_Button()->raise_onoff();
break;
}
default: {
break;
}
}
}
}

連接
主程序使用三個部分:

狀態(tài)機(jī)

計時器

顯示處理程序(典型的 lcd.print(...))

DigitalWatch* stateMachine = new DigitalWatch();
CPPTimerInterface* timer_sct = new CPPTimerInterface();
DisplayHandler* displayHandler = new DisplayHandler();

狀態(tài)機(jī)使用顯示處理程序并獲得一個計時器,該計時器將被更新以控制定時事件。之后,狀態(tài)機(jī)被初始化并進(jìn)入。

void setup() {
stateMachine->setSCI_Display_OCB(displayHandler);
stateMachine->setTimer(timer_sct);
stateMachine->init();
stateMachine->enter();
}

循環(huán)做了三件事:

引發(fā)輸入事件

計算經(jīng)過時間并更新計時器

調(diào)用狀態(tài)機(jī)

long current_time = 0;
long last_cycle_time = 0;
void loop() {
raiseEvents();
last_cycle_time = current_time;
current_time = millis();
timer_sct->updateActiveTimer(stateMachine,
current_time - last_cycle_time);
stateMachine->runCycle();
}

添加示例

將示例添加到正在運(yùn)行的 IDE 中:

文件 -》 新建 -》 示例 -》 YAKINDU 狀態(tài)圖示例 -》 下一步 -》 Arduino - 數(shù)字手表 (C++)

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • lcd
    lcd
    +關(guān)注

    關(guān)注

    34

    文章

    4429

    瀏覽量

    167786
  • 手表
    +關(guān)注

    關(guān)注

    1

    文章

    140

    瀏覽量

    24718
  • Arduino
    +關(guān)注

    關(guān)注

    188

    文章

    6472

    瀏覽量

    187320
收藏 人收藏

    評論

    相關(guān)推薦

    ImageCraft MSP430 ANSI C Tools

    ImageCraft MSP430 ANSI C Tools ImageCraft MSP430 ANSI C Tools
    發(fā)表于 03-25 14:00 ?34次下載

    ImageCraft HC16 ANSI C Tools

    ImageCraft HC16 ANSI C Tools
    發(fā)表于 03-25 14:06 ?20次下載

    ImageCraft AVR ANSI C Tools

    ImageCraft AVR ANSI C Tools
    發(fā)表于 03-25 14:20 ?45次下載

    Motorola Phone Tools快速入門

    安裝之前 Motorola Phone Tools屏幕快照本指南中的屏幕快照基于在Windows XP環(huán)境下使用Motorola Phone Tools。在其它Windows操作系統(tǒng)下運(yùn)行此應(yīng)用程序時,屏幕內(nèi)容可能會有變化。這并不
    發(fā)表于 07-17 15:27 ?5次下載

    4小時數(shù)字手表電路

    4小時數(shù)字手表電路
    發(fā)表于 01-13 19:47 ?1268次閱讀
    4小時<b class='flag-5'>數(shù)字</b><b class='flag-5'>手表</b>電路

    什么是Data Mining Tools

    什么是Data Mining Tools  英文縮寫: Data Mining Tools 中文譯名: 數(shù)據(jù)挖掘工具 分  類: IP與多媒體 解  釋: 通
    發(fā)表于 02-22 17:34 ?1028次閱讀

    Express-tools使用詳解

    電子專業(yè)單片機(jī)相關(guān)知識學(xué)習(xí)教材資料——Express-tools使用詳解
    發(fā)表于 08-23 15:55 ?0次下載

    avr-tools資料

    avr-tools資料
    發(fā)表于 09-21 12:35 ?5次下載
    avr-<b class='flag-5'>tools</b>資料

    LabVIEW網(wǎng)絡(luò)講壇第三季:介紹Statechart狀態(tài)圖的特點與原理(1)

    LabVIEW 8.5 推出了全新的Statechart狀態(tài)圖模塊,讓工程師們能夠以最直觀的方式實現(xiàn)程序的架構(gòu),本集主要側(cè)重介紹Statechart的原理與特點,以及在LabVIEW中如何予以實現(xiàn)。
    的頭像 發(fā)表于 06-25 03:06 ?3525次閱讀
    LabVIEW網(wǎng)絡(luò)講壇第三季:介紹<b class='flag-5'>Statechart</b>狀態(tài)圖的特點與原理(1)

    介紹 LabVIEW 狀態(tài)圖及Statechart與狀態(tài)機(jī)的區(qū)別的區(qū)別

    本集中,工程師將通過幾個實際程序案例為您展示Statechart與狀態(tài)機(jī)的區(qū)別,以及在并發(fā)、包含及歷史保存這三部分中,Statechart是如何只是通過直觀的設(shè)計方式就能幫助您輕松完成的。
    的頭像 發(fā)表于 06-14 04:19 ?9447次閱讀
    介紹 LabVIEW 狀態(tài)圖及<b class='flag-5'>Statechart</b>與狀態(tài)機(jī)的區(qū)別的區(qū)別

    PCB技術(shù):異形敷銅的創(chuàng)建

    執(zhí)行菜單命令“Tools-Convert-Create Polygon From selected Primitives”,即可創(chuàng)建一個圓形的敷銅。
    的頭像 發(fā)表于 10-12 09:38 ?4239次閱讀
    PCB技術(shù):異形敷銅的<b class='flag-5'>創(chuàng)建</b>

    液晶數(shù)字手表使用.原理及維修

    液晶數(shù)字手表使用.原理及維修講解。
    發(fā)表于 03-23 13:57 ?16次下載
    液晶<b class='flag-5'>數(shù)字</b><b class='flag-5'>手表</b>使用.原理及維修

    xiami-tools蝦米工具包

    ./oschina_soft/xiami-tools.zip
    發(fā)表于 06-01 10:46 ?1次下載
    xiami-<b class='flag-5'>tools</b>蝦米工具包

    MCU ISP Tools安裝程序

    MCU ISP Tools安裝程序
    發(fā)表于 07-08 10:22 ?25次下載

    NVIDIA Texture Tools Exporter如何加速Texture Tools 3.0壓縮器技術(shù)

    借助 NVIDIA Texture Tools Exporter,用戶可以使用 NVIDIA 的 CUDA 加速 Texture Tools 3.0 壓縮器技術(shù),直接從圖像源創(chuàng)建高度壓縮的紋理文件(在磁盤和內(nèi)存中占用空間較小)。
    的頭像 發(fā)表于 10-14 09:57 ?1677次閱讀
    主站蜘蛛池模板: 欧洲最大无人区免费高清完整版| 日本精品久久久久中文字幕 1| 亚洲XXX午休国产熟女屁| 国产精品99AV在线观看| 午夜免费国产体验区免费的| 国产人妻精品无码AV在线五十路| 亚洲成a人片777777久久| 九九热视频在线观看| 69ZXX少妇内射无码| 日本色高清| 国产毛片女人高潮叫声| 野花日本高清在线观看免费吗| 麻豆国产99在线中文| 成 人 动漫3d 在线看| 亚洲成人mv| 麻豆XXXX乱女少妇精品| 富婆大保健嗷嗷叫普通话对白| 亚洲精品久久国产高清| 麻豆Av国产在线播放| 囯产精品一区二区三区线| 亚洲嫩草影院久久精品| 欧美日韩精品| 偷偷鲁青春草原视频| 久久这里只有精品1| 贵妇局长的蕾丝乳罩| 在线视频免费观看| 天天看学生视频| 美国特级成人毛片| 国产香蕉九九久久精品免费| 99久久99久久精品免费看子 | 牛牛免费视频| 免费人成网站永久| 国产欧美一区二区三区视频| 中文字幕欧美一区| 午夜小视频免费观看| 美女拉开腿让男生桶到爽| 国产精品久久久久久人妻香蕉| 亚洲欧美国产综合在线| 久久国产视频网| 高清无码色大片中文| 2020年国产理论|