| | 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( ) { 內(nèi)或在 loop( ) {內(nèi)可寫 ggyy=5;
 但用 #define 的不行!
 這時在 setup( ){  或 loop( 內(nèi)用的就是前面那個 int ggyy;
 稱為全局變量, 代表記憶體某個位置;
 倒是用 #define 的只是一個"符號", 稍後用到就直接換掉, 跟人直接寫相同 !
 不過, 如果在seup( ){ 或 loop( ){ 或任何函數(shù)內(nèi)又寫 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 輸出, 反之不行!)
 | 
 | 
 |