昨天的 digital firmata sample , 一定有許多東西看得很模糊,
今天我們來看 arduino-1.0.6\libraries\Firmata\Boards.h 這個針對各種板子的PIN腳定義標頭檔。
我們可以知道 arduino 定義 3 種 PORT : 分別是D/B/C :
而這三種 PORT 各有 3 種資料呼叫使用方式,例如:
TOTAL_PORTS:同等於 (TOTAL_PINS + 7) / 8
TOTAL_PINS:剛好是 TOTAL_PORTS *8
TOTAL_ANALOG_PINS:目前這張 arduino 板子支援的 analog 使用的 pin 腳數量
#define IS_PIN_DIGITAL(p) ((p) >= 2 && (p) <= 19)
#define IS_PIN_ANALOG(p) ((p) >= 14 && (p) < 14 + TOTAL_ANALOG_PINS)
#define IS_PIN_PWM(p) digitalPinHasPWM(p)
#define IS_PIN_SERVO(p) (IS_PIN_DIGITAL(p) && (p) - 2 < MAX_SERVOS)
#define IS_PIN_I2C(p) ((p) == 18 || (p) == 19)
如上方所示,IS_PIN_XXX 開頭的function 是拿來判斷輸入的 pin number 是否能夠拿來做某項 XXX 用途,後面對應像是**((p) >= 2 && (p) <= 19)** 這個部分,每張板子都不一樣。原文解釋說明如下:
IS_PIN_XXXX(pin): The IS_PIN macros resolve to true or non-zero
if a pin as implemented by Firmata corresponds to a pin
that actually implements the named feature.
PIN_TO_XXXX(pin): The PIN_TO macros translate pin numbers as
implemented by Firmata to the pin numbers needed as inputs
to the Arduino functions. The corresponding IS_PIN macro
should always be tested before using a PIN_TO macro, so
these macros only need to handle valid Firmata pin
numbers for the named feature.
我們明天見 :P