Tôi đã sử dụng đủ các sản phẩm với bộ vi điều khiển nhúng và giao diện người dùng không phản hồi để biết rằng nó có thể tạo hoặc phá vỡ một sản phẩm. Ngay cả một chút chậm trễ hoặc độ trễ giữa các lần nhấn nút và cập nhật màn hình, hoặc các lần nhấn nút bị bỏ qua hoặc tính hai lần, có thể cực kỳ bực bội.
Những mẫu thiết kế nào có thể được sử dụng để đối phó với đầu vào của người dùng (từ các nút) và cập nhật màn hình mà không gây ra các vấn đề này?
Tôi hiện đang sử dụng loại mẫu sau (điều này được đơn giản hóa đến mức tối thiểu):
#include <Bounce.h>
#define GREEN_LED 6 // Pin for green LED
#define BUTTON_PIN 15 // Pin for button - uses external pull down so active high
#define DISPLAY_REFRESH_INT 100 // How many MS between display updates
Bounce button = Bounce(BUTTON_PIN, 5);
// To signal between the button read and the display update
bool ledState = false;
// Used to keep track of last display update
long displayUpdate = 0;
void setup()
{
pinMode(GREEN_LED, OUTPUT);
pinMode(BUTTON_PIN, INPUT);
}
void loop()
{
// Read the button status
if (button.update())
{
if (button.risingEdge())
{
ledState = !ledState;
}
}
// Update the display periodically
if (millis() - displayUpdate > DISPLAY_REFRESH_INT)
{
displayUpdate = millis();
digitalWrite(GREEN_LED, ledState);
}
}
tùy chọn khác là gì ở đó? Có bao giờ đáng sử dụng các ngắt thay đổi pin để đọc các nút (nếu chúng ta không xem xét thời lượng pin!).