Thứ Hai, 3 tháng 6, 2024

Bài 7: Cấu trúc vòng lặp For- Arduino

 CẤU TRÚC VÒNG LẶP FOR-ARDUINO


  1. GIỚI THIỆU

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.

Mục đích của vòng lặp là để giải quyết các công việc có sự lặp đi lặp lại nhiều lần bằng những dòng code ngắn gọn nhất.

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.


  1. CÚ PHÁP


  • Cú pháp tổng quát của vòng lặp For:


for (khởi tạo giá trị biến lặp; điều kiện lặp; cập nhật biến lặp)

{

    // các lệnh cần lặp

}

Ví dụ minh hoạ

int x;

void setup(){

Serial.begin(9600);

for(x = 0; x <10; x = x + 1) 

{

// thực hiên nhóm lệnh

Serial.println(x);

}

}

void loop() {

}


  • 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 biến> = <vị trí xuất phát>; <tên biến> <= <vị trí kết thúc>; <tên biến> += <bước nhảy>) {

    <đ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 biến> = <vị trí xuất phát>; <tên biến> <= <vị trí kết thúc>; <tên biến> -= <bước nhảy>) {

    <đoạn câu lệnh>;

}

Lưu ý: Một số kiến thức cũ đã được giới thiệu trong buổi trước

Để thực hiện các phép so sánh trong C, chúng ta sử dụng các toán tử so sánh trong C được liệt kê sau đây. 

Toán tử

Biểu thức điều kiện

Ý nghĩa

==

x == y

x và y bằng nhau

!=

x != y

x và y không bằng nhau

>

x > y

x lớn hơn y

<

x < y

x nhỏ hơn y

>=

x >= y

x bằng hoặc lớn hơn y

<=

x <= y

x bằng hoặc nhỏ hơn y


Để so sánh hai giá trị có bằng nhau hay không, chúng ta sử dụng toán tử so sánh bằng trong C == hoặc là toán tử so sánh khác trong C !=.

Nếu hai giá trị bằng nhau, toán tử so sánh bằng trong C == trả về True và ngược lại nếu hai giá trị không bằng nhau, toán tử so sánh khác trong C != sẽ trả về True.

Chúng ta hãy cùng xem một số ví dụ cụ thể sử dụng phép so sánh bằng trong C sau đây:

So sánh 2 số trong C

Khi sử dụng phép so sánh bằng để so sánh hai số trong C, không những chúng ta có thể so sánh giữa số nguyên với số nguyên, số thực với số thực, mà còn có thể so sánh các số có kiểu dữ liệu khác nhau như số nguyên với số thực v.v..

Ví dụ:

1 == 1

//> true

1 == 2

//> False

1 == 1.0

//> True

1 != 2

//> True

1 != 1

//> False


Với các toán tử, ++ và - -, vị trí của chúng đặt trước hoặc sau toán hạng có ý nghĩa khác nhau:

Đứng trước: với  ++a,a  sẽ tăng lên 1, sau đó biểu thức mới thực hiện 

Đứng sau: Với a ++ thì biểu thức sẽ được thực hiện với giá trị hiện tại của a , sau đó a mới tăng lên 1, cụ thể được cho bảng sau:



Ví dụ 


Ví dụ 1: Viết chương trình sử dụng vòng lặp for in các số từ 1-10 theo thứ tự tăng dần

Lời giải: https://wokwi.com/projects/390146759820887041

Ví dụ 2: Viết chương trình sử dụng vòng lặp for in các số từ 1-10 theo thứ tự giảm dần

Lời giải: https://wokwi.com/projects/390147002931175425

Ví dụ 3: Viết chương trình sử dụng vòng lặp for tính tổng các số chia hết cho 2  trong phạm vi từ 0 đến 100 in kết quả ra màn hình LCD-I2C

Ví dụ 4: Viết chương trình sử dụng vòng lặp for tính tổng các số chia hết cho 3 và 5 trong phạm vi từ 0 đến 100 in kết quả ra màn hình LCD-I2C


  1. BÀI TẬP THỰC HÀNH

Bài 1: Lập trình điều khiển 04 đèn led tuần tự theo pin 10,11,12,13, sử dụng vòng lặp for; hàm digitalWrite; pinMode; vòng lặp for để viết chương trình.

Bài 2: Lập trình điều khiển 04 đèn led tuần tự theo pin 10,11,12,13, sử dụng vòng lặp for; hàm digitalWrite; pinMode; vòng lặp for để viết chương trình và hiển thị tên đèn led lên màn hình LCD.


  1. Sử dụng chương trình với hàm thông thường


https://wokwi.com/projects/390142715005244417

void setup() {

 

pinMode(10, OUTPUT);

pinMode(11, OUTPUT);

pinMode(12, OUTPUT);

pinMode(13, OUTPUT);

}


void loop() {

digitalWrite(10, HIGH);

delay(1000);

digitalWrite(10, LOW);

delay(1000);

digitalWrite(11, HIGH);

delay(1000);

digitalWrite(11, LOW);

delay(1000);

digitalWrite(12, HIGH);

delay(1000);

digitalWrite(12, LOW);

delay(1000);

digitalWrite(13, HIGH);

delay(1000);

digitalWrite(13, LOW);

delay(1000);


}


  1. Sử dụng vòng lặp for tiến - lùi

https://wokwi.com/projects/390142252519191553


