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ả

Cách học lập trình IoT với iNut cảm biến - Cách làm app điện thoại và máy tính kết nối thiết bị IoT - Tự học Node-RED

Xin chào các bạn, sau một khoảng thời gian ra đời sản phẩm iNut Cảm biến, thì nay chúng ta đã có một văn bản tài liệu chính thức để có thể dễ dàng sử dụng bo mạch iNut cảm biến để vọc vạch trong cách dự án khoa học và dự án ứng dụng.

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

Tài liệu kỹ thuật bỏ túi để lập trình Internet of Things - Vận hành, điều khiển và quản lý thiết bị qua Internet trong 1 nốt nhạc

Kính chào quý vị và các bạn!

Lập trình Internet of Things được biết đến là một thứ vô cùng khó khăn và phức tạp. Nơi này, trước đây không phải dành cho tất cả mọi người. Nhưng, để đưa Việt Nam trở thành một cường quốc về công nghệ cao và đi tắt đón đầu nhờ cuộc cách mạng công nghệ 4.0 thì bài toán Internet of Things phải được giải quyết bằng chính trí tuệ của tất cả mọi người. Cuối cùng, để giải quyết được đồ thị Đa dụng và Dễ sử dụng, iNut Node-red IDE đã ra đời, giải pháp cung cấp một phương pháp sáng tạo, cho phép người dùng lập trình ứng dụng IoT bằng những khối lệnh kéo thả với những ví dụ ngay trong app. Ngay cả một học sinh tiểu học học STEM cũng có thể làm được. Hãy cùng khám phá nhé!

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