for

Giới thiệu

Hàm for có chức năng làm một vòng lặp. Vậy vòng lặp là gì? Hãy hiểu một cách đơn giản, nó làm đi làm lại một công việc có một tính chất chung nào đó. Chẳng hạn, bạn bật tắt một con LED thì dùng digitalWrite xuất HIGH delay rồi lại LOW rồi lại delay. Nhưng nếu bạn muốn làm nhiều hơn 1 con LED thì mọi đoạn code của bạn sẽ dài ra (không đẹp và khi chỉnh sửa thì chẳng lẻ ngồi sửa lại từng dòng?

Với 1 con led, bạn lập trình như thế này

digitalWrite(led1,HIGH);
delay(1000);
digitalWrite(led1,LOW);
delay(1000);

Với 10 con led, nếu bạn không dùng for, đoạn code nó sẽ dài như thế này

digitalWrite(led1,HIGH);
delay(1000);
digitalWrite(led1,LOW);
delay(1000);
digitalWrite(led2,HIGH);
delay(1000);
digitalWrite(led2,LOW);
delay(1000);
...
digitalWrite(led10,HIGH);
delay(1000);
digitalWrite(led10,LOW);
delay(1000);

Nếu như vậy thì bạn có còn muốn lập trình và suy nghĩ về một led ma trận có còn nữa không ? Chắc chắn là không rồi, vì vậy hàm for ra đời để giúp bạn nhìn cuộc sống một cách tươi đẹp hơn ! smiley

Bây giờ hãy lấy một ví dụ đơn giản như sau:

Tôi muốn xuất 10 chữ số (từ 1 - 10) ra Serial. Hãy giúp tôi lập trình trên Arduino để làm được việc ấy!

Nếu bạn chưa đọc bài này và cũng chưa biết kiến thức về for, bạn sẽ lập trình như sau:

void setup() {
    Serial.begin(9600);
    Serial.println(1);
    Serial.println(2);
    Serial.println(3);
    Serial.println(4);
    Serial.println(5);
    Serial.println(6);
    Serial.println(7);
    Serial.println(8);
    Serial.println(9);
    Serial.println(10);
}
void loop() {
    // không làm gì cả;
}

Đoạn code khá dài và lặp đi lặp lại câu lệnh Serial.println

Nhưng sau khi biết về hàm for bạn chỉ cần một đoạn code cực kì ngắn như sau:

void setup(){
    Serial.begin(9600);
    int i;
    for (i = 1;i<=10;i=i+1) {
        Serial.println(i);
    }
}
void loop(){
}

Cấu trúc

Theo quan điểm của tôi, nếu bạn chưa biết về vòng lặp hoặc hàm for, để hiểu được hàm for, bạn cần nắm được 4 phần:

  1. Hàm for là một vòng lặp có giới hạn - nghĩa là chắc chắn nó sẽ kết thúc (không sớm thi muộn).
  2. Nó sẽ bắt đầu từ một vị trí xác định và đi đến một vị trí kết thúc.
  3. Cứ mỗi bước xong, nó lại thực hiện một đoạn lệnh
  4. Sau đó, nó lại bước đi tiếp, nó có thể bước 1 bước hoặc nhiều bước, nhưng không được thay đổi theo thời gian.

Theo ví dụ trên, ta có đoạn code sử dụng hàm for như sau:

for (i = 1;i<=10;i = i + 1) {
    Serial.println(i);
}

Hàm for trong ví dụ này sẽ :

  1. Chắc chắn nó sẽ xử lý đoạn code Serial.println(i); 10 lần
  2. Chạy từ vị trí xuất phát là 1, đến vị trí kết thúc là 10 // i = 1 ; i <= 10
  3. Cứ mỗi lần bước xong (tính luôn cả vị trí xuất phát tại thời điểm i = 1) thì nó lại chạy lệnh Serial.println(i);. Trong đó biến i, dân khoa học gọi là biến con chạy, còn tôi gọi là vị trí của thằng i smiley
  4. Mỗi lần chạy xong, thằng i lại bước thêm 1 bước nữa. Chừng nào mà thằng i  còn <= 10 thì nó còn quay về bước 3

Bạn có thấy nó dễ hiểu không? Bây giờ tôi sẽ nói nó theo một cách khoa học qua cú pháp của hàm for (tôi sẽ chia làm 2 loại để các bạn dễ dàng ứng dụng vào code của mình).

  • For tiến (xuất phát từ một vị trí nhỏ chạy đến vị trí lớn hơn) <vị trí kết thúc> bé hơn <vị trí kết thúc>
for (<kiểu dữ liệu nguyên> <tên thằng chạy> = <vị trí xuất phát>; <tên thằng chạy> <= <vị trí kết thúc>; <tên thằng chạy> += <mỗi lần bước mấy bước>) {
    <đoạn câu lệnh>;
}
  • For lùi (xuất phát từ một vị trí lớn chạy về vị trí nhỏ hơn) <vị trí xuất phát> lớn hơn <vị trí kết thúc>
for (<kiểu dữ liệu nguyên> <tên thằng chạy> = <vị trí xuất phát>; <tên thằng chạy> <= <vị trí kết thúc>; <tên thằng chạy> -= <mỗi lần lùi mấy bước>) {
    <đoạn câu lệnh>;
}

Và khi đã hiểu được một cách sâu sắc thì đây là cú pháp chính của hàm For:

for (<biến chạy> = <start>;<điều kiện>;<bước>) {
//lệnh
}

Xem thêm bài array để xem cách dùng for và array nhé!

lên
24 thành viên đã đánh giá bài viết này hữu ích.
Các bài viết cùng tác giả

Tự làm game Snake - Rắn ăn mồi với Arduino - Ví dụ về việc sử dụng thư viện XỬ LÝ BẤT ĐỒNG BỘ

Nếu là một người theo dõi cộng đồng Arduino Việt Nam trong thời gian dài, bạn sẽ để ý rằng, mảng Game là một mảng nhận đươc khá ít sự quan tâm vì độ khó của nó. Điển hình là chỉ có bài viết hướng dẫn làm game Flappy bird và Cá ăn mồi của bạn nguoimegame. Tuy nhiên, hôm nay, khi mình cảm thấy đã đủ lượng kiến thức và lượng thư viện nền tảng mình đã viết trước đó, mình sẽ hướng dẫn các bạn cách viết một game đơn giản với Arduino.

lên
19 thành viên đã đánh giá bài viết này hữu ích.

CCA - Kết quả Cuộc thi Sáng tạo với Arduino.vn

Như vậy là đã kết thúc mùa CCA đầu tiên, hẳn trong chúng ta đều mong chờ kết quả của Cuộc thi Sáng tạo với Arduino.vn để biết được rằng thế hệ trẻ đàn em có nuôi dưỡng ước mơ tự động hóa như chúng ta đã và đang làm hay không? Vừa qua, BGK gồm các bạn trong BQT và Kiểm tra viên đã chấm online các nhóm dự án thông qua skype. Và bây giờ, trong bài viết này, chúng ta sẽ biết được ngay kết quả.

lên
15 thành viên đã đánh giá bài viết này hữu ích.