Mục lục:

Arduino HMI sử dụng máy trạng thái: 9 bước
Arduino HMI sử dụng máy trạng thái: 9 bước

Video: Arduino HMI sử dụng máy trạng thái: 9 bước

Video: Arduino HMI sử dụng máy trạng thái: 9 bước
Video: BÀI 6_P2: THIẾT KẾ GIAO DIỆN HMI GIAO TIẾP ARDUINO (HMI INTERFACE DESIGN ARDUINO MODBUS RTU) 2024, Tháng mười một
Anonim
Arduino HMI sử dụng máy trạng thái
Arduino HMI sử dụng máy trạng thái

Trong phần có thể hướng dẫn này, tôi sẽ chỉ cho bạn cách sử dụng Công cụ Statechart YAKINDU để tạo ra một HMI đơn giản và có thể mở rộng bằng cách sử dụng Tấm chắn bàn phím LCD 16x2 cho Arduino.

Máy trạng thái hữu hạn (FSM) là một mẫu thiết kế mạnh mẽ để phát triển các Giao diện máy móc phức tạp của con người (HMI). Khi chức năng của HMI có thể tăng lên, sẽ rất hữu ích khi sử dụng một mẫu thiết kế giống như các máy trạng thái.

Ví dụ đầy đủ được nhúng trong YAKINDU Statechart Tools. Ngoài ra, Eclipse C ++ IDE cho Trình cắm Arduino đã được sử dụng để biên dịch và nhấp nháy trong IDE.

Sơ lược về các công cụ Statechart YAKINDU

Với công cụ này, có thể tạo ra các máy trạng thái đồ họa. Nó cho phép người dùng tạo mã C, C ++ hoặc Java từ máy trạng thái. Với cách tiếp cận này, mô hình có thể được thay đổi hoặc mở rộng và người dùng có thể chỉ cần tạo lại mã và không phải viết mã nguồn thuần túy.

Quân nhu

Các bộ phận:

  • Arduino (Uno, Mega)
  • Cáp USB
  • Tấm chắn bàn phím LCD 16x2

Công cụ:

  • Công cụ Statechart YAKINDU
  • Eclipse C ++ IDE dành cho Arduino

Bước 1: Phần cứng

Image
Image

Có thể đơn giản cắm tấm chắn bàn phím LCD vào Arduino. Nó có Màn hình LCD 16x2 và có thêm sáu nút bấm:

  • Bên trái
  • Bên phải
  • Hướng lên
  • Xuống
  • Lựa chọn
  • (Cài lại)

Rõ ràng, năm trong số chúng có thể được sử dụng. Các phím được nối với bộ chia điện áp và được phát hiện bằng cách sử dụng Pin A0 tùy thuộc vào điện áp. Tôi đã sử dụng gỡ lỗi phần mềm để phát hiện chúng một cách chính xác.

Bước 2: Xác định cách nó sẽ hoạt động

Điều khiển HMI
Điều khiển HMI

Ứng dụng phải có khả năng thực hiện ba điều.

  1. Xử lý các trạng thái Ở đây tôi muốn sử dụng các nút để điều hướng giữa năm trạng thái: Trên cùng, Giữa, Dưới cùng, Trái và Phải
  2. Đồng hồ bấm giờ Một đồng hồ bấm giờ đơn giản, có thể được bắt đầu, dừng lại và đặt lại. Nó sẽ được tăng lên sau mỗi 100 mili giây
  3. Bộ đếm Phần thứ ba chứa một bộ đếm lên / xuống đơn giản. Nó sẽ có thể đếm số dương và nó phải được đặt lại

Menu hoạt động (hoặc trạng thái) sẽ được hiển thị trên màn hình LCD 16x2 ở dòng trên cùng. Ứng dụng (State, Timer hoặc Counter) sẽ được hiển thị ở dòng dưới cùng. Để điều hướng, nên sử dụng nút nhấn trái và phải.

Bước 3: Giao diện Máy trạng thái

Các nút sẽ được gỡ lỗi và có dây với máy trạng thái. Chúng có thể được sử dụng như trong các sự kiện trong máy trạng thái. Ngoài ra, các thao tác được xác định để hiển thị menu hiện tại. Và ít nhất hai biến, một cho bộ đếm thời gian và một cho bộ đếm, được xác định.

giao diện:

