You are on page 1of 15

BÀI 6: CÁC HÀM ĐẾM THỜI

GIAN
TRONG ARDUINO
BÀI 6: CÁC HÀM ĐẾM THỜI GIAN TRONG
ARDUINO
Mục tiêu:
-Sử dụng thành thạo
các hàm đếm thời gian
trong arduino
-Viết được chương
trình ứng dụng các hàm
đếm thời gian

AUT208 Lập trình Arduino


6.1. Lý thuyết liên
quan

1.Hàm delay(ms); có nhiệm vụ dừng chương trình trong thời gian mili
giây. ms: thời gian ở mức mili giây. ms có kiểu dữ liệu là unsigned long.
2.Hàm: delayMicroseconds(micro); có nhiệm vụ dừng chương trình
trong thời gian micro giây. micro là thời gian ở mức micro giây. micro có kiểu
dữ liệu là unsigned int, micro phải <= 16383.

AUT208 Lập trình Arduino


6.1. Lý thuyết liên
quan

3. Hàm micros() có nhiệm vụ trả về một số - là thời gian (tính theo micro giây)
kể từ lúc mạch Arduino bắt đầu chương trình. Nó sẽ tràn số và quay về số 0
(sau đó tiếp tục tăng) sau 70 phút. Tuy nhiên, trên mạch Arduino 16MHz (ví dụ
Duemilanove và Nano) thì giá trị của hàm này tương đương 4 đơn vị micro
giây. Ví dụ micros() trả về giá trị là 10 thì có nghĩa chương trình của ta đã chạy
được 40 microgiây. Tương tự, trên mạch 8Mhz (ví dụ LilyPad), hàm này có giá
trị tương đương 8 micro giây.

AUT208 Lập trình Arduino


6.1. Lý thuyết liên
quan
Ví dụ hàm micros()

unsigned long time;