void setup() {

  for (int i = 10; i <=13; i++) {

    pinMode(i, OUTPUT);

  }

}


void loop() {

  for (int i = 10; i <=13; i++) {

    digitalWrite(i, HIGH);

    delay(1000);

    digitalWrite(i, LOW);

  }

}

i++ tương đương phép gán i=i+1

i– tương đương phép gán i=i-1



Quy trình thực hiện


Bước 1: Khởi tạo giá trị biến i = 10


Bước 2: Kiểm tra điều kiện i <=13.


Bước 3: Nếu điều kiện thỏa mãn thì thực hiện các câu lệnh.


Bước 4: Giá trị tăng lên i = i+1.


Bước 5: Lặp lại bước 2. 


Bước 6: Lặp lại bước 3.


Cho đến khi i <= 13, không còn thỏa mãn điều kiện i <=13 thì chương trình sẽ bỏ qua các câu lệnh và thực hiện các đoạn mã tiếp theo.

Giải thích Vòng lặp For tiến và For lùi

Ví dụ: https://wokwi.com/projects/390143995485643777


void setup()

{

pinMode(10,OUTPUT);

pinMode(11,OUTPUT);

pinMode(12,OUTPUT);

pinMode(13,OUTPUT);

}

void loop(){

for( int i=10 ; i<=13 ; i++){

digitalWrite( i , HIGH );

delay(200);

}

for( int j=13 ; j>=10 ; j--){

digitalWrite( j , LOW );

delay(200);

}

}

  • Các dòng code trong void setup để thiết lập cho chương trình hiểu các chân LED là các chân xuất tín hiệu kỹ thuật số (digital).


LED sáng​

LED tắt​

for( int i=10 ; i<=13 ; i++){

digitalWrite( i , HIGH );

delay(200);

}

for( int j=13 ; j>=10 ; j--){

digitalWrite( j , LOW ) ;

delay(200);

}

-int i = 10: để thiết lập giá trị i ban đầu của vòng lặp.

-i<=13 : điều kiện nếu đúng i lớn bằng 8 sẽ kết thúc vòng lặp còn nếu như khác thì vẫn thực hiện câu lệnh trong vòng lập.

-i++ : cứ mỗi lần thực hiện hết câu lệnh trong vòng lặp thì biến i sẽ cộng thêm 1, nhằm mục đích cộng dồn đến giá trị điều kiện giúp kết thúc vòng lặp như mong muốn.

-digitalWrite( i , HIGH ) : để bật sáng con LED thứ i đã thiết lập trước

-delay(200) :để tạm dùng chương trình trong 0.2s

-int j = 13: để thiết lập giá trị j ban đầu của vòng lặp.

-j<=10 : điều kiện nếu đúng j lớn bằng 10 sẽ kết thúc vòng lặp còn nếu như khác thì vẫn thực hiện câu lệnh trong vòng lập.

-j-- : cứ mỗi lần thực hiện hết câu lệnh trong vòng lặp thì biến j sẽ trừ đi 1, nhằm mục đích trừ dần đến giá trị điều kiện giúp kết thúc vòng lặp như mong muốn.

-digitalWrite( i , LOW) : để bật tắt con LED thứ j đã thiết lập trước




VÒNG LẶP WHILE


  1. GIỚI THIỆU

Vòng lặp while sẽ lặp liên tục và vô hạn, cho đến khi biểu thức bên trong dấu ngoặc, () trở thành sai. Phải có gì đó thay đổi biến được kiểm tra, nếu không vòng lặp while sẽ không bao giờ thoát. Nó có thể nằm trong code của bạn, chẳng hạn như một biến tăng dần hoặc một điều kiện bên ngoài, chẳng hạn như kiểm tra cảm biến.


  1. CÚ PHÁP

Cú pháp

while (điều kiện) {


  // các câu lệnh

}


Ví dụ:

var = 0;

while (var < 200) {

  // do something repetitive 200 times



  var++;



Ví dụ:https://wokwi.com/projects/390872344142859265



HÀM TONE()


I.GIỚI THIỆU


Tạo ra một sóng vuông có tần số được chỉ định (và 50% chu kỳ làm việc) trên một chân. Một thời lượng có thể được chỉ định, nếu không thì sóng sẽ tiếp tục cho đến khi có lệnh gọi đến noTone(). Có thể kết nối chân với bộ rung piezo hoặc loa khác để phát âm thanh. Mỗi lần chỉ có thể tạo ra một giai điệu. Nếu một âm báo đã được phát trên một chân khác, thì lệnh gọi đến tone() sẽ không có hiệu lực. Nếu âm báo đang phát trên cùng một chân, cuộc gọi sẽ đặt tần số của nó.


Việc sử dụng hàm tone() sẽ ảnh hưởng đến đầu ra PWM trên các chân 3 và 11 (trên các bo mạch không phải Mega). Không thể tạo âm thấp hơn 31Hz. 


Cú pháp


tone(chân, tần số)

tone(chân, tần số, thời lượng)

Thông số

chân: chân Arduino để tạo ra âm báo.

tần số: tần số của âm trong hertz. Các kiểu dữ liệu được phép: unsigned int.

thời lượng: thời lượng của âm báo tính bằng mili giây (tùy chọn). Các kiểu dữ liệu được phép: unsigned long.


Bài tập: 


Không có nhận xét nào:

Đăng nhận xét