1. Thiết kế mạch điều khiển led bằng nút bấm
Cấu tạo nút bấm (button)
Nút bấm có 4 chân chia làm 2 cặp. Những chân trong cùng một cặp được nối với nhau. Khi nhấn nút, cả 4 chân của nút bấm đều được nối với nhau, cho phép dòng điện từ một chân bất kì có thể tới 3 chân còn lại.
Nguyên lý hoạt động của button trong board mạch Arduino
Button muốn hoạt động cần có nguồn dương (5V) và nguồn âm (GND). Có 1 điện trở 10kΩ nối bên nguồn âm (GND). Trạng thái nút bấm là bấm nút (giá trị nhận được là 1) hoặc không bấm nút (giá trị nhận được là 0) sẽ được lấy ở chân 2 trên Arduino.
Khi chưa nhấn nút, chân 2 của Arduino được nối với GND qua một điện trở 10kΩ, lệnh digitalRead(2) sẽ trả về giá trị 0 (LOW).
Khi nhấn nút, chân 2 của Arduino sẽ được nối trực tiếp với 5V và nối với GND thông qua 1 điện trở 10kΩ, lệnh digitalRead(2) sẽ trả về giá trị 1 (HIGH).
Mạch điều khiển led bằng nút bằng với board mạch Arduino
Gồm 1 board Arduino, 1 led, 2 điện trở, 1 button.
Có thể thiết kế mạch giả lập với Proteus như hình bên dưới.
2. Viết chương trình điều khiển led sáng tắt bằng nút bấm
int button = 9;
int led = 5;
void setup() {
pinMode(button, INPUT);//khai báo chân button có thể đọc dữ liệu
pinMode(led,OUTPUT);//khai báo chân led là ngõ ra
}
void loop() {
int buttonStatus = digitalRead(button);//đọc trạng thái button
if (buttonStatus == HIGH) {//nếu mà button được nhấn
digitalWrite(led,HIGH); //bật led
} else {//ngược lại
digitalWrite(led,LOW);//tắt led
}
}
Biến buttonStatus lưu trữ trạng thái của nút bấm. Nếu đã bấm (buttonStatus == HIGH) thì bật đèn và ngược lại.
3. Đếm số lần nhấn button
Trong nhiều trường hợp, chúng ta cần đếm số lần nhấn button. Chương trình bên dưới giúp đếm số lần nhấn button.
int button = 9;
int led = 5;
int preStateButton=LOW;//lưu trạng thái trước của button
int count = 0;//biến lưu số lần nhấn button
void setup() {
pinMode(button, INPUT);
pinMode(led,OUTPUT);
}
void loop() {
int curStateButton = digitalRead(button);//lấy trạng thái hiện tại của button
if (curStateButton==HIGH && preStateButton==LOW){
count++;
}
preStateButton=curStateButton;
}
Biến count
lưu số lần nhấn button. Ban đầu, count=0
. Biến preStateButton
lưu trạng thái trước đó của button. Biến curStateButton
lưu trạng thái hiện tại của button. Chỉ khi nào curStateButton==HIGH
(nhấn) và preStateButton==LOW
(không nhấn) thì lúc đó mới là một lần nhấn button và mới đếm là một lần nhấn.
Để hiểu rõ hơn, chúng ta cùng xem dãy các trạng thái của button: ban đầu là LOW (không nhấn) rồi nhấn (HIGH) LOW HIGH LOW HIGH LOW…Rõ ràng, một button được xem là một lần nhấn khi và chỉ khi chuyển trạng thái từ LOW sang HIGH, còn từ HIGH sang LOW thì là không nhấn button.
4. Bài tập
Bài tập 1: Thiết kế mạch gồm 1 đèn LED kết nối với Arduino qua cổng ~10 và nút bấm qua cổng 2. Xử lí khi nhấn nút lần đầu thì đèn sáng, lần 2 đèn tắt, lần 3 đèn sáng, …
Bài tập 2: Thiết kế mạch gồm 1 đèn LED và 2 nút bấm (nút tăng và nút giảm) kết nối với Arduino. Xử lý khi nhấn nút tăng sẽ tăng dần độ sáng của đèn đến hết mức thì không thể tăng được nữa, nhấn nút giảm thì giảm dần độ sáng của đèn đến hết mức thì không thể giảm được nữa.
Điều khiển led bằng nút nhấn nhấn 1 lần mà led sáng 7 thì làm sao ạ
Giúp em bài tập này vơi
– Nếu ấn S1 hệ thống ở trạng thái dèn cảnh báo (cả 2 trụ chớp đèn vàng)
– Nếu ấn S2 hệ thống ở trạng thải đèn giao thông bình thường
giải bài tập 2 giúp e với ạ
hệ thống 20 đèn LED, yêu cầu:
– Sử dụng 4 Pin: 13; 12; 11; 10; trên Arduino biết mỗi Pin điều khiển dãy 5 LED
– Kết hợp với 4 nút bấm BUTTON, mỗi nút bấm điều khiển một dãy 5 LED độc lập
– Kết hợp với biến trở POTENTIOMETER điều khiển độ sáng của một dãy đèn led
tùy chọn (sử dụng analogRead để đọc giá trị của biến trở), kết nối biến trở với Pin
Analog A0
Vì sao ko kết nối trực tiếp chân output của arduino vào nút bấm mà phải qua điện trở? trả lời sớm giúp em ạ
Chào anh, anh giúp em bài này với ạ :
“Lập trình mô phỏng động cơ DC (5V) bằng 1 nút nhấn (khi nhấn vào thì động cơ chạy, thả ra thì tắt). Và điều khiển tốc độ quay của động cơ bằng 1 nút (khi nhấn thì sẽ quay nhanh, khi thả ra thì sẽ tắt).”
Em cảm ơn ạ <3
ad có thể giúp em
vẽ sơ đồ và phương trình
Nhấn nút 1 đèn 1, Đèn 2 sáng
nhấn nút 2 dèn 1 tắt
nhấn nút 3 đèn 2 tắt
Chào em,
Em tham khảo phần 2. Viết chương trình điều khiển led sáng tắt bằng nút bấm là sẽ làm được nhé em.
Anh giúp em viết code bài tập này được ko ạ!
a. Nhấn nút 1 nhấp nháy 3 lần với chu kỳ 0,8s, sau đó sáng tắt xen kẽ với chu kỳ 1s và lặp lại.
b. Nhấn nút 2 nhấp nháy 3 lần với chu kỳ 0,6s, sau đó chạy 1 led từ trái sang phải với thời gian delay 0,5s rồi lặp lại.
c. Nhấn nút 3 off.
Chào em,
Em có thể nói rõ hơn yêu cầu đề bài: có bao nhiêu con led, chạy 1 led từ trái sang phải là sao em?
ad giúp em code bài này được không ạ
lập trình arduino tính xem từ khoảng thời gian từ lần nhấn nút trước tới lần vừa nhấn nút là bao nhiêu,. từ khoảng thơi gian giữa 2 lần nhấn nút này tính xem tốc độ là bai nhiêu
Chào em,
Em có thể tham khảo sử dụng hàm
millis()
ở bài Điều khiển led chớp tắt dùng định thời để thực hiện bài tập của em nhé.Anh có thể code giúp em bài này được không ạ
lập trình vi điều khiển
+ Ban đầu khi mới cấp điện cho vi điều khiển thì đèn tắt
+ Cho tới khi nhấn nút bấm, vi điều khiển mới hoạt động như sau:
• Nếu nhấn nút, nháy led sáng 0,5s; tắt 0.5s
* Nếu nhả nút, nháy led sáng 0,25s /tắt
Chào em,
Giả sử, chúng ta có sơ đồ mạch arduino, button và led như bên dưới:
Đoạn code bên dưới giúp xử lý theo yêu cầu của em.
int led = 9; //chân kết nối với led
int button = 5; //chân kết nối button
int ledState = LOW; //khai báo biến lưu trạng thái của led
unsigned long previousMillis = 0;
int pressButton = 0; //0 - chưa nhấn button, 1 - đã nhấn button
void setup() {
pinMode(led, OUTPUT); //khai báo chân led là ngõ ra
}
void loop() {
unsigned long currentMillis = millis();
//lấy trạng thái hiện tại của button
int curStateButton = digitalRead(button);
if (curStateButton == HIGH) {
pressButton = 1;
if (currentMillis - previousMillis >= 500) {
previousMillis = currentMillis;
if (ledState == LOW) {
ledState = HIGH; // Đổi trạng thái led
} else {
ledState = LOW; // Đổi trạng thái led
}
digitalWrite(led, ledState);
}
} else {
if (pressButton == 1) {
if (currentMillis - previousMillis >= 250) {
previousMillis = currentMillis;
if (ledState == LOW) {
ledState = HIGH; // Đổi trạng thái led
} else {
ledState = LOW; // Đổi trạng thái led
}
digitalWrite(led, ledState);
}
}
}
}