// các nút như sự kiện đầu vào trong sự kiện bên phải trong sự kiện còn lại trong sự kiện lên trong sự kiện xuống trong sự kiện chọn // hiển thị các giá trị cụ thể của HMI hoạt động displayLCDString (value: string, length: integer, position: integer) hoạt động displayLCDInteger (value: integer, position: integer) hoạt động clearLCDRow (position: integer) internal: // các biến để lưu trữ var cnt: integer var timeCnt: integer = 0

Sau khi tạo mã C ++, các sự kiện trong phải được gỡ lỗi và kết nối với giao diện. Đoạn mã này cho biết cách thực hiện việc này.

Lúc đầu, các nút sẽ được xác định:

# định nghĩa KHÔNG CÓ 0 # xác định CHỌN 1 # xác định TRÁI 2 # xác định GIẢM 3 # xác định LÊN 4 # xác định PHẢI 5

Sau đó, có một chức năng được xác định để đọc nút. Các giá trị có thể khác nhau, tùy thuộc vào nhà sản xuất LCD Shield.

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; }

Khi kết thúc, các nút sẽ được gỡ bỏ. Tôi đã có kết quả tốt với 80 ms. Sau khi một nút sẽ được phát hành, nó sẽ tăng theo sự kiện.

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-> raise_select (); nghỉ; } case LEFT: {stateMachine-> raise_left (); nghỉ; } case DOWN: {stateMachine-> raise_down (); nghỉ; } case UP: {stateMachine-> raise_up (); nghỉ; } case RIGHT: {stateMachine-> raise_right (); nghỉ; } default: {break; }}}}

Bước 4: Điều khiển HMI

Mỗi trạng thái được sử dụng cho một phần của menu. Có các trạng thái phụ, nơi ứng dụng - ví dụ như đồng hồ bấm giờ - sẽ được thực thi.

Với thiết kế này, giao diện có thể được mở rộng dễ dàng. Các menu bổ sung có thể được thêm vào một cách đơn giản bằng cách sử dụng cùng một mẫu thiết kế. Đọc giá trị của một cảm biến và hiển thị nó trong mục menu thứ tư không phải là vấn đề lớn.

Hiện tại, chỉ có trái và phải được sử dụng làm điều khiển. Nhưng lên và xuống cũng có thể được sử dụng như một tiện ích mở rộng điều hướng trong menu chính. Chỉ nút chọn sẽ được sử dụng để nhập một mục menu cụ thể.

Bước 5: Xử lý các trạng thái

Xử lý các tiểu bang
Xử lý các tiểu bang

Menu trạng thái tay cầm chỉ được sử dụng như một ví dụ khác về điều hướng. Sử dụng lên, xuống, phải hoặc trái cho phép chuyển đổi giữa các trạng thái. Trạng thái hiện tại sẽ luôn được in trên dòng thứ hai trên Màn hình LCD.

Bước 6: Đồng hồ bấm giờ

Đồng hồ bấm giờ
Đồng hồ bấm giờ

Đồng hồ bấm giờ khá đơn giản. Ban đầu, giá trị bộ đếm thời gian sẽ được đặt lại. Bộ hẹn giờ có thể được bắt đầu bằng cách sử dụng nút bên trái và bật tắt bằng cách sử dụng trái và phải. Sử dụng lên hoặc xuống sẽ đặt lại bộ hẹn giờ. Bộ hẹn giờ cũng có thể được đặt về 0 bằng cách sử dụng nút chọn hai lần - thoát khỏi menu và nhập lại một lần nữa, vì bộ hẹn giờ sẽ được đặt về 0 bằng cách nhập đồng hồ bấm giờ ban đầu.

Bước 7: Bộ đếm

Quầy tính tiền
Quầy tính tiền

Ít nhất, có một bộ đếm được thực hiện. Vào trạng thái bộ đếm sẽ đặt lại bộ đếm. Nó có thể được khởi động bằng cách sử dụng bất kỳ nút nhấn nào, ngoại trừ nút chọn. Nó được triển khai như một bộ đếm lên / xuống đơn giản, giá trị này không được nhỏ hơn 0.

Bước 8: Mô phỏng

Bước 9: Lấy ví dụ

Bạn có thể tải xuống IDE tại đây: YAKINDU Statechart Tools

Khi bạn đã tải xuống IDE, bạn sẽ tìm thấy ví dụ qua Tệp -> N ew -> Ví dụ

Nó miễn phí để sử dụng cho những người có sở thích, nhưng bạn cũng có thể dùng thử 30 ngày.

Đề xuất: