Mục lục:
- Quân nhu
- Bước 1: Cách hoạt động của đồng hồ kỹ thuật số
- Bước 2: Máy trạng thái
- Bước 3: Tấm chắn bàn phím LCD
- Bước 4: Giao diện Máy trạng thái
- Bước 5: Kết nối mọi thứ lại với nhau
- Bước 6: Lấy ví dụ
Video: Đồng hồ kỹ thuật số trên Arduino bằng máy trạng thái hữu hạn: 6 bước
2024 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2024-01-30 13:32
Này, tôi sẽ chỉ cho bạn cách tạo ra một chiếc đồng hồ kỹ thuật số bằng Công cụ Statechart YAKINDU và chạy trên Arduino, sử dụng Tấm chắn bàn phím LCD.
Mô hình ban đầu của đồng hồ kỹ thuật số được lấy từ David Harel. Anh ấy đã xuất bản một bài báo về
"[…] Mở rộng rộng rãi chủ nghĩa hình thức thông thường về máy móc trạng thái và sơ đồ trạng thái."
Trong bài báo này, ông đã sử dụng ví dụ về đồng hồ kỹ thuật số cho nghiên cứu của mình. Tôi đã sử dụng nó như một nguồn cảm hứng và xây dựng lại đồng hồ bằng YAKINDU Statechart Tools (một công cụ để tạo mô hình đồ họa của máy trạng thái và tạo mã C / C ++ với nó) và đưa nó trở lại cuộc sống trên Arduino.
Quân nhu
Phần cứng:
- Arduino Uno hoặc Mega
- Tấm chắn bàn phím LCD
Phần mềm:
- Công cụ Statechart YAKINDU
- Eclipse C ++ IDE dành cho Arduino
Bước 1: Cách hoạt động của đồng hồ kỹ thuật số
Hãy bắt đầu bằng cách xác định cách hoạt động của đồng hồ kỹ thuật số. Bạn có nhớ những… giả sử này… những chiếc đồng hồ kỹ thuật số “cực kỳ tuyệt vời” mà mọi người đã từng có vào những năm 90 không? Đồng hồ bấm giờ tích hợp, các báo thức khác nhau và tiếng bíp khó chịu của nó mỗi giờ đầy đủ. Nếu không, hãy xem: đồng hồ kỹ thuật số của những năm 90.
Vì vậy, về cơ bản nó là một chiếc đồng hồ có thể cấu hình với các chế độ khác nhau. Chủ yếu, thời gian hiện tại sẽ được hiển thị, nhưng có một số tính năng khác. Khi đầu vào, bạn có nút bật / tắt, chế độ và nút đặt. Ngoài ra, bạn có thể bật và tắt đèn. Với nút chế độ, bạn có thể phân biệt giữa các chế độ và kích hoạt / tắt các tính năng của đồng hồ:
- Hiển thị thời gian (Đồng hồ)
- Hiển thị ngày (Date)
- Đặt báo thức (Báo thức 1, Báo thức 2)
- Bật / tắt chuông (Đặt chuông)
- Sử dụng đồng hồ bấm giờ (Stop Watch)
Trong các menu, bạn có thể sử dụng nút bật / tắt để định cấu hình chế độ. Nút đặt cho phép bạn đặt thời gian - ví dụ: cho đồng hồ hoặc báo thức. Đồng hồ bấm giờ có thể được điều khiển - bắt đầu và dừng - bằng cách sử dụng nút bật và tắt đèn. Bạn cũng có thể sử dụng bộ đếm vòng chạy tích hợp
Hơn nữa, có một chuông báo, đổ chuông mỗi giờ và một đèn nền có thể điều khiển được tích hợp. Ở bước đầu tiên, tôi không kết nối chúng với Arduino.
Bước 2: Máy trạng thái
Tôi không muốn đi nhiều chi tiết để giải thích ví dụ này. Không phải vì nó quá phức tạp mà chỉ là một chút quá lớn. Tôi sẽ cố gắng giải thích ý tưởng cơ bản về cách nó hoạt động. Việc thực thi nên được tự giải thích bằng cách xem mô hình hoặc tải xuống và mô phỏng nó. Một số bộ phận của máy trạng thái được tổng hợp trong các vùng phụ, như vùng thời gian đã đặt. Với điều này, khả năng đọc của máy trạng thái cần được đảm bảo.
Mô hình được chia thành hai phần - một đồ họa và một văn bản. Trong phần văn bản, các sự kiện, biến, v.v. sẽ được xác định. Trong phần đồ họa - biểu đồ trạng thái - việc thực thi logic của mô hình được chỉ định. Để tạo một máy trạng thái đáp ứng hành vi được chỉ định, một số sự kiện đầu vào được yêu cầu, có thể được sử dụng trong mô hình: onoff, set, mode, light và light_r. Trong phần định nghĩa, một sự kiện nội bộ được sử dụng, sự kiện này làm tăng giá trị thời gian sau mỗi 100 mili giây:
cứ 100 ms / lần + = 1
Dựa trên các bước 100 ms, thời gian hiện tại sẽ được tính ở định dạng HH: MM: SS:
display.first = (time / 36000)% 24;
display.second = (time / 600)% 60; display.third = (time / 10)% 60;
Các giá trị sẽ được kết nối với màn hình LCD bằng cách sử dụng hoạt động updateLCD mỗi khi máy trạng thái được gọi:
display.updateLCD (display.first, display.second, display.third, display.text)
Hoạt động cơ bản của máy trạng thái đã được định nghĩa trong phần Cách hoạt động của Đồng hồ kỹ thuật số. Trong công cụ, tôi đã sử dụng một số phần tử mô hình hóa "đặc biệt" như CompositeState, Lịch sử, Sơ đồ con, Nút thoát, v.v. Bạn có thể tìm thấy mô tả chi tiết trong Hướng dẫn sử dụng.
Bước 3: Tấm chắn bàn phím LCD
Tấm chắn bàn phím LCD khá tuyệt vời cho các dự án đơn giản, đòi hỏi màn hình để hiển thị và một số nút làm đầu vào - một HMI (Giao diện Máy người) điển hình, đơn giản. Tấm chắn bàn phím LCD có năm nút người dùng và một nút khác để đặt lại. Tất cả năm nút cùng nhau được kết nối với chân A0 của Arduino. Mỗi người trong số họ được kết nối với một bộ chia điện áp, cho phép phân biệt giữa các nút.
Bạn có thể sử dụng analogRead (0) để tìm các giá trị cụ thể, tất nhiên, các giá trị này có thể khác nhau tùy theo nhà sản xuất. Dự án đơn giản này hiển thị giá trị hiện tại trên màn hình LCD:
#include "Arduino.h"
#include "LiquidCrystal.h" Màn hình LCD LiquidCrystal (8, 9, 4, 5, 6, 7); void setup () {lcd.begin (16, 2); lcd.setCursor (0, 0); lcd.write ("Giá trị đo được"); } void loop () {lcd.setCursor (0, 1); lcd.print (""); lcd.setCursor (0, 1); lcd.print (analogRead (0)); chậm trễ (200); }
Đây là những kết quả đo được của tôi:
- Không có: 1023
- Chọn: 640
- Còn lại: 411
- Giảm: 257
- Lên: 100
- Đúng: 0
Với các ngưỡng này, bạn có thể đọc các nút:
#define NONE 0 # define SELECT 1 #define LEFT 2 #define DOWN 3 #define UP 4 #define RIGHT 5 static int readButton () {int result = 0; kết quả = analogRead (0); if (kết quả <50) {return RIGHT; } if (kết quả <150) {return UP; } if (kết quả <300) {return DOWN; } if (kết quả <550) {return LEFT; } if (kết quả <850) {return SELECT; } trả về KHÔNG; }
Bước 4: Giao diện Máy trạng thái
Mã C ++ được tạo ra của máy trạng thái cung cấp các giao diện, các giao diện này phải được thực hiện để điều khiển máy trạng thái. Bước đầu tiên là kết nối các sự kiện trong với các phím của Tấm chắn bàn phím. Tôi đã chỉ ra cách đọc các nút, nhưng để giao tiếp chúng với máy trạng thái, cần gỡ lỗi các nút - nếu không, các sự kiện sẽ được nâng lên nhiều lần, dẫn đến hành vi không thể đoán trước. Khái niệm gỡ lỗi phần mềm không phải là mới. Bạn có thể xem tài liệu Arduino.
Trong quá trình triển khai của mình, tôi phát hiện thấy một cạnh rơi (nhả nút). Tôi đọc giá trị của nút, đợi 80 ms (có kết quả tốt hơn với 80 thay vì 50), lưu kết quả và đọc giá trị mới. Nếu oldResult không phải là NONE (chưa được nhấn) và kết quả mới là NONE, tôi biết, đó là nút đã được nhấn trước đây và bây giờ đã được giải phóng. Sau đó, tôi tăng sự kiện đầu vào theo của máy trạng thái.
int oldState = NONE; static void raiseEvents () {int buttonPressed = readButton (); chậm trễ (80); oldState = buttonPressed; if (oldState! = NONE && readButton () == NONE) {switch (oldState) {case SELECT: {stateMachine-> getSCI_Button () -> raise_mode (); nghỉ; } case LEFT: {stateMachine-> getSCI_Button () -> raise_set (); nghỉ; } case DOWN: {stateMachine-> getSCI_Button () -> raise_light (); nghỉ; } case UP: {stateMachine-> getSCI_Button () -> raise_light_r (); nghỉ; } case RIGHT: {stateMachine-> getSCI_Button () -> raise_onoff (); nghỉ; } default: {break; }}}}
Bước 5: Kết nối mọi thứ lại với nhau
Chương trình chính sử dụng ba phần:
- Máy trạng thái
- Bộ hẹn giờ
- Trình xử lý màn hình (lcd.print điển hình (…))
DigitalWatch * stateMachine = new DigitalWatch (); CPPTimerInterface * timer_sct = new CPPTimerInterface (); DisplayHandler * displayHandler = new DisplayHandler ();
Máy trạng thái sử dụng trình xử lý hiển thị và có bộ đếm thời gian, sẽ được cập nhật để kiểm soát các sự kiện được hẹn giờ. Sau đó, máy trạng thái được khởi tạo và nhập.
void setup () {stateMachine-> setSCI_Display_OCB (displayHandler); stateMachine-> setTimer (timer_sct); stateMachine-> init (); stateMachine-> enter (); }Vòng lặp thực hiện ba điều:
- Tăng các sự kiện đầu vào
- Tính thời gian đã trôi qua và cập nhật bộ đếm thời gian
- Gọi cho máy trạng thái
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 (); }
Bước 6: Lấy ví dụ
Đó là nó. Có thể, tôi đã không đề cập đến từng chi tiết của việc triển khai, nhưng bạn có thể xem ví dụ hoặc để lại nhận xét.
Thêm ví dụ vào IDE đang chạy bằng: File -> New -> Example -> YAKINDU Statechart Examples -> Next -> Arduino - Digital Watch (C ++)
> Bạn có thể tải IDE tại đây <<
Bạn có thể bắt đầu với bản dùng thử 30 ngày. Sau đó, bạn phải nhận được giấy phép, miễn phí cho mục đích sử dụng phi thương mại!
Đề xuất:
Máy trạng thái hữu hạn trên MSP430: 6 bước
Máy trạng thái hữu hạn trên MSP430: Tôi sẽ chỉ cho bạn cách lập trình Bàn di chuột MSP430G2 với Máy trạng thái hữu hạn (FSM) bằng cách sử dụng Công cụ Statechart YAKINDU trực tiếp trong Texas Instruments Code Composer Studio. Hướng dẫn này bao gồm sáu bước: Cài đặt Công cụ Statechart YAKINDU dưới dạng
Máy trạng thái và đa nhiệm trên Arduino với SPI mở rộng: 3 bước
State Machine và Multitasking trên Arduino Với SPI Expanders: Tuần trước, tôi đã yêu cầu tạo một hệ thống để bắn pháo hoa bằng arduino. Nó cần khoảng 64 đầu ra để kiểm soát đám cháy. Một cách để làm điều đó là sử dụng bộ mở rộng IC. Vì vậy, 2 giải pháp có sẵn: - một bộ mở rộng I2C nhưng nó cần biến tần khi bạn
Làm thế nào để thành thạo hàn (Mẹo và thủ thuật hàn): 4 bước
Làm thế nào để thành thạo hàn (Mẹo & Thủ thuật hàn): Này các bạn! Tôi hy vọng bạn đã thích " Tự làm bộ điều khiển Arduino MIDI " và bạn đã sẵn sàng cho một cái mới, như thường lệ, tôi sẽ tạo một tài liệu hướng dẫn học tập để chỉ cho bạn cách chế tạo một số đồ điện tử thú vị và nói về
Súng hàn tự động tự động tự chế để hàn sắt Tự làm: 3 bước
Súng hàn tự động cấp liệu tự động để hàn sắt tự làm: Xin chào! Trong tài liệu hướng dẫn này, bạn sẽ học cách chế tạo máy hàn nạp tự động tại nhà từ các linh kiện đơn giản Tự làm. - npn 8050- 1 k ohm
Tự động BẬT / TẮT từ xa bằng Jack cắm MIC trên Máy quay phim / Rơ le trạng thái rắn điện áp thấp: 4 bước (có Hình ảnh)
Tự động BẬT / TẮT Từ xa Sử dụng Giắc cắm MIC trên Máy quay / Rơle Trạng thái Rắn Điện áp thấp: Tổng quan: Chúng tôi đã sử dụng giắc cắm MIC của máy quay để phát hiện khi nào máy quay đang bật. Chúng tôi đã chế tạo một rơle trạng thái rắn điện áp thấp để phát hiện giắc cắm MIC và tự động bật và tắt thiết bị từ xa cùng lúc với máy quay. Trạng thái rắn