arduino

Thư viện Arduino Math (math.h) bao gồm một số hàm toán học hữu ích để thao tác với các số dấu phẩy động.

Macro thư viện

Sau đây là các macro được định nghĩa trong tiêu đề math.h:

MacroGiá trịSự miêu tả
TÔI2.7182818284590452354Hằng số e.
M_LOG2E1.4426950408889634074 / * log_2 e * /Lôgarit của e với cơ số 2
M_1_PI0,31830988618379067154 / * 1 / pi * /Hằng số 1 / pi
M_2_PI0,63661977236758134308 / * 2 / pi * /Hằng số 2 / pi
M_2_SQRTPI1.12837916709551257390 / * 2 / sqrt (pi) * /Hằng số 2 / sqrt (pi)
M_LN102.30258509299404568402 / * log_e 10 * /Lôgarit tự nhiên của 10
M_LN20,69314718055994530942 / * log_e 2 * /Lôgarit tự nhiên của 2
M_LOG10E0,43429448190325182765 / * log_10 e * /Lôgarit của e với cơ số 10
M_PI3,14159265358979323846 /* số Pi */Hằng số pi
M_PI_23.3V1.57079632679489661923 / * pi / 2 * /Hằng số pi / 2
M_PI_40,78539816339744830962 / * pi / 4 * /Hằng số pi / 4
M_SQRT1_20,70710678118654752440 / * 1 / sqrt (2) * /Hằng số 1 / sqrt (2)
M_SQRT21.41421356237309504880 / * sqrt (2) * /Căn bậc hai của 2
acosfBí danh cho hàm acos ()
mặnBí danh cho hàm asin ()
atan2fBí danh cho hàm atan2 ()
cbrtfBí danh cho hàm cbrt ()
ceilfBí danh cho hàm ceil ()
copysignfBí danh cho hàm copysign ()
coshfBí danh cho hàm cosh ()
expfBí danh cho hàm exp ()
fabsfBí danh cho hàm fabs ()
fdimfBí danh cho hàm fdim ()
sàn nhàBí danh cho hàm floor ()
fmaxfBí danh cho hàm fmax ()
fminfBí danh cho hàm fmin ()
fmodfBí danh cho hàm fmod ()
frexpfBí danh cho hàm frexp ()
giả thuyếtBí danh cho hàm hyp ()
VÔ CỰCHằng số INFINITY
isfinitefBí danh cho hàm isfinite ()
isinffBí danh cho hàm isinf ()
isnanfBí danh cho hàm isnan ()
ldexpfBí danh cho hàm ldexp ()
log10fBí danh cho hàm log10 ()
logfBí danh cho hàm log ()
lrintfBí danh cho hàm lrint ()
lroundfBí danh cho hàm lround ()

Chức năng Thư viện

Các hàm sau được định nghĩa trong tiêu đề math.h –

Dưới đây là danh sách các hàm được định nghĩa trong tiêu đề math.h

