array

Giới thiệu

Array là mảng (tập hợp các giá trị có liên quan và được đánh dấu bằng những chỉ số). Array được dùng trên Arduino chính là Array trong ngôn ngữ lập trình C.

Các cách khởi tạo một mảng

int myInts[6]; // tạo mảng myInts chứa tối đa 6 phần tử (được đánh dấu từ 0-5), các phần tử này đều có kiểu là int => khai báo này chiếm 2*6 = 12 byte bộ nhớ

int myPins[] = {2, 4, 8, 3, 6}; // tạo mảng myPins chứa 5 phần tử (lần lượt là 2, 4, 8, 3, 6). Mảng này không giới hạn số lượng phần tử vì có khai báo là "[]"

int mySensVals[6] = {2, 4, -8, 3, 2}; // tạo mảng mySensVals chứa tối đa 6 phần tử, trong đó 5 phần tử đầu tiên có giá trị lần lượt là 2, 4, -8, 3, 2

char message[6] = "hello"; // tạo mảng ký tự (dạng chuỗi) có tối đa 6 ký tự!

Truy cập các phẩn tử trong mảng

Chú ý: Phần tử đầu tiên trong mảng luôn được đánh dấu là số 0.

mySensVals[0] == 2, mySensVals[1] == 4, vâng vâng

Điều này có nghĩa rằng, việc khai báo một mảng có tối đa 10 phần tử, thì phần tử cuối cần (thứ 10) được đánh dấu là số 9

int myArray[10]={9,3,2,4,3,2,7,8,9,11};
     // myArray[9]    có giá trị là 11
     // myArray[10]   sẽ trả về một giá trị "hên xui" nằm trong khoảng giá trị của int

Vì vậy, hãy chú ý trong việc truy cập đến giá trị trong mảng, nếu bạn muốn truy cập đến phần tử cuối cùng thì hãy truy đến đến ô giới hạn của mảng - 1.

Hãy ghi nhớ rằng, trong trình biên dịch ngôn ngữ C, nó không kiểm tra bạn có truy cập đến một ô có nằm trong bộ nhớ hay không! Nên nếu không cẩn thận trong việc truy cập mảng, chương trình của bạn sẽ mắc lỗi logic và rất khó để tìm lỗi đấy!

Gán một giá trị cho một phần tử

mySensVals[0] = 10;

Đọc một giá trị của một phần tử và gán cho một biến nào đó cùng kiểu dữ liệu

x = mySensVals[0]; //10

Dùng mảng trong vòng lặp

Mảng rất thường được dùng trong vòng lặp (chẳng hạn như dùng để lưu các chân digital quản lý đèn led). Trong đó, biến chạy của hàm for sẽ đi hết (hoặc một phần) của mảng, tùy thuộc vào yêu cầu của bạn mà thôi! Ví dụ về việc in 5 phần tử đầu của mảng myPins:

int i;
for (i = 0; i < 5; i = i + 1) {
  Serial.println(myPins[i]);
}

Ví dụ tham khảo:

Reference Tags: 
lên
9 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ả

CCA - Kết quả vòng 2 - Lịch trình gửi board cho vòng 3

Sau khi chỉnh sửa ý tưởng, đã có nhiều đội thi thể hiện sự quyết tâm làm dự án đến cùng của mình. BTC rất khó để lựa chọn ra những đội nào sẽ nhận được board từ Quỹ Cộng đồng Arduino Việt Nam. Vì vậy, ngoài 5 nhóm sẽ nhận được bộ starter kit, BTC quyết định sẽ có 2 bạn (đã hoàn thành dự án) tham gia tranh tài để nhận giải thưởng đặc biệt từ Cộng đồng.

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

Lưu các biến CHỈ ĐỌC với PROGMEM

Trong bài Tiết kiệm RAM trong Arduino?, chúng ta đã biết cách lưu chuỗi hằng vào bộ nhớ FLASH thay cho việc lưu hết bọn chúng vào RAM. Như vậy, một hằng chuỗi có thể được lưu vào bộ nhớ FLASH thay vì lưu vào RAM. Vậy, câu hỏi đặt ra là, những biến hằng khác (hằng số, hẳng mảng, hẳng số thực) có thể được lưu vào FLASH thay vì vào RAM hay không?

Trong thực tế, các biến hằng (trừ hằng chuỗi) hầu hết chỉ tốn vài chục byte để lưu trữ nên RAM, nên chúng ta cũng chưa gặp vấn đề gì trong việc lưu trữ hằng số hay hằng mảng cả. Nhưng thỉnh thoảng, có những lúc, ta phải tìm cách lưu trữ chúng ở một nơi khác, ví dụ Bài 12: Phát nhạc bằng Arduino với một cái loa hoặc buzzer.

Chần chừ gì nữa, biết muốn phám khá khả năng của Arduino - hay không?

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