Title Image

Blog Logo

🌱 Một số hàm toán học thường dùng trong Ứng dụng Nhúng

🌱 Một số hàm toán học thường dùng trong Ứng dụng Nhúng

    Bài viết này mình sẽ giới thiệu về một số hàm toán học thường được sử dụng khi làm việc với hệ thống nhúng.

    👉 Hàm Map

    Map là một hàm mà các bạn sẽ thường nhìn thấy khi làm việc với Arduino. Hàm này có chức năng là ánh xạ một giá trị từ khoảng giá trị này sang giá trị tương ứng trong khoảng giá trị khác. 

    Ví dụ: Khi bạn đọc ADC giá trị 10 bit (Khoảng giá trị đọc về là 0 - 1023), và bạn muốn chuyển số đọc được sang một giá trị tương ứng nằm trong khoảng 0 - 255 để điều khiển PWM 8 - bit cho một động cơ. 

map function

    Với công thức chung ở trên chúng ta hoàn toàn có thể rút ra một công thức chung, khi ánh xạ một giá trị từ range này sang range khác.

    💬 Mình có viết một đoạn code dưới đây các bạn có thể tham khảo:

uint32_t MAP(uint32_t u32DataIn, uint32_t DATA_IN_MIN, uint32_t DATA_IN_MAX, uint32_t DATA_OUT_MIN, uint32_t DATA_OUT_MAX)
{
    return ((((u32DataIn - DATA_IN_MIN)*(DATA_OUT_MAX - DATA_OUT_MIN))/(DATA_IN_MAX - DATA_IN_MIN)) + DATA_OUT_MIN);
}

    👉 Hàm Constrain

    Khi phải làm việc với các range, và thường phải rào 2 đầu min/max của một giá trị. Và khi giá trị ta có bị "Out of Range", thì có thể gán nó cho giá trị biên gần nhất. 

    Ví dụ: Nếu nó nhỏ hơn giá trị Min, thì trả về giá trị Min, nó lớn hơn giá trị Max thì trả về giá trị Max.

    💬 Mình có viết một đoạn code dưới đây các bạn có thể tham khảo:

uint32_t Constrain(uint32_t u32DataIn, uint32_t DATA_MIN, uint32_t DATA_MAX)
{
    if (u32DataIn < DATA_MIN)
    {
		return DATA_MIN;
    }
    else if (u32DataIn > DATA_MAX)
    {
		return DATA_MAX;
    }
    else
    {
		return u32DataIn;
    }
}

    👉 Hàm Min/Max

    Hàm này thì phổ biến nhất rồi, chỉ đơn giản là trả về giá trị nhỏ nhất/lớn nhất của một mảng giá trị.

    Ví dụ: Thu thập Data Cảm biến, tìm điểm có thông số cao nhất/nhỏ nhất.

    💬 Mình có viết một đoạn code dưới đây các bạn có thể tham khảo:

uint32_t MIN(uint32_t * IN_Arr, uint32_t Len)
{
    uint32_t i = 0;
    uint32_t MIN = 0;
 
    for (i = 0; i < Len; i++)
    {
		if (IN_Arr[i] < MIN)
		{
			MIN = IN_Arr[i];
		}
    }
    return MIN;
}
 
uint32_t MAX(uint32_t * IN_Arr, uint32_t Len)
{
    uint32_t i = 0;
    uint32 MAX = 0;
 
    for (i=0; i<Len; i++)
    {
		if (IN_Arr[i] > MAX)
		{
			MAX = IN_Arr[i];
		}
    }
    return MAX;
}

    👉 Ngoài ra còn rất nhiều các hàm toán học thông dụng khác mà có thể các thường gặp, sử dụng và cảm thấy nó hữu ích. Hãy comment bên dưới để chia sẻ với mọi người nhé 😇😇

>>>= Follow ngay =<<<

💚 Kênh Youtube Lập trình - Điện tử 💚

Để nhận được những bài học miễn phí mới nhất nhé 😊

    👉 Các bạn có thể học thêm nhiều kiến thức nâng cao về C - Nhúng tại khóa học lập trình C full:

        Khóa học lập trình C FULL

Đăng nhận xét

0 Nhận xét