Arduino - Mảng

Mảng là một nhóm các vị trí bộ nhớ liên tiếp có cùng kiểu. Để tham chiếu đến một vị trí hoặc phần tử cụ thể trong mảng, chúng ta chỉ định tên của mảng và số vị trí của phần tử cụ thể trong mảng.

Hình minh họa dưới đây cho thấy một mảng số nguyên được gọi là C chứa 11 phần tử. Bạn tham chiếu đến bất kỳ phần tử nào trong số các phần tử này bằng cách đặt tên mảng theo sau là số vị trí của phần tử cụ thể trong dấu ngoặc vuông ([]). Số vị trí được gọi chính thức hơn là chỉ số con hoặc chỉ số (số này chỉ định số phần tử từ đầu mảng). Phần tử đầu tiên có chỉ số dưới 0 (không) và đôi khi được gọi là phần tử số không.

Do đó, các phần tử của mảng C là C [0] (phát âm là “C phụ 0”), C [1], C [2], v.v. Chỉ số con cao nhất trong mảng C là 10, nhỏ hơn 1 so với số phần tử trong mảng (11). Tên mảng tuân theo các quy ước giống như các tên biến khác.

Chỉ số con phải là một số nguyên hoặc biểu thức số nguyên (sử dụng bất kỳ kiểu tích phân nào). Nếu một chương trình sử dụng một biểu thức làm chỉ số con, thì chương trình sẽ đánh giá biểu thức để xác định chỉ số con. Ví dụ, nếu chúng ta giả sử rằng biến a bằng 5 và biến b bằng 6, thì câu lệnh thêm 2 vào phần tử mảng C [11].

Tên mảng được chỉ định con là một giá trị, nó có thể được sử dụng ở phía bên trái của một phép gán, giống như các tên biến không phải mảng có thể.

Chúng ta hãy kiểm tra mảng C trong hình đã cho, kỹ hơn. Tên của toàn bộ mảng là C. 11 phần tử của nó được gọi là C [0] đến C [10]. Giá trị của C [0] là -45, giá trị của C [1] là 6, giá trị của C [2] là 0, giá trị của C [7] là 62 và giá trị của C [10] là 78.

Để in tổng các giá trị có trong ba phần tử đầu tiên của mảng C, chúng ta sẽ viết:

Serial.print (C[ 0 ] + C[ 1 ] + C[ 2 ] );

Để chia giá trị của C [6] cho 2 và gán kết quả cho biến x, chúng ta sẽ viết:

x = C[ 6 ] / 2;

Khai báo Mảng

Mảng chiếm không gian trong bộ nhớ. Để chỉ định kiểu của các phần tử và số phần tử theo yêu cầu của một mảng, hãy sử dụng một khai báo có dạng:

type arrayName [ arraySize ] ;

Trình biên dịch dự trữ lượng bộ nhớ thích hợp. (Nhớ lại rằng một khai báo, dự trữ bộ nhớ được gọi đúng hơn là một định nghĩa). Kích thước mảng phải là một hằng số nguyên lớn hơn 0. Ví dụ, để yêu cầu trình biên dịch dành 11 phần tử cho mảng số nguyên C, hãy sử dụng khai báo:

int C[ 12 ]; // C is an array of 12 integers

Mảng có thể được khai báo để chứa các giá trị của bất kỳ kiểu dữ liệu không tham chiếu nào. Ví dụ, một mảng kiểu chuỗi có thể được sử dụng để lưu các chuỗi ký tự.

Ví dụ về sử dụng mảng

Phần này đưa ra nhiều ví dụ minh họa cách khai báo, khởi tạo và thao tác với mảng.

Ví dụ 1: Khai báo một mảng và sử dụng một vòng lặp để khởi tạo các phần tử của mảng

