Ở bài trước mình được học cách đọc trạng thái đơn giản. Giờ nâng cao hơn chút nhé
Bài 3: Đếm số lần nhấn nút, và xuất ra màn hình. Ở ví dụ này, ta sẽ có hai biến của nút nhấn (hiện tại và ban đầu) để so sánh, nếu nút nhấn được nhấn thì hiện tại sẽ khác ban đầu và ngược lại.
#include <Arduino.h>
int bandau;
int hientai;
int led = 13;
int button = 8;
int dem;
void setup() {
Serial.begin(9600);
pinMode(led, OUTPUT);
pinMode(button, INPUT_PULLUP);
digitalWrite(button, 1);
}
void loop() {
hientai=digitalRead(button);
if(hientai != bandau)
{
if (hientai == 0)
{
dem+=1;
}
bandau=hientai; // Đảo trạng thái của nút nhấn lưu lại cho lần kiểm tra tiếp theo
}
Serial.println(String("Số lần nhấn nút của bạn là: ") + dem);
delay(50);
}
Bài 4:Từ bài tập số 3, ta nâng cao hơn chút, Dùng một nút nhấn và 1 đèn led. Nút nhấn ấn xuống đèn sáng, ấn thêm một lần nữa thì đèn tắt. Tức là ghép module bài 3 ta đã giải ở trên thêm module led.
Có khá nhiều cách để giải bài toán này.
Cách 1: dùng hàm đếm chia couter lấy số dư.
#include <Arduino.h>
int nutnhan = 8;
int den = 13;
int macdinh = 1;
int hientai;
int dem=0;
void setup()
{
Serial.begin(9600);
pinMode (nutnhan, INPUT_PULLUP);
pinMode (den, OUTPUT);
}
void loop()
{
hientai = digitalRead(nutnhan);
Serial.print ("Trạng thái hiện tại: ");
Serial.print(hientai);
Serial.print (" ");
Serial.print ("Số đếm: ");
Serial.println(dem);
//delay (500);
if(hientai != macdinh)
{
if(hientai == 0)
{
dem+=1;
}
macdinh = hientai;
}
if( (dem%2) == 1 )
{
digitalWrite(den,HIGH);
}
else
{
digitalWrite(den,LOW);
}
}
Cách 2:
#include <Arduino.h>
int nutnhan=8;
int led=13;
int trangthailed=0;
void setup()
{
Serial.begin(9600);
pinMode(led, OUTPUT);
pinMode(nutnhan,INPUT_PULLUP);
digitalWrite(led,LOW);
}
void loop()
{
int trangthai=digitalRead(nutnhan);
int ledsang=digitalRead(led);
if(trangthai==0 && ledsang==trangthailed)
{
digitalWrite(led, !trangthailed);
Serial.print ("Trạng thái hiện tại: ");
Serial.print(trangthailed);
delay(500);
trangthailed= !trangthailed;
}
}
ưfsdfsdfsdf
Cách 3: sử dụng hàm ngắt
int led = 13;
volatile int trangthai = LOW; // khai báo biến kiểu volatile, tránh sai số trong quá trình thực hiện ngắt.
void setup() // đoạn chương trình cài đặt
{
pinMode(led, OUTPUT); // khai báo led là ngõ ra
digitalWrite(2, HIGH); // Treo chân ngắt 0, chân số 2 lên mức cao.
attachInterrupt(0, daoled, CHANGE); // khai báo ngắt 0, chương trình con daoled, chế độ có sự
// thay đổi là sinh ngắt
}
void loop() // đoạn chương trình chính, vòng lặp vô tận.
{
digitalWrite(led, trangthai); // gán trạng thái cho chân led.
}
void daoled() // chương trình con ngắt, khi có ngắt xảy ra sẽ thực hiện chương trình này.
{
trangthai = !trangthai; // đảo trang thái.
}
Bài 5: tăng giảm giá trị bằng nút nhấn
Button 1: kết nối chân D4, nút thứ 2 : kết nối chân D5 trên bo arduino.
#define nut 4
#define nut1 5
int giatri1;
int giatritruoc1=1;
int giatri;
int giatritruoc=1;
int dem;
void setup() {
// put your setup code here, to run once:
pinMode(nut, INPUT_PULLUP);
pinMode(nut1, INPUT_PULLUP);
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
giatri=digitalRead(nut);
giatri1=digitalRead(nut1);
// Serial.println(giatri);
if( giatri != giatritruoc )
{
if(giatri == 0)
{
dem++;
}
giatritruoc=giatri;
}
if( giatri1 != giatritruoc1 )
{
if(giatri1 == 0)
{
dem--;
}
giatritruoc1=giatri1;
}
Serial.print("dem : ");
Serial.println(dem);
}
0 nhận xét:
Đăng nhận xét