Tự động hóa

Arduino Thực hành : Trạng thái nút nhấn - Phần 2

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

About Mr. Facebook

0 nhận xét:

Đăng nhận xét