Không.Chức năng & Mô tả Thư viện
1double acos (double __x) Hàm acos () tính giá trị chính của cosin cung của __x. Giá trị trả về nằm trong khoảng [0, pi] radian. Lỗi miền xảy ra đối với các đối số không thuộc phạm vi [-1, +1].
2double asin (double __x) Hàm asin () tính giá trị chính của cung sin của __x. Giá trị trả về nằm trong khoảng [-pi / 2, pi / 2] radian. Lỗi miền xảy ra đối với các đối số không thuộc phạm vi [-1, +1].
3double atan (double __x) Hàm atan () tính giá trị chính của tiếp tuyến cung của __x. Giá trị trả về nằm trong khoảng [-pi / 2, pi / 2] radian.
4double atan2 (double __y, double __x) Hàm atan2 () tính toán giá trị chính của tiếp tuyến cung của __y / __x, sử dụng các dấu hiệu của cả hai đối số để xác định góc phần tư của giá trị trả về. Giá trị trả về nằm trong khoảng [-pi, + pi] radian.
5double cbrt (double __x) Hàm cbrt () trả về gốc khối của __x.
6double ceil (double __x) Hàm ceil () trả về giá trị tích phân nhỏ nhất lớn hơn hoặc bằng __x, được biểu thị dưới dạng số dấu phẩy động.
7static double copysign (double __x, double __y) Hàm copysign () trả về __x nhưng có dấu __y. Chúng hoạt động ngay cả khi __x hoặc __y là NaN hoặc không.
8double cos(double __x) Hàm cos () trả về cosin của __x, được đo bằng radian.
9double cosh (double __x) Hàm cosh () trả về cosin hyperbol của __x.
10double exp (double __x) Hàm exp () trả về giá trị hàm mũ của __x.
11double fabs (double __x) Hàm fabs () tính giá trị tuyệt đối của một số dấu phẩy động __x.
12double fdim (double __x, double __y) Hàm fdim () trả về giá trị max (__ x – __y, 0). Nếu __x hoặc __y hoặc cả hai là NaN, NaN được trả về.
13double floor (double __x) Hàm floor () trả về giá trị tích phân lớn nhất nhỏ hơn hoặc bằng __x, được biểu thị dưới dạng số dấu phẩy động.
14double fma (double __x, double __y, double __z) Hàm fma () thực hiện phép nhân-cộng dấu phẩy động. Đây là phép toán (__x * __y) + __z, nhưng kết quả trung gian không được làm tròn thành kiểu đích. Điều này đôi khi có thể cải thiện độ chính xác của một phép tính.
15double fmax (double __x, double __y) Hàm fmax () trả về giá trị lớn hơn trong hai giá trị __x và __y. Nếu một đối số là NaN, đối số kia được trả về. Nếu cả hai đối số là NaN, NaN được trả về.
16double fmin (double __x, double __y) Hàm fmin () trả về giá trị nhỏ hơn trong hai giá trị __x và __y. Nếu một đối số là NaN, đối số kia được trả về. Nếu cả hai đối số là NaN, NaN được trả về.
17double fmod (double __x, double__y) Hàm fmod () trả về phần dư dấu phẩy động của __x / __y.
18double frexp (double __x, int * __pexp) Hàm frexp () ngắt một số dấu phẩy động thành một phân số chuẩn hóa và tích phân là 2. Nó lưu trữ số nguyên trong đối tượng int được __pexp trỏ tới. Nếu __x là một số dấu phẩy động bình thường, thì hàm frexp () trả về giá trị v, sao cho v có độ lớn trong khoảng [1/2, 1) hoặc 0, và __x bằng v lần 2 được nâng lên lũy thừa __pexp. Nếu __x bằng không, cả hai phần của kết quả đều bằng không. Nếu __x không phải là một số hữu hạn, frexp () trả về __x như cũ và lưu trữ 0 bởi __pexp. Lưu ý – Việc triển khai này cho phép con trỏ 0 như một chỉ thị để bỏ qua việc lưu trữ số mũ.
19double hypot (double __x, double__y) Hàm obs () trả về sqrt (__ x * __ x + __y * __ y). Đây là độ dài cạnh huyền của tam giác vuông với độ dài các cạnh là __x và __y, hoặc khoảng cách của điểm (__x, __y) từ gốc tọa độ. Sử dụng hàm này thay vì công thức trực tiếp là khôn ngoan, vì lỗi nhỏ hơn nhiều. Không có dòng chảy với __x và __y nhỏ. Không bị tràn nếu kết quả nằm trong phạm vi.
20static int isfinite (double __x) Hàm isfinite () trả về một giá trị khác không nếu __x là hữu hạn: không cộng hoặc trừ vô cùng và không phải NaN .
21int isinf (double __x) Hàm isinf () trả về 1 nếu đối số __x là dương vô cùng, -1 nếu __x là âm vô cùng và 0 nếu ngược lại. Lưu ý – GCC 4.3 có thể thay thế hàm này bằng mã nội tuyến trả về giá trị 1 cho cả hai số nguyên (lỗi gcc # 35509).
22int isnan (double __x) Hàm isnan () trả về 1 nếu đối số __x đại diện cho đối tượng “not-a-number” ( NaN ), ngược lại là 0.
23double ldexp (double __x, int __exp) Hàm ldexp () nhân một số dấu phẩy động với lũy thừa 2. Nó trả về giá trị của __x lần 2 được nâng lên lũy thừa __exp.
24double log (double __x) Hàm log () trả về logarit tự nhiên của đối số __x.
25double log10 (double __x) Hàm log10 () trả về logarit của đối số __x cho cơ số 10.
26long lrint (double __x) Hàm lrint () làm tròn __x đến số nguyên gần nhất, làm tròn nửa trường hợp về hướng số nguyên chẵn. (Nghĩa là cả giá trị 1,5 và 2,5 đều được làm tròn thành 2). Hàm này tương tự như hàm rint (), nhưng nó khác về kiểu giá trị trả về và có thể xảy ra hiện tượng tràn. Lợi nhuận Giá trị số nguyên dài được làm tròn. Nếu __x không phải là số hữu hạn hoặc số tràn, quá trình thực hiện này trả về giá trị LONG_MIN (0x80000000).
27long lround (double __x) Hàm lround () làm tròn __x đến số nguyên gần nhất, nhưng làm tròn nửa các trường hợp từ 0 (thay vì đến số nguyên chẵn gần nhất). Hàm này tương tự như hàm round (), nhưng nó khác về kiểu giá trị trả về và có thể xảy ra hiện tượng tràn. Lợi nhuận Giá trị số nguyên dài được làm tròn. Nếu __x không phải là một số hữu hạn hoặc là một số tràn, quá trình thực hiện này trả về giá trị LONG_MIN (0x80000000).
28double modf (double __x, double * __iptr ) Hàm modf () chia đối số __x thành các phần tích phân và phân số, mỗi phần có cùng dấu với đối số. Nó lưu trữ phần tích phân dưới dạng một kép trong đối tượng được trỏ tới bởi __iptr. Hàm modf () trả về phần phân số có dấu của __x. Lưu ý – Việc triển khai này bỏ qua việc ghi bằng con trỏ 0. Tuy nhiên, GCC 4.3 có thể thay thế chức năng này bằng mã nội tuyến không cho phép sử dụng địa chỉ NULL để tránh việc lưu trữ.
29float modff (float __x, float * __iptr) Bí danh cho modf ().
30double pow (double __x, double __y) Hàm pow () trả về giá trị của __x thành số mũ __y.
31double round (double __x) Hàm round () làm tròn __x đến số nguyên gần nhất, nhưng làm tròn nửa các trường hợp từ 0 (thay vì đến số nguyên chẵn gần nhất). Tràn là không thể. Lợi nhuận Giá trị làm tròn. Nếu __x là một tích phân hoặc vô hạn, __x chính nó được trả về. Nếu __x là NaN , thì NaN được trả về.
32int signbit (double __x) Hàm signbit () trả về giá trị khác không nếu giá trị của __x có bộ bit dấu của nó. Điều này không giống với `__x <0.0 ‘, vì dấu chấm động IEEE 754 cho phép số không được ký. So sánh `-0.0 <0.0 ‘là sai, nhưng` signbit (-0.0)’ sẽ trả về giá trị khác không.
33double sin (double __x) Hàm sin () trả về sin của __x, được đo bằng radian.
34double sinh (double __x) Hàm sinh () trả về sin hyperbol của __x.
35double sqrt (double __x) Hàm sqrt () trả về căn bậc hai không âm của __x.
36double square (double __x) Hàm square () trả về __x * __x. Lưu ý – Hàm này không thuộc định nghĩa tiêu chuẩn C.
37double tan (double __x) Hàm tan () trả về tiếp tuyến của __x, được đo bằng radian.
38double tanh (double __x) Hàm tanh () trả về tiếp tuyến hyperbol của __x.
39double trunc (double __x) Hàm trunc () làm tròn __x đến số nguyên gần nhất không lớn hơn về giá trị tuyệt đối.

Thí dụ

Ví dụ sau đây cho thấy cách sử dụng các hàm thư viện math.h phổ biến nhất:

double double__x = 45.45 ;
double double__y = 30.20 ;

void setup() {
   Serial.begin(9600);
   Serial.print("cos num = ");
   Serial.println (cos (double__x) ); // returns cosine of x
   Serial.print("absolute value of num = ");
   Serial.println (fabs (double__x) ); // absolute value of a float
   Serial.print("floating point modulo = ");
   Serial.println (fmod (double__x, double__y)); // floating point modulo
   Serial.print("sine of num = ");
   Serial.println (sin (double__x) ) ;// returns sine of x
   Serial.print("square root of num : ");
   Serial.println ( sqrt (double__x) );// returns square root of x
   Serial.print("tangent of num : ");
   Serial.println ( tan (double__x) ); // returns tangent of x
   Serial.print("exponential value of num : ");
   Serial.println ( exp (double__x) ); // function returns the exponential value of x.
   Serial.print("cos num : ");

   Serial.println (atan (double__x) ); // arc tangent of x
   Serial.print("tangent of num : ");
   Serial.println (atan2 (double__y, double__x) );// arc tangent of y/x
   Serial.print("arc tangent of num : ");
   Serial.println (log (double__x) ) ; // natural logarithm of x
   Serial.print("cos num : ");
   Serial.println ( log10 (double__x)); // logarithm of x to base 10.
   Serial.print("logarithm of num to base 10 : ");
   Serial.println (pow (double__x, double__y) );// x to power of y
   Serial.print("power of num : ");
   Serial.println (square (double__x)); // square of x
}

void loop() {

}

Kết quả

cos num = 0.10
absolute value of num = 45.45
floating point modulo =15.25
sine of num = 0.99
square root of num : 6.74
tangent of num : 9.67
exponential value of num : ovf
cos num : 1.55
tangent of num : 0.59
arc tangent of num : 3.82
cos num : 1.66
logarithm of num to base 10 : inf
power of num : 2065.70

Arduino – Hàm lượng giác

Bạn cần sử dụng Lượng giác một cách thực tế như tính khoảng cách cho vật thể chuyển động hoặc tốc độ góc. Arduino cung cấp các hàm lượng giác truyền thống (sin, cos, tan, asin, acos, atan) có thể được tóm tắt bằng cách viết các nguyên mẫu của chúng. Math.h chứa nguyên mẫu của hàm lượng giác.

Cú pháp chính xác lượng giác

double sin(double x); //returns sine of x radians
double cos(double y); //returns cosine of y radians
double tan(double x); //returns the tangent of x radians
double acos(double x); //returns A, the angle corresponding to cos (A) = x
double asin(double x); //returns A, the angle corresponding to sin (A) = x
double atan(double x); //returns A, the angle corresponding to tan (A) = x
double sine = sin(2); // approximately 0.90929737091
double cosine = cos(2); // approximately -0.41614685058
double tangent = tan(2); // approximately -2.18503975868

Arduino – Đến hạn & Không

Arduino Due là một bo mạch vi điều khiển dựa trên CPU Atmel SAM3X8E ARM Cortex-M3. Đây là bảng Arduino đầu tiên dựa trên vi điều khiển lõi ARM 32-bit.

Các tính năng quan trọng –

  • Nó có 54 chân đầu vào / đầu ra kỹ thuật số (trong đó 12 chân có thể được sử dụng làm đầu ra PWM)
  • 12 đầu vào tương tự
  • 4 UART (cổng nối tiếp phần cứng)
  • Xung nhịp 84 MHz, kết nối USB OTG có khả năng
  • 2 DAC (kỹ thuật số sang tương tự), 2 TWI, giắc cắm nguồn, đầu cắm SPI, đầu cắm JTAG
  • Nút đặt lại và nút xóa
Arduino - Đến hạn & Không

Đặc điểm của Arduino Due Board

Vôn hoạt độngTốc độ CPUAnalog in / outIO / PWM kỹ thuật sốEEPROM [KB]SRAM [KB]Flash [KB]USBUART
3,3 Volt84 Mhz12/254/12965122 vi4

Liên lạc

  • 4 UART phần cứng
  • 2 I2C
  • 1 Giao diện CAN (Giao thức truyền thông trên ô tô)
  • 1 SPI
  • 1 Giao diện JTAG (10 pin)
  • 1 Máy chủ USB (giống như Leonardo)
  • 1 cổng lập trình

Không giống như hầu hết các bảng Arduino, bảng Arduino Due chạy ở 3.3V. Điện áp tối đa mà các chân I / O có thể chịu được là 3,3V. Áp dụng điện áp cao hơn 3,3V cho bất kỳ chân I / O nào có thể làm hỏng bo mạch.

Bo mạch chứa mọi thứ cần thiết để hỗ trợ vi điều khiển. Bạn có thể chỉ cần kết nối nó với máy tính bằng cáp micro-USB hoặc cấp nguồn cho nó bằng bộ chuyển đổi AC-to-DC hoặc pin để bắt đầu. Do tương thích với tất cả các lá chắn Arduino hoạt động ở 3.3V.

Arduino Zero

Zero là một phần mở rộng 32-bit đơn giản và mạnh mẽ của nền tảng được thiết lập bởi UNO. Bảng Zero mở rộng phạm vi gia đình bằng cách cung cấp hiệu suất cao hơn, cho phép nhiều cơ hội dự án cho các thiết bị và hoạt động như một công cụ giáo dục tuyệt vời để tìm hiểu về phát triển ứng dụng 32-bit.

Các tính năng quan trọng là –

  • Các ứng dụng Zero trải dài từ các thiết bị IoT thông minh, công nghệ có thể đeo được, tự động hóa công nghệ cao cho đến robot điên rồ.
  • Bo mạch được cung cấp bởi SAMD21 MCU của Atmel, có lõi ARM Cortex® M0 + 32-bit.
  • Một trong những tính năng quan trọng nhất của nó là Atmel’s Embedded Debugger (EDBG), cung cấp giao diện gỡ lỗi đầy đủ mà không cần phần cứng bổ sung, làm tăng đáng kể tính dễ sử dụng cho việc gỡ lỗi phần mềm.
  • EDBG cũng hỗ trợ một cổng COM ảo có thể được sử dụng để lập trình thiết bị và bộ nạp khởi động.

Đặc điểm của bảng Arduino Zero

Vôn hoạt độngTốc độ CPUAnalog in / outIO / PWM kỹ thuật sốEEPROM [KB]SRAM [KB]Flash [KB]USBUART
3,3 Volt48 Mhz6/114/10322562 vi2

Không giống như hầu hết các bảng Arduino và Genuino, Zero chạy ở 3.3V. Điện áp tối đa mà các chân I / O có thể chịu được là 3,3V. Áp dụng điện áp cao hơn 3,3V cho bất kỳ chân I / O nào có thể làm hỏng bo mạch.

Bo mạch chứa mọi thứ cần thiết để hỗ trợ vi điều khiển. Bạn có thể chỉ cần kết nối nó với máy tính bằng cáp micro-USB hoặc cấp nguồn cho nó bằng bộ chuyển đổi AC-to-DC hoặc pin để bắt đầu. Zero tương thích với tất cả các tấm chắn hoạt động ở 3.3V.

Arduino – Điều chế độ rộng xung xem thêm

Trả lời