B7 – Đếm trạng thái (Edge detection)

Một khi có thể xác định được trạng thái của công tác, ta có thể làm ứng dụng với công tắc.  Một ví dụ là đếm số lần công tắc được nhấn để ra quyết định. Với mạch điện có gắn một công tắc và điện trở treo xuống thấp (như bài trước)

Phân tích chương trình

/*
  Đếm trạng thái (phát hiện sườn xung)

This example code is in the public domain.

 */

const int  buttonPin = 2;    
const int ledPin = 13;       

// 
int buttonPushCounter = 0;   // biến lưu số lần nhấn nút
int buttonState = 0;         // trạng thái nút nhấn
int lastButtonState = 0;     // trạng thái trước đó

void setup() {
  // initialize the button pin as a input:
  pinMode(buttonPin, INPUT);
  // initialize the LED as an output:
  pinMode(ledPin, OUTPUT);
  // initialize serial communication:
  Serial.begin(9600);
}


void loop() {
  // đọc trạng thái nút nhấn
  buttonState = digitalRead(buttonPin);

  // so sánh với trạng thái trước đó
  if (buttonState != lastButtonState) {
    // nếu trạng thái nút nhấn thay đổi
    if (buttonState == HIGH) {
      // nếu nút nhấn là cao
      // tăng số đếm lên và gửi về máy tính
      buttonPushCounter++;
      Serial.println("on");
      Serial.print("number of button pushes:  ");
      Serial.println(buttonPushCounter);
    } else {
      // nếu trạng thái thấp
      // tắt
      Serial.println("off");
    }
    // chờ một khoảng thời gian để tránh nhiễu
    delay(50);
  }
  // lưu trạng thái vừa rồi
  lastButtonState = buttonState;


  // cứ mỗi 4 lần nhấn nút thì bật đèn dựa vào phép chia
//lấy số dư (%)
  if (buttonPushCounter % 4 == 0) {
    digitalWrite(ledPin, HIGH);
  } else {
    digitalWrite(ledPin, LOW);
  }

}

Leave a Reply

Your email address will not be published. Required fields are marked *