Chương trình khai báo một mảng số nguyên 10 phần tử n. Các dòng a – b sử dụng aForcâu lệnh để khởi tạo các phần tử mảng thành số không. Giống như các biến tự động khác, mảng tự động không được khởi tạo hoàn toàn bằng 0. Câu lệnh đầu ra đầu tiên (dòng c) hiển thị tiêu đề cột cho các cột được in trong câu lệnh for tiếp theo (dòng d – e), câu lệnh này sẽ in mảng ở định dạng bảng.

Example

int n[ 10 ] ; // n is an array of 10 integers

void setup () {

}

void loop () {
   for ( int i = 0; i < 10; ++i ) // initialize elements of array n to 0 {
      n[ i ] = 0; // set element at location i to 0
      Serial.print (i) ;
      Serial.print (‘\r’) ;
   }
   for ( int j = 0; j < 10; ++j ) // output each array element's value {
      Serial.print (n[j]) ;
      Serial.print (‘\r’) ;
   } 
}

Result - Nó sẽ tạo ra kết quả sau -

Element Value

0

1

2

3

4

5

6

7

8

9

0

0

0

0

0

0

0

0

0

0

Ví dụ 2: Khởi tạo một mảng trong một khai báo với một danh sách bộ khởi tạo

Các phần tử của một mảng cũng có thể được khởi tạo trong khai báo mảng bằng cách theo sau tên mảng với dấu bằng và danh sách bộ khởi tạo được phân tách bằng dấu phẩy được phân tách bằng dấu ngoặc nhọn. Chương trình sử dụng danh sách bộ khởi tạo để khởi tạo một mảng số nguyên có 10 giá trị (dòng a) và in mảng ở định dạng bảng (dòng b – c).

Example

// n is an array of 10 integers
int n[ 10 ] = { 32, 27, 64, 18, 95, 14, 90, 70, 60, 37 } ;

void setup () {

}

void loop () {
   for ( int i = 0; i < 10; ++i ) {
      Serial.print (i) ;
      Serial.print (‘\r’) ;
   }
   for ( int j = 0; j < 10; ++j ) // output each array element's value {
      Serial.print (n[j]) ;
      Serial.print (‘\r’) ;
   } 
}

Result - Nó sẽ tạo ra kết quả sau -

Element Value

0

1

2

3

4

5

6

7

8

9

32

27

64

18

95

14

90

70

60

37

Ví dụ 3: Tính tổng các phần tử của một mảng

Thông thường, các phần tử của một mảng đại diện cho một loạt các giá trị được sử dụng trong một phép tính. Ví dụ: nếu các phần tử của một mảng đại diện cho điểm kỳ thi, một giáo sư có thể muốn tính tổng các phần tử của mảng và sử dụng tổng đó để tính điểm trung bình của lớp cho kỳ thi. Chương trình tính tổng các giá trị có trong mảng số nguyên 10 phần tửa.

Example

const int arraySize = 10; // constant variable indicating size of array
int a[ arraySize ] = { 87, 68, 94, 100, 83, 78, 85, 91, 76, 87 };
int total = 0;

void setup () {

}
void loop () {
   // sum contents of array a
   for ( int i = 0; i < arraySize; ++i )
      total += a[ i ];
   Serial.print (“Total of array elements : ”) ;
   Serial.print(total) ;
}

Result - Nó sẽ tạo ra kết quả sau -

Total of array elements: 849

Mảng rất quan trọng đối với Arduino và cần được chú ý nhiều hơn. Các khái niệm quan trọng sau đây liên quan đến mảng phải rõ ràng đối với Arduino:

S.NO. Khái niệm & Mô tả
1 Chuyển Mảng đến Hàm

Để truyền đối số mảng cho một hàm, hãy chỉ định tên của mảng mà không có bất kỳ dấu ngoặc nào.

2 Mảng đa chiều

Mảng có hai thứ nguyên (tức là chỉ số con) thường đại diện cho bảng giá trị bao gồm thông tin được sắp xếp theo hàng và cột.