8:22 AM
0
Bạn cần làm trễ 1 lệnh nào đó thì cần có hàm thời gian, dưới đây là một số hàm thời gian thường dùng nhất.
delay


delayMicroseconds()
Giới thiệu: delayMicroseconds có nhiệm vụ dừng chương trình trong thời gian micro giây. Và cứ mỗi 1000000 micro giây = 1 giây.
Cú pháp
delayMicroseconds(micro);
Thông số: micro: thời gian ở mức micro giây. micro có kiểu dữ liệu là unsigned int. micro phải <= 16383. Con số này là mức tối đa của hệ thống Arduino, và có thể sẽ được điều chỉnh tăng trong tương lai. Và nếu bạn muốn dừng chương trình lâu hơn thì bạn cần dùng hàm delay
Trả về: không
Ví dụ:
int outPin = 8; // digital pin 8 void setup()
{
pinMode(outPin, OUTPUT); // đặt là output
} void loop()
{
digitalWrite(outPin, HIGH); // xuất 5V
delayMicroseconds(50); // đợi 50 micro giây
digitalWrite(outPin, LOW); // xuất 0V
delayMicroseconds(50); // đợi 50 micro giây
}


micros()

Giới thiệu: 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 của bạn. Nó sẽ tràn số và quay 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 bạn đã 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.
Lưu ý: 10micro giây = 1 giây
Tham số: không
Trả về: một số nguyên kiểu unsigned long là thời gian kể từ lúc thương trình Arduino được khởi động
Ví dụ
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);
}


millis()

Giới thiệu: millis() có nhiệm vụ trả về một số - 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 bạn. Nó sẽ tràn số và quay số 0 (sau đó tiếp tục tăng) sau 50 ngày.
Tham số: không
Trả về: một số nguyên kiểu unsigned long là thời gian kể từ lúc thương trình Arduino được khởi động
Ví dụ
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
delay(1000);
}
Lưu ý quan trọng: Các hàm về thời gian trong Arduino gồm millis() và micros() sẽ bị tràn số sau 1 thời gian sử dụng. Với hàm millis() là khoảng 50 ngày. Tuy nhiên, do là kiểu số nguyên không âm (unsigned long) nên ta dễ dàng khắc phục điều này bằng cách sử dụng hình thức ép kiểu.
unsigned long time;
byte ledPin = 10;
void setup()
{
// khởi tạo giá trị biến time là giá trị hiện tại
// của hàm millis();
time = millis();
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, LOW);
} void loop() {
// Lưu ý các dấu ngoặc khi ép kiểu
// đoạn chương trình này có nghĩa là sau mỗi 1000 mili giây
// đèn Led ở chân số 10 sẽ thay đổi trạng thái
if ( (unsigned long) (millis() - time) > 1000)
{

// Thay đổi trạng thái đèn led
if (digitalRead(ledPin) == LOW)
{
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
}

// cập nhật lại biến time
time = millis();
}
}
Thông thường, nếu ta có 2 số A, B và B lớn hơn A ( B > A) thì phép trừ thu được A-B là một số âm. Nhưng khi ép kiểu unsigned long là kiểu số nguyên dương, không có số âm nên giá trị trả về là 1 số nguyên dương lớn.
Ví dụ: kết quả của phép trừ:
unsigned long ex = (unsigned long) (0 - 1);
là 4294967295, con số này chính là giá trị lớn nhất của kiểu số unsigned long

0 comments:

Post a Comment

 

Lập trình

-

Arduino Hải Phòng

,