void setup()
{ Serial.begin(9600);
}
void loop()
{ Serial.print("Time:
"); time = micros();
// in ra thời gian kể từ
lúc chương trình
được bắt đầu
Serial.println(time);
// đợi 1 giây trước khi
tiếp tục in
delay(1000);
AUT208 Lập trình Arduino
6.1. Lý thuyết liên
quan
4. Hàm millis() có nhiệm vụ trả về một số nguyên kiểu unsigned long - là thời
gian (tính theo mili giây) kể từ lúc mạch Arduino bắt đầu chương trình của ta.
Nó sẽ tràn số và quay số 0 (sau đó tiếp tục tăng) sau 50 ngày.

unsigned long time;


void setup()
{ Serial.begin(9600);
}
void loop()
{ Serial.print("Time:
"); time = millis();
// in ra thời gian kể từ
lúc chương trình
được bắt đầu
Serial.println(time);
// đợi 1 giây trước khi
tiếp tục in
AUT208 Lập trình Arduino
delay(1000);
6.2. Ví dụ sử dụng các hàm đếm thời
gian
Bài toán: Thiết kế một
đồng hồ đếm ngược. Thời
gian được hiển thị trên LED
7 thanh. Có nút nhất để
thiết lập các giá trị cần thiết.
Hết thời gian đếm loa sẽ
kêu.

AUT208 Lập trình Arduino


6.2. Ví dụ sử dụng các hàm đếm thời
gian
Bước 1: Xây dựng module hiển
thị
Trong bài, ta sẽ sử dụng một
thư viện sẵn có để điều khiển
led 7 thanh. Để sử dụng các thư
viện có sẵn, ta chỉ cần tải về thư
viện đó (SegSev), sau đó giải
nén rồi chép vào thư mục
libraries trong thư mục cài đặt
Arduino IDE trên máy tính.
AUT208 Lập trình Arduino
6.2. Ví dụ sử dụng các hàm đếm thời
#include "SevSeg.h" //Include thư viện SevSeg
gian
SevSeg myDisplay; // Khai báo biến myDisplay là đối tượng của thư viện SegSev
void setup() {
int displayType = COMMON_ANODE; // Khai báo biến displayType tương ứng với led Anode chung.
//với led cathode chung thì sử dụng: COMMON_CATHODE
int digit1 = 8; //Pin 12 led 7 đoạn
int digit2 = 12; //Pin 9 led 7 đoạn
int digit3 = 13; //Pin 8 led 7 đoạn
int digit4 = 2; //Pin 6 led 7 đoạn
int segA = 9; //Pin 11 led 7 đoạn
int segB = 11; //Pin 7 led 7 đoạn
int segC = 4; //Pin 4 led 7 đoạn
int segD = 6; //Pin 2 led 7 đoạn
int segE = 7; //Pin 1 led 7 đoạn
int segF = 10; //Pin 10 led 7 đoạn
int segG = 3; //Pin 5 led 7 đoạn
int segDP= 5; //Pin 3 led 7 đoạn

AUT208 Lập trình Arduino


6.2. Ví dụ sử dụng các hàm đếm thời
gian

int numberOfDigits = 4; // số dấu chấm


myDisplay.Begin(displayType, numberOfDigits, digit1, digit2, digit3, digit4,
segA, segB, segC, segD, segE, segF, segG, segDP); // Bắt đầu cho phép giao
tiếp Module LED 7 đoạn với Arduino
myDisplay.SetBrightness(100); //điều chỉnh độ sáng của Module LED
}
void loop(){
myDisplay.DisplayString("abcd", 0b00001000);
/* Thể hiện chữ abcd ra bảng LED, và dãy số 0b00001000 là vị trí dấu
chấm.
Hãy thử thay những số 0 bằng số 1 hoặc ngược lại để kiểm nghiệm*/
}

AUT208 Lập trình Arduino


6.2. Ví dụ sử dụng các hàm đếm thời
gian
Bước 2: Thay đổi độ sáng của
led
Sử dụng một biến trở được kết
nối với chân A0 của Arduino.

AUT208 Lập trình Arduino


6.2. Ví dụ sử dụng các hàm đếm thời
gian
void loop(){
myDisplay.DisplayString("abcd", 0b00001000); // Thể hiện chữ AbcD ra bảng
LED, và dãy số 0b00001000 là vị trí dấu chấm. ta hãy thử thay những số 0
bằng số 1 hoặc ngược lại để kiểm nghiệm
myDisplay.SetBrightness(getBrightness()); //độ sáng
}

int getBrightness() { // Hàm đọc giá trị độ sáng từ biến trở


int value = analogRead(bientro); // Đọc giá trị biến trở và đưa vào biến
value value = map(value,0,1023,0,100); // Chuyển đổi giá trị trong thang đo
0-1023
về thang đo 0 - 100
return value; // Trả về giá trị độ sáng
}
AUT208 Lập trình Arduino
6.2. Ví dụ sử dụng các hàm đếm thời
gian
Bước 3: Xây dựng bộ đếm
ngược thời gian với các button
và phát ra loa
Ta có 2 cách để đếm ngược.
Phương án 1: time = time - 1 (
time-- ) --> xuất ra đồng hồ -->
delay(1000) --> quay
(time--) cho trở
time = 0 về đến
khi nào
AUT208 Lập trình Arduino

6.2. Ví dụ sử dụng các hàm đếm thời
gian
Phương án 2: Nếu thời điểm kể từ lúc bắt đầu chạy chương trình đến bây giờ
trừ đi THỜI ĐIỂM VỪA THỰC HIỆN LỆNH XUẤT RA ĐỒNG HỒ mà lớn hơn 1
giây thì: time = time - 1 ( time-- ) và Cập thời THỜI ĐIỂM VỪA THỰC HIỆN
LỆNH XUẤT RA ĐỒNG HỒ thời điểm hiện tại.
Nhận xét: Cách 2 có nhiều ưu điểm vượt trội, như là: Chương trình không bị
dừng hẳn (delay) nên vẫn tiếp tục tính toán được ==> ta có thể gắn được các
button. Cập nhập thời gian liên tục không gián đoạn.
Còn cách 1 làm cho đồng hồ bị dừng (sử dụng hàm delay) làm cho việc gia
công các button là không thể thực hiện được.
AUT208 Lập trình Arduino
Xem code hoàn chỉnh ở file đính kèm

Thực hành lab 3-2

AUT208 Lập trình Arduino

You might also like