Bài 8: Vòng lặp for trong lập trình arduino

     Vòng lặp for trong lập trình arduino là một trong những vòng lặp quan trọng trong lập trình. Để điều khiển nhiều biến và nhiều chân tín hiệu cùng lúc thì việc sử dụng vòng lặp là bắt buộc. Khi sử dụng tốt những vòng lặp thì công việc của bạn trở nên dễ dàng và hiệu quả hơn rất nhiều. Tuy nhiên, để sử dụng hiệu quả và không bị sai thì các bạn cần phải hiểu rõ từng thành phần của vòng lặp.

     Bài viết này sẽ hướng dẫn cho các bạn về cấu trúc, ý nghĩa và cách thực hiện vòng lặp for trong lập trình arduino.

  NỘI DUNG BÀI VIẾT  

  • Cấu trúc vòng lặp for
  • Ứng dụng của vòng lặp for

  1.  CẤU TRÚC VÒNG LẶP FOR  

     Chức năng: vòng lặp for được sử dụng để thực hiện những công việc lặp lại khi biến điều kiện vẫn đúng. Vòng lặp chỉ dừng lại khi biến điều kiện bị sai.

     Cú pháp:

for (<Giá trị khởi tạo biến>;<Biểu thức điều kiện>;<Biểu thức điều khiển>)
{
  Khối lệnh;
}

     Trong đó:

  • Giá trị khởi tạo biến điều khiển: là giá trị ban đầu của biến để chương trình kiểm tra điều kiện.
  • Biểu thức điều kiện: là điều kiện để vòng lặp thực hiện lại các khối lệnh bên trong nó.
  • Biểu thức điều khiển: là biểu thức thay đổi giá trị của biến điều khiển.
  • Khối lệnh: là tập hợp những lệnh của vòng lặp, lệnh này sẽ thực hiện lặp lại nhiều lần đến khi điều kiện vòng lặp bị sai mới dừng

  2. ỨNG DỤNG CỦA VÒNG LẶP FOR  

Sử dụng 3 nút nhấn điều khiển 8 led đơn

     Trong một số ví dụ, khi chúng ta cần phải điều khiển nhiều bóng đèn led, để thực hiện định nghĩa chức năng các chân điều khiển là OUTPUT. Thì điều đầu tiên là chúng ta phải thực hiện lệnh pinMode để định nghĩa. Tuy nhiên để điều kiển 8 led thì phải ghi 8 dòng lệnh khai báo như bên dưới.

void setup(){
//Doan khai bao cac chan nhan du lieu
 pinMode(2, INPUT);
 pinMode(3, INPUT);
 pinMode(4, INPUT);
 //Doan khai bao cac chan xuat du lieu
 pinMode(6, OUTPUT);
 pinMode(7, OUTPUT);
 pinMode(8, OUTPUT);
 pinMode(9, OUTPUT);
 pinMode(10, OUTPUT);
 pinMode(11, OUTPUT);
 pinMode(12, OUTPUT);
 pinMode(13, OUTPUT);
}

      Như vậy, khi chúng ta thực hiện bằng vòng lặp for thì đơn giản hơn rất nhiều. Với biến điều khiển chính là số thứ tự của chân cần định nghĩa.

void setup(){ 
//Khai bao chan nhan du lieu
 for( int i=2; i<=4; i++) 
   pinMode(i, INPUT); 

//Khai bao chan xuat du lieu
 for( int i=6; i<=13; i++) 
    pinMode(i, OUTPUT); 
}

     So sánh 2 đoạn chương trình, các bạn thấy rằng khi sử dụng vòng lặp for thì đoạn chương trình đơn giản và ngắn gọn hơn rất nhiều. Và hiển nhiên khi thực hiện các đoạn chương trình lớn thì cũng sẽ đơn giản và dễ hiểu hơn rất nhiều.

   3. ỨNG DỤNG VIẾT CHƯƠNG TRÌNH ĐIỀU KHIỂN 8 LED ĐƠN  

     Ví dụ: Viết chương trình sử dụng 3 nút nhấn để điều khiển 8 led đơn. Khi cấp nguồn thì tất cả 8 led đều tắt, nhấn nút ON thì sáng dần 8 led, nhấn nút INV thì tắt dần, nhấn nút OFF thì tất cả các led đều tắt.

     Sơ đồ mạch được thiết kế như hình bên dưới. Trong đó các bóng đèn led được thiết kế dưới dạng tích cực mức cao. Nghĩa là khi xuất ra tín hiệu 5V thì đèn led sẽ sáng. Mỗi đèn led sẽ sử dụng 1 điện trở 1K ohm để hạn dòng. Có 3 nút nhấn, mỗi nút nhấn sẽ sử dụng điện trở để chống ngắn mạch khi nhấn. Ngoài ra tại các nút nhấn có gắn thêm các bóng đèn để kiểm tra khi nhấn nút.

     Để hiểu rõ về nguyên lý hoạt động của nút nhấn, các bạn hãy xem lại bài viết số 5bài viết số 6 của chương trình arduino.

    Các linh kiện được sử dụng

Linh kiện Số lượng
 Arduino Uno R3 1
 Điện trở 1k ohm 11
 Led đơn 11
 Nút nhấn 3
 Điện trở 100 ohm 3

    Đoạn chương trình được viết như sau

int ON; // Nut ON
int OFF; //Nut OFF
int INV; //nut INV
int tt=0;

void setup(){
 for(int i=2; i<=4; i++)
   pinMode(i, INPUT);
 for(int i=6; i<=13; i++)
   pinMode(i, OUTPUT);
//Tat tat ca cac led
 for(int i=6; i<=13; i++)
   digitalWrite(i, LOW);
}
 
void loop(){
//Nhan nut ON
 ON = digitalRead(2);
 if(ON == 0)
  { //Sang dan 
  for(int i=6; i<=13; i++)
     {
       digitalWrite(i, HIGH);
       delay(200);
     }
    tt=1;
   }
 
//Nhan nut INV
  INV = digitalRead(3);
  if ((INV == 0) && (tt == 1))
    { //Tat dan
     for (int i=13; i>=6; i--)
       {
        digitalWrite(i, LOW);
        delay(200);
       }
    tt = 0;
    }

 //Nhan nut OFF
  OFF = digitalRead(4);
  if(OFF == 0)
    {
     for (int i=6; i<=13; i++)
       digitalWrite(i, LOW);
     delay(200);  
     tt =0;
    }  
}

 

 

 


Categories:

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *