B12 – Làm mượt giá trị (smoothing)

Trong ví dụ này, ta sẽ đọc liên tiếp các giá trị từ cảm biến rồi lấy trung bình. Điều này giúp giá trị đọc được có độ ổn định và chính xác hơn. Ngoài ra, ta sẽ học cách sử dụng mảng array để lưu biến dữ liệu.

nếu sử dụng biến trở

  • Mảng (array) được dùng để lưu nhiều giá trị của cùng một biến.

giá trị [ số đếm ]

  • Chương trình
/*

 Làm mượt giá trị

*/


// Số lần đọc giá trị trước khi lấy trung bìn
// Càng đọc nhiều mẫu thì giá trị càng mượt, ít sai số 
const int numReadings = 5;

int readings[numReadings];      // mảng lưu giá trị
int readIndex = 0;              // số đếm của mảng
int total = 0;                  // tổng kết quả
int average = 0;                // giá trị trung bình

int inputPin = A0;              // Chân A0 gắn cảm biến

void setup() {
  // tốc độ baud chuẩn 9600
  Serial.begin(9600);
  // gán tất cả giá trị trong mảng ban đầu bằng '0'
  for (int thisReading = 0; thisReading < numReadings; thisReading++) {
    readings[thisReading] = 0;
  }
}

void loop() {
  // đọc cảm biến:
  readings[readIndex] = analogRead(inputPin);
  // cộng dồn 
  total = total + readings[readIndex];
  // tăng số đếm 
  readIndex = readIndex + 1;

  // nếu đếm hết chỉ số của mảng
  if (readIndex >= numReadings) {
    // gán lại chỉ số về '0', chuẩn bị cho lượt sau
    readIndex = 0;
    // tính trung bình
    average = total / numReadings;
    // gửi kết quả về máy tính
    Serial.println(average);
    // chờ 1 khoảng thời gian nhỏ để ổn định
    delay(1);
  }
  delay(1);
}

Leave a Reply

Your email address will not be published. Required fields are marked *