int analogPin = 3;等价于#define analogPin 3吗?
它是定义板子的3号引脚还是A3引脚呢?
(1)都可以! 都可能 ! 可能是 digital pin 3, 可能是 A3, 看你怎麼用!
因為:
int analogPin = 3; // 找個位置(2 byte), 命名 analogPin, 放入 3
但是 #define analogPin 3 意思是以後看到 analogPin 就換成 3
所以, 其實不太一樣, 但用起來很像一樣 !!
----
(2)寫 int analogPin =3;
稍後還可寫 analogPin =5;
但是寫 #define analogPin 3
之後如果寫 analogPin = 3;
會被編譯為 3 = 3; 然後就報錯 !!
(3)寫 int analogPin =3;
int kk = digitalRead(analogPin); 則此時 analogPin 是 3
但寫
int yy = analogRead(analogPin); 此時 analogPin 是代表 A3
可是其實 A3 在 UNO 其實就是 14+3 = 17
因為 #define A0 14
//...
#define A3 17
** 注意, A3 不可寫成 a3
大小寫不同意義就不同 !!
(1)都可以! 都可能 ! 可能是 digital pin 3, 可能是 A3, 看你怎麼用!
因為:
int analogPin = 3; // ...
感谢~~不过我试了一下,int analogPin = 3;后面再加 int analogPin = 5;会出错,报重复定义
你那樣寫當然錯啦!
我是說 int ggyy = 3;
然後在 setup( ) { 內或在 loop( ) {內可寫 ggyy=5;
但用 #define 的不行!
這時在 setup( ){ 或 loop( 內用的就是前面那個 int ggyy;
稱為全局變量, 代表記憶體某個位置;
倒是用 #define 的只是一個"符號", 稍後用到就直接換掉, 跟人直接寫相同 !
不過, 如果在seup( ){ 或 loop( ){ 或任何函數內又寫 int ggyy=5; 並不會報錯,
因為那樣是局部變量, 裡面的 ggyy 暫時用另一個位置, 例如:
int ggyy=38;
void setup( ) {
Serial.begin(9600);
int ggyy = 49;
Serial.print("inner ggyy=");
Serial.println(ggyy);
Serial.print("Outer ggyy=");
Serial.println( ::ggyy ); // 這是外面那個 ggyy
int kkk = ::ggyy; // 外面的 ggyy, 若不寫 :: 則是裡面的 ggyy
Serial.println( String("kkk=") + kkk); // 印出 kkk=38
}
void loop( ) {
}
補充一下
就是說以下三句其實意思都一樣:
int ans = analogRead(3);
int ans = analogRead(A3);
int ans = analogRead(17);
不論寫哪一句, 都是讀取 A3 腳的模擬值 0 ~ 1023
因為 analogRead( ) 只能用在 A0 ~ A5,
所以會自動檢查並想辦法更正 !
但是用 analogWrite( ) 就不是這樣喔!
UNO 上 analogWrite( )只對 3, 5, 6, 9, 10, 11 這些 pin 有效 !
不是這些 pin 就改用 digitalWrite( ),
可是 digitalWrite(3, HIGH); 和 digitalWrite(A3, HIGH);
是分別對 pin3 和 pin A3
(Analog 的 pin 可以拿來做 digital 輸出, 反之不行!) |
|
|