Câu trả lời:
Để in gỡ lỗi, bạn có thể xác định một macro để in cả tên và giá trị của một biến như thế này:
#define PRINTLN(var) Serial.print(#var ": "); Serial.println(var)
mà sau đó bạn sử dụng như thế này:
int x = 5;
PRINTLN(x);
// Prints 'x: 5'
Ngoài ra điều này là tốt đẹp:
#define PRINT(var) Serial.print(#var ":\t"); Serial.print(var); Serial.print('\t')
#define PRINTLN(var) Serial.print(#var ":\t"); Serial.println(var)
khi được sử dụng trong một vòng lặp như vậy
PRINT(x);
PRINT(y);
PRINTLN(z);
in một đầu ra như thế này:
x: 3 y: 0.77 z: 2
x: 3 y: 0.80 z: 2
x: 3 y: 0.83 z: 2
Cảm ơn rất nhiều cho câu trả lời của bạn. Toi lam cai nay ...
#define DEBUG //If you comment this line, the functions below are defined as blank lines.
#ifdef DEBUG //Macros
#define Say(var) Serial.print(#var"\t") //debug print, do not need to put text in between of double quotes
#define SayLn(var) Serial.println(#var) //debug print with new line
#define VSay(var) Serial.print(#var " =\t"); Serial.print(var);Serial.print("\t") //variable debug print
#define VSayLn(var) Serial.print(#var " =\t"); Serial.println(var) //variable debug print with new line
#else
#define Say(...) //now defines a blank line
#define SayLn(...) //now defines a blank line
#define VSay(...) //now defines a blank line
#define VSayLn(...) //now defines a blank line
#endif
if (some_condition) VSayLn(some_var);
sẽ không làm việc như dự định. Các sửa chữa tiêu chuẩn là #define VSayLn(var) do { Serial.print(#var " =\t"); Serial.println(var); } while (0)
. Cf Tại sao sử dụng các câu lệnh do-while và if-
Serial.print
.