Qua quá trình làm việc với Arduino, mình thấy có một giải pháp rất hay về việc sử dụng button với Arduino. Đó là chỉ cần sử dụng một chân analog với các nút nhấn và các điện trở có trị số khác nhau, ta có thể làm ra một bàn phím. Qua bài viết này, mình xin chia sẻ thư viện mình mới viết cho vấn đề này.
Sơ đồ đi dây
Giải thích quy trình
Như các bạn đã biết về các chân analog của Arduino. Mặc định, nó có thể đọc được các giá trị điện thế từ 0 => 5V phân ra thành các giá trị từ 0 => 1023. Nói một cách khác, mỗi chân analog sẽ có 1024 mức dữ liệu. Nếu ta vận dụng một cách linh hoạt, xem lân cận một mức nào đó là điểm giữ, và khi giá trị điện thế tại chân analog rơi vào điểm giữ đó thì làm một việc gì đó. Mở rộng xe, nếu ta có nhiều điểm giữ như vậy, ta có thể làm ra những sự kiện khác nhau (bật tắt đèn các kiểu) chỉ với 1 chân analog duy nhất.
Vấn đề đặt ra là:
Làm thế nào để tạo ra điểm giữ, nói cách khác là làm thế nào để xác định được điểm giữ bằng các button?
Vậy khi tạo ra điểm giữ được rồi làm thế nào để bảo Arduino chạy một sự kiện (một hàm) nào đó?
1. Làm thế nào để tạo ra điểm giữ, nói cách khác là làm thế nào để xác định được điểm giữ bằng các button?
Chắc hẳn các bạn đã biết về hàm analogRead. Đó chính là hàm đọc giá trị điện thế và chuyển nó thành các mức dữ liệu từ 0 => 1023 (tượng chưng cho 0V và 5V). Như vậy, ta chỉ việc thay đổi mức điện áp cấp vào chân analog là sẽ xác định được một điểm dừng, để làm được điều đó, ta dùng các điện trở tạo ra cầu phân áp (Xem hình lắp mạch ở trên).
Vì sao phải là các giá trị điện trở khác nhau?
Bởi vì nếu các điện trở giống nhau => các điểm dừng trùng nhau. Vì vậy, nếu muốn các điểm dừng sẽ khác nhau => các giá trị điện trở phải khác nhau.
Để xác định được mức điểm dừng, ta chỉ việc dùng hàm analogRead đọc giá trị A0 là xong. Tuy nhiên, để làm quen với thư viện, mình xin chia sẻ đoạn code dưới để các bạn xác định điểm dừng.
#include "AnalogButton.h"
const int buttonAnalogPin = A0;
//Khởi tạo một biến toàn cục với kiểu dữ liệu là đối tượng nút nhấn analog (AnalogButton)
AnalogButton analogButton(buttonAnalogPin);
void setup()
{
//Khởi tạo serial monitor ở mức baudrate 9600
Serial.begin(9600);
}
void loop()
{
analogButton.read();
Serial.println(analogButton.getNowValue());
}
2. Vậy khi tạo ra điểm giữ được rồi làm thế nào để bảo Arduino chạy một sự kiện (một hàm) nào đó? Bạn chỉ việc thay thế các điểm dừng trên vào đoạn code mẫu dưới đây là xong!
#include "AnalogButton.h"
const int buttonAnalogPin = A0;
//các sự kiện, các bạn chỉ cần đặt tên dạng void <tên sự kiện>() {cài đặt sự kiện} là xong
void button1Pressed() {
Serial.println("Button 1 da duoc nhan!");
}
void button2Pressed() {
Serial.println("Button 2 da duoc nhan!");
}
void button3Pressed() {
Serial.println("Button 3 da duoc nhan!");
}
//Khởi tạo một biến toàn cục với kiểu dữ liệu là đối tượng nút nhấn analog (AnalogButton)
AnalogButton analogButton(buttonAnalogPin);
void setup()
{
//Khởi tạo serial monitor ở mức baudrate 9600
Serial.begin(9600);
Button button1 = {
45, //giá trị điểm dừng 1
400,//nhấn hơn 400ms mới tính 1 sự kiện
&button1Pressed// nhớ dấu & nhé
};
Button button2 = {
826,//giá trị điểm dừng 2
1000,//nhấn 1s mới tính một sự kiệ
&button2Pressed
};
Button button3 = {
908,//giá trị điểm dừng 3
1500,
&button3Pressed
};
analogButton.addButton(button1);
analogButton.addButton(button2);
analogButton.addButton(button3);
}
void loop()
{
//khi thêm thư viện này vào sketch riêng của bạn chỉ cần thêm dòng lệnh này vào nhé! Nhớ là đã chơi với Arduino chơi với button thì đừng viết chương trình sử dụng hàm delay! Nếu muốn delay hãy xem bài Timer của Đại Huỳnh trên Arduino.vn
analogButton.read();
//Serial.println(analogButton.getNowValue());
}
fsdfdsf
0 nhận xét:
Đăng nhận xét