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ả

"Độ hoàn toàn" một cổng Terminal RS-232 mà không sử dụng jack 3.5mm

Ở Việt Nam, việc một bạn học sinh mua một mạch Intel Galileo khá là khó. Trong đó, khó nhất là tiền để mua một mạch Intel Galileo, tuy nhiên, khi mua được mạch về, việc bạn có sử dụng hết chức năng của Intel Galileo hay không là một việc khác. Cái hay nhất, theo tớ nghĩ trên Intel Galileo, mà Arduino không có và bạn khó tiếp cận nhất đó là hệ điều hành Linux. Thực sự thì có nhiều cách để vào Linux của Intel Galileo. Tuy nhiên, nếu bạn muốn cài một hệ điều hành xịn như Debian để biến Intel Galileo trở thành một "máy tính" siêu "xịn" thì bạn buộc phải dùng tới cổng RS - 232. Nếu ở các trung tâm công nghệ lớn thì bạn có thể dễ dàng tìm mua các cổng "RS-232 to DB9" để dễ dàng làm theo các bài hướng dẫn trước. Tuy nhiên, không phải ai cũng may mắn như vậy, trong bài viết này, chúng ta sẽ tiếp cận với một cách khác mà tớ đã sử dụng để giải quyết bài toán không có cáp "RS-232 to DB9".

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

Button - Nút bấm

Có lẽ chúng ta đã quá quen với các loại button, nút nhấn rồi. Tuy nhiên, có thể, chỉ có thể thôi nhé, bạn vẫn chưa biết hết về các loại nút nhấn phổ biến. Vì vậy, hôm nay, mình sẽ tổng hợp giúp bạn các loại button phổ biến và cách dùng của nó.

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