本文列舉《超圖解Arduino互動設計入門》書籍的關鍵字目錄(索引)。由於書中許多關鍵字出現在圖說裡面,無法在文書處理或排版軟體中,直接用文字搜尋方式檢索,需要手工一頁一頁比對,再加上許多關鍵字重複出現的機率很高,例如,delay()指令,條件判斷式和電阻,所以這篇索引將以列舉語法和元件的使用說明為主。
微控器相關術語
| 嵌入式系統 | 1-10, 3-8 |
| bootloader(開機啟動程式) | 1-12, B-2, B-5 |
| 快閃記憶體(Flash)∕程式記憶體 | 1-11, 3-24, 3-27, 8-38, 8-42, 16-3, 16-4, 18-15 |
| SRAM | 1-11, 3-24, 3-25, 3-26, 3-27 |
| EEPROM | 1-11, 3-26, 3-27 |
| AREF(類比參考電壓) | 6-21, 6-22 |
| 時脈(Clock) | 5-9, 7-11, 7-12, 8-11, 8-13, 8-43, 8-44, 11-10, 11-11 |
| ICSP | 1-8, 8-12, 8-16 |
| CS(晶片選擇), SS(周邊選擇) | 8-24, 8-11, 8-13(Leonardo板), 8-15, 8-20, 8-24(Leonardo板) |
| Leonardo板數位腳編號 | 3-6 |
| 數位14~19腳位編號(UNO板) | 3-5 |
| 數位18~23腳位編號(Leonardo板) | 3-6 |
| 暫存器 | 1-11, 7-10, 8-18 |
電子學與基本電學相關術語
| 電壓 | 2-2, 2-4, 2-9, 4-30, 5-5, 6-3, 6-6, 6-13, A-14, D-12 |
| 電流 | 2-2, 2-9, 4-30 |
| 接地 | 2-3, 2-5, 6-11, 6-12 |
| 源流(source current) | 4-20 |
| 潛流(sink current) | 4-20 |
| 數位與類比 | 1-9, 6-3 |
| 主動元件、被動元件 | 2-18 |
| TTL訊號 | 5-5, 13-23, 18-8 |
| 反電動勢(Back EFI) | 10-24, 10-28 |
| 歐姆定律 | 4-31 |
| 消耗功率(瓦數) | 4-32, 10-2 |
| 電阻串連∕並連 | 4-33 |
| 分壓電路∕偏壓電路 | 6-6, 6-13 |
| 載波 | 12-6, 12-21 |
| 調變 | 12-21 |
程式設計基礎
| 數字系統 | 3-22 |
| 2進位轉換10進位和16進位 | 3-21, 3-22 |
| BCD碼 | 3-23, 7-10 |
| 標示資料的進制(0x, 0b) | 3-23, 7-3, 7-4, 9-10, 9-11, 9-12, 9-13, 9-23, 10-9 |
| 寫作格式 | 3-8, 3-11 |
| 註解(comment) | 3-9 |
| Arduino程式基本架構:setup()與loop() | 3-4, 4-25, 5-17, 15-25, 16-3 |
變數(variable)
| 變數(variable) | 3-14, 3-15, 3-16 |
| 有效範圍(scope) | 8-7 |
| 全域(global) | 8-8, 8-9 |
| 區域(local) | 8-8 |
| volatile關鍵字 | D-7 |
| 資料類型 | 3-17, 3-18 |
| 轉換資料類型 | 3-19, 3-20, 9-22, 9-24 |
| L, U, UL格式字元 | 3-19 |
運算子
| %(餘除) | 11-16 |
| &(AND,「及」運算子) | 10-9, 11-26, 11-27 |
| |(OR,「或」運算子) | 10-9, 11-27 |
| ~(NOT,「反相」運算子) | 11-26, 11-27 |
| ^(XOR,異或,邏輯互斥) | 11-25, D-13 |
| <<, >>(位移運算子) | 4-29, 4-30, 11-26, 11-27 |
常數(constant)
| 常數(constant) | 3-24, 3-25, 8-30, 8-38 |
| 系統預設常數(INPUT, OUTPUT, HIGH, LOW, true, false) | 3-25 |
開關操作
| pinMode(),設定接腳模式 | 3-4, 4-21, 4-22, 4-24 |
| digitalWrite(),數位輸出 | 3-5 |
| digitalRead(),讀取數位輸入值 | 4-6 |
| 消除彈跳(debounce) | 4-15 |
字元
| 字串設定語法 | 5-13 |
| ASCII字元 | 5-11, 5-12, 5-21, 8-39 |
| NULL, ‘\0’ | 5-12, 5-14, 8-14, 17-17 |
| \n (Newline),「新行」字元 | 5-16, 9-10, 10-10, 10-12, 10-13, 11-14, 11-15, 11-32, 17-7, 17-22 |
| CR, LF字元 | 5-12, 5-13, 5-22(序列埠監控視窗) |
字串
| 字串設定語法 | 5-15, 9-10 |
| strcmp(),比較字串 | 16-29 |
| strlen(),取得字串長度 | 16-33 |
| 字串轉數字 | 11-16, 16-15 |
| atoi(),字串轉數字函數 | 10-12, 17-24, 17-25 |
| String程式庫 | 17-19 |
| Streaming程式庫 | 16-8, 16-13 |
| dtostrf(),數字轉字串 | 16-15 |
函數(function)
| 自訂函數 | 8-3, 8-5, 9-30 |
| void | 8-4 |
| 參數(引數) | 8-4 |
| return | 8-4, 8-5, 9-30 |
| 函數原型(function prototype) | 8-6 |
| 回呼函數(callback function) | 17-29 |
條件敘述
| if…else… | 4-8, 5-23 |
| 比較運算子(==, <, >, !, !=) | 4-10 |
| 邏輯運算子(!, &&, ||) | 6-18, 4-11, 10-13, 11-25, 11-32 |
| switch…case… | 5-23 |
| break | 5-23, 5-24, 18-17 |
| while迴圈 | 4-21 |
| do…while迴圈 | 4-22 |
| for迴圈 | 4-23, 4-24, 8-26, 8-27, 8-35 |
| 雙重迴圈 | 8-27, 8-29, 8-30 |
類比輸入
| 類比輸入腳位 | 6-2 |
| 類比取樣與量化 | 6-3 |
| analogRead(),類比訊號輸入 | 6-3, 6-17, 10-6 |
類比輸出
| 類比輸出腳位∕頻率 | 10-5 |
| analogWrite(),類比訊號輸出 | 10-4, 10-7 |
| map(),調整數值範圍 | 10-6, 11-8 |
| PWM(脈寬調變) | 10-3 |
| PWM輸出電壓計算式 | 10-4 |
| 改變PWM的輸出頻率 | 10-9 |
前置處理指令
| #define,巨集指令替換資料 | 13-7 |
| #include,引用程式庫 | 8-23, 8-38, 9-6, 13-10 |
陣列
| 陣列 | 4-26, 7-3, 7-4, 8-35, 8-41, 9-10, 9-11, 12-17, 17-25 |
| 多維(二維)陣列 | 8-29, 8-30, 8-33, 8-38, 8-39, 9-13, 18-15 |
| sizeOf() | 4-26, 8-35, 17-25 |
| 指標(*, &) | 8-39, 8-40, 8-41, 8-42 |
延時指令
| delay() | 3-6 |
| delayMicroseconds() | 3-7 |
| millis() | 6-19, 6-20, 8-19, 13-39 |
| micros() | 13-39 |
程式記憶體(program memory)
| 程式記憶體(program memory) | 1-11, 3-24, 18-15, 18-19 |
| pgmspace.h(程式儲存空間指令集) | 8-42, 18-15, 18-17 |
| PROGMEM | 3-27, 8-38, 18-15, 18-17 |
| pgm_read_byte(),讀取程式記憶體區的資料 | 8-42, 8-43 |
| printP(),輸出存在程式記憶體區的字串 | 16-4, 16-7, 16-13 |
| p(),將字串寫入程式記憶體區 | 16-3, 16-6, 16-12 |
| memcmp(), memcmp_P(),比較陣列值 | 18-16 |
埠口(Port)
| 埠口 | 4-28, 17-35 |
| PORTB | 4-29, 4-30 |
| DDRB | 4-28, 4-30 |
| DDRD | 7-6, 7-7 |
| PORTD | 7-7 |
中斷處理
| 中斷處理 | D-2 |
| 外部中斷腳位 | D-3 |
| 中斷觸發時機 | D-4 |
| 中斷服務常式(ISR) D-4 | |
| attachInterrupt(), 啟用中斷功能 | D-5 |
未分類指令
| random(), 隨機數字 | 10-7 |
| randomSeed(),初始化隨機數字 | 10-8 |
外接電源
| 電池盒 | 10-25, 11-8 |
| USB電源 | 10-24, A-14 |
| 電壓調節元件 | 2-6, 2-7 |
| 電源線連接 | 16-38 |
開關
| 符號 | 4-2, 4-5 |
| 常開(N.O.)、常閉(N.C.) | 4-3 |
| 共接點(COM) | 4-3, 4-4 |
| 浮動訊號 | 4-7, 10-8 |
| 微觸(輕觸)開關 | 4-2, 4-5 |
| 滑動(撥動)開關 | 4-2, 4-4 |
| 極限開關 | 4-5 |
| 水銀開關 | 4-6 |
| 磁簧開關 | 4-6 |
| 照相機快門開關 | 12-19 |
| 導電橡膠 | C-2 |
| 繼電器(Relay) | 16-34, 16-39(電晶體電路電阻值計算) |
二極體
| 二極體 | 2-16, 10-28, 10-23 |
| 最大順向電流 | 2-17 |
| 最大逆向電壓 | 2-17 |
| 1N4001~1N4007 | 2-17, 10-30, 10-41 |
| 1N4148 | 2-17, 9-15 |
| 齊納(Zener)∕穩壓二極體 | 6-14, 13-33 |
| LED(發光二極體) | 2-17, 3-4, 3-8, 10-6, 10-37, 10-38, 10-39 |
| 工作電壓 | 2-18 |
| 七段顯示器 | 7-2, 7-3, 7-5 |
| LED矩陣 | 8-9 |
紅外線
| 簡介 | 12-2 |
| 被動式紅外線感測模組(PIR移動感測器) | 12-3 |
| 紅外線二極體(IR LED) | 12-8 |
| 偵測人體移動 | 12-5 |
| 紅外線發射LED | 12-6 |
| 紅外線遙控接收元件(TSOP4838) | 12-7, 12-8, 12-9 |
| 反射型與遮光型光電開關(TCRT5000) | 13-11 , 13-12, 13-14(電路) |
| 光電耦合元件 | C-3 |
電阻
| 電阻 | 2-8, 6-4, 6-5, 6-9, 10-2, 10-6, 11-28, 17-6, 11-7 |
| 色環 | 2-9, 2-10 |
| 負載 | 2-9 |
| 額定功率(瓦數) | 4-32 |
| 限流電阻 | 4-18, 4-30, 8-16 |
| 上拉∕下拉電阻 | 4-8, 4-13, 11-11 |
| 微控器內部上拉電阻 | 4-13, 4-14 |
| 可變電阻 | 6-4, 10-6, 11-7 |
| 光敏電阻(Cds) | 6-5, 6-6, 6-8 |
| 熱敏電阻 | 9-19 |
| 類比搖桿 | 11-6 |
電容
| 電容 | 2-13 |
| 單位換算 | 2-14, 2-15 |
| 消除雜訊 | 2-13, 9-19, 9-16, 10-15 |
| 濾波器 | 6-15 |
電晶體
| 電晶體 | 10-20 |
| BJT, MOSFET | 10-23 |
| PNP, NPN | 10-22 |
| TO-220, TO-92封裝 | 10-21 |
| hFE (直流放大係數) | 10-37, 10-40, 16-39 |
| 電晶體選用與計算方式 | 10-36, 10-37 |
| 9012, 9013 | 10-23, 10-37 |
| 2N2222, 2N3904 | 10-36, 10-37 |
| 8050, 8550 | 10-37 |
| 達靈頓(Darlinton)電晶體 | 10-36, 10-39 |
| TIP120, 2SD560 | 10-24, 10-40 |
| TRIAC, BTA12-600B | D-10 |
積體電路(IC)
| 邏輯閘(logic gate) | 7-15, 11-25, D-13 |
| TTL(74LS系列)和CMOS(74HC與40系列) | 7-16 |
| 7408 | 7-9 |
| 74HC595(串入並出 IC) | 7-10, 7-11(運作方式), 7-12, 7-14 (shiftOut()指令) |
| 7447, 7448 | 7-10 |
| 74LS164 | 9-14 |
| MAX7219(LED驅動IC) | 8-11, 8-14 |
| HD44780 (文字型液晶控制IC) | 9-3, 9-9 |
| L298N馬達驅動、控制IC | 14-18 |
| W5100, ENC28J60,以太網路晶片 | 15-22 |
運算放大器
| 運算放大器 | 6-11 |
| LM358與741 | 6-12, 6-16 |
| 放大倍數計算式 | 6-13 |
馬達
| 直流馬達(型號:FA-130, RE-140, RE-260, RF-300, RE-280) | 10-15, 10-17, 14-18 |
| 堵轉(stall) | 10-18 |
| 步進馬達 | 10-16 |
| 電晶體馬達控制電路 | 10-24, 10-39 |
| H橋式馬達控制電路 | 10-27 |
| PWM轉速控制 | 10-25, 10-30, 10-32, 14-21 |
伺服馬達(servo)
| 伺服馬達(servo) | 11-2 |
| PPM訊號 | 11-4 |
| 改造成360度旋轉 | 11-28 |
| Futaba S3003 | 12-12 |
感測器
| 壓力感測器 | 6-10 |
| 彎曲感測器 | 6-9 |
| 麥克風 | 6-11 |
| 揚聲器、蜂鳴器與壓電元件 | 13-2, 13-6, 13-32, 13-33(電路) |
| DHT-11(溫濕度感測器) | 9-19, 16-11 |
超音波
| 超音波原理 | 9-24 |
| 超音波元件 | 9-27 |
| 距離計算公式 | 9-25, 9-26 |
| pulseIn(),測量脈衝持續時間 | 9-28 |
序列埠通訊
| RS-232 | 5-4 |
| USB序列埠∕USB轉TTL | 5-6 |
| 傳輸速率(鮑率, Baud rate) | 5-9, 5-15, 5-17, 5-18, 11-11, 17-5, 17-29 |
| 緩衝區(buffer) | 18-12 |
| 序列埠監控視窗 | 5-18, 5-17, 5-22, 10-12 |
| UART, USART | 5-9, 8-43, 14-9, 18-8 |
SPI介面
| SPI介面 | 8-11, 15-24 |
| SS,周邊選擇線 | 8-11, 8-12 |
| MOSI,主機往周邊資料線 | 8-11, 8-12 |
| MISO,周邊往主機資料線 | 8-11, 8-12 |
| SCK,序列時脈線 | 8-11, 8-12 |
I2C / TWI介面
| I2C / TWI介面 | 11-9, 11-11, 11-12, 11-16 |
| Wii左手把(搖桿、按鈕與加速度計) | 11-9, 11-18, 11-19 |
| 控制機械手臂(平台) | 11-5 |
藍牙(Bluetooth)與藍牙模組
| 藍牙(Bluetooth)與藍牙模組 | 14-6, 14-8 |
| AT命令 | 14-10 |
| 2.4GHz, ISM頻段 | 14-5 |
| 主控(master)與從端(slave)操作模式 | 14-10 |
| 連接藍牙模組 | 14-11 |
| 配對 | 14-13 (Windows), 14-24 (Android), Mac OS X |
| NFC | 14-5 |
| SPP | 14-7 |
MIDI數位音樂介面
| MIDI數位音樂介面 | 13-18 |
| MIDI介面插座(DIN插座) | 13-25, 13-26 |
| 頻道(channel)編號 | 13-19 |
| MIDI訊息格式 | 13-23 |
| MIDI音源, SoundFont | 13-20 |
| 變換音色 | 13-27 |
| 虛擬MIDI埠、MIDI橋接軟體、音源驅動程式 | 13-29 |
RFID(無線射頻辨識)
| RFID系統簡介 | 18-4 |
| RFID頻率 | 18-7, 18-8 |
| 電子標籤(tag) | 18-4, 18-5 |
| 編碼 | 18-11, 18-14 |
網路相關
| IP位址 | 15-3, 15-4, 15-6, 15-25, 16-6, 17-10 |
| 閘道(Gateway) | 15-5, 15-25, 16-6 |
| 子網路遮罩(Subnet mask) | 15-6, 15-7, 15-25, 16-6 |
| MAC位址(實體位址) | 15-8, 15-25, 16-6 |
| 網域名稱與DNS(網域名稱伺服器) | 15-9 |
| 埠號(Port) | 15-12, 15-13, 15-25, 17-4 |
| 以太網路(Ethernet) | 15-18, 15-22 |
| TCP, UDP封包 | 15-19 |
| 橋接器(bridge) | 15-23 |
| 跳線(cross-over) | 15-24 |
| HTTP回應 | 15-20, 15-26 |
| GET方法 | 15-20, 15-21, 16-21, 16-31 |
| POST方法 | 15-20, 16-21, 16-23, 16-24 |
| HEAD方法 | 16-4, 16-5 |
網頁HTML語法
| HTML語法 | 15-14 |
| URL編碼 | 16-22 |
| doctype ,文件類型定義 | 15-16 |
| <html>,根元素 | 15-16 |
| <head>,檔頭 | 15-16 |
| <title>,標題 | 15-16 |
| <body>,內文 | 15-16 |
| <p>,段落 | 15-15 |
| <br>,斷行 | 15-15 |
| <img>,影像 | 16-9 |
| <a>,超連結 | 16-10 |
| <meta>,描述網頁資料 | 15-16, 16-17 |
| <form>,表單 | 16-18, 16-26 |
| <input>,表單輸入元素 | 16-18, 16-19 |
| XML | 18-22 |
程式庫
| 程式庫 | 5-15 |
| IRremote.h | 12-9, 12-14 |
| SoftwareSerial.h,軟體序列通訊程式庫 | 14-10, 18-12 |
ArduinoNunchuk.h(Wii左手把程式庫)
| ArduinoNunchuk.h(Wii左手把程式庫) | 11-20, 11-21 |
| init(),初始化左手把 | 11-21 |
| analogX,類比X值 | 11-21, 11-23 |
| analogY,類比Y值 | 11-21, 11-23 |
| accelX,加速度X值 | 11-21, 11-23 |
| accelY,加速度Y值 | 11-21, 11-23 |
| accelZ,加速度Z值 | 11-21 |
| zButton,Z按鈕值 | 11-21 |
| cButton,C按鈕值 | 11-21 |
DHT11(溫濕度感測器程式庫)
| DHT11(溫濕度感測器程式庫) | 9-20 |
| read(),讀取感測資料 | 9-21, 9-22, 9-24 |
| temperature(),讀取溫度值 | 9-21, 9-22, 9-24 |
| humidity(),讀取濕度值 | 9-21, 9-22, 9-24 |
Ethernet.h(官方以太網路程式庫)
| Ethernet.h(以太網路程式庫) | 15-25, 15-28 |
| IPAddress,IP位址資料類型 | 15-25 |
| EthernetServer。以太網路伺服器類別 | 15-25 |
| EthernetClient,以太網路用戶端類別 | 15-26 |
| Ethernet.begin(),啟動以太網路連線 | 15-25 |
| Ethernet.localIP(),傳回伺服器端的IP位址 | 15-28 |
| connected(),確認是否已建立連線 | 15-26 |
| available(),確認用戶端是否存在 | 15-26 |
| stop(),終止連線 | 15-26 |
Firmata(通用訊息格式程式庫)
| Firmata(通用訊息格式程式庫) | 17-28 |
| begin(),初始化連線 | 17-33 |
| setFirmwareVersion(),設定韌體版本 | 17-30 |
| IS_PIN_PWM(),檢查腳位是否支援PWM | 17-30 |
| IS_PIN_DIGITAL(),檢查是否為數位腳 | 17-35 |
| analogWriteCallback(),類比訊息回呼函數 | 17-29 |
| digitalWriteCallback(),數位訊息回呼函數 | 17-29 |
| sendAnalog(),傳送類比資料 | 17-33 |
| SET_PIN_MODE,設定腳位模式 | 17-38 |
| writePort(),輸出數位值 | 17-36 |
IRremote(紅外線遙控程式庫)
| IRremote,紅外線遙控程式庫 | 12-9, 12-14 |
| SoftwareSerial.h,軟體序列通訊程式庫 | 14-10 |
| Streaming,輸出字串程式庫 | 16-8, 16-13 |
LiquidCrystal.h(LCD顯示模組控制)
| LiquidCrystal.h(LCD顯示模組控制) | 9-6, 9-23 |
| LiquidCrystal_SR.h(串接式LCD顯示模組控制) | 9-6, 9-23 |
| home(),讓游標回到原點 | 9-7 |
| setCursor() ,設定游標位置 | 9-7, 9-23 |
| clear(),清除畫面並重設游標位置 | 9-7 |
| display(), noDisplay() | 9-14 |
| print(),輸出顯示文字 | 9-7, 9-23 |
| cursor(), noCursor() | 9-7 |
| blink(), noBlink | 9-7, 9-14 |
| rightToLeft(),從右到左顯示 | 9-9 |
| autoScroll(),自動捲動 | 9-9 |
| CGROM,顯示特殊符號與日文片假名 | 9-9 |
| CGRAM,顯示自訂字元符號 | 9-11 |
Serial.h(序列通訊程式庫)
| available(),檢查是否有資料 | 5-19 |
| begin(),初始化連線 | 5-15 |
| print(), println(),輸出字串 | 5-16, 5-18(格式轉換) |
| read(),讀取序列文字 | 5-20, 10-13 |
| write(),輸出字元 | 11-8, 11-13, 13-26 |
Servo.h(伺服馬達程式庫)
| Servo.h(伺服馬達程式庫) | 11-8 |
| attach(),設定接腳 | 11-8, 11-31, 11-32 |
| write(),設定旋轉角度 | 11-8, 11-31, 11-32 |
SPI.h(SPI界面程式庫)
| SPI.h(SPI界面程式庫) | 8-20, 8-23 |
| begin(),初始化連線 | 8-23 |
| transfer(),傳送資料 | 8-20 |
| setDataMode(),設定資料模式 | 8-44 |
| setBitOrder(),設定位元傳輸順序 | 8-44 |
| setClockDivider(),設定頻率 | 8-44 |
| MSBFIRST,高位元先傳 | 8-43, 8-44 |
| LSBFIRST,低位元先傳 | 8-43 |
Wire.h(I2C/TWI介面通訊程式庫)
| Wire.h | 11-13 |
| begin(),初始化連線 | 11-13 |
| beginTransmission(),開始傳送 | 11-13 |
| write(),傳遞資料 | 11-13 |
| endTransmission(),結束傳送 | 11-13 |
| onReceive(),設定接收資料 | 11-15 |
| available(),確認有無資料 | 11-15 |
| read(),讀取資料 | 11-15 |
WebServer.h(Webduino程式庫)
| 命令(command) | 16-2, 16-4 |
| setDefaultCommand(),設定預設命楞 | 16-5, 16-6 |
| addCommand(),新增命令 | 16-5, 16-7 |
| processConnection(),處理連線請求 | 16-6 |
| readPostparam(),讀取POST資料 | 16-25 |
| URLPARAM_RESULT,URL解析字串值 | 16-32 |
| nextURLparam(),讀取URL參數 | 16-33 |
| URLPARAM_EOS,URL參數結尾 | 16-33 |

我用的板子是UNO但上傳資料時卻出現avrdude: stk500_getsync(): not in sync: resp=0x00換選單中的板子還是一樣不知道怎麼用請教教我 上傳過程中板子的TxD和RxD沒亮會怎樣嗎求解
將Uno接上電腦之後,在裝置管理員底下,更新驅動程式軟體,或者解除安裝,再重新安裝看看。
thanks,
jeffrey
我一開始連接板子到window XP時不是會出現驅動程式畫面,我按步驟到軟體資料夾點drivers/FTDI USB Drivers但電腦搜尋不到我關掉後要裝驅動程式畫面再也沒出現過了我不知道有沒有裝上,請問要如何得知
FTDI是舊板採用的USB晶片驅動程式。
1. 請先移除Arduino軟體,不要接控制板。
2. 下載Arduino軟體的安裝版
3. 安裝Arduino軟體,在安裝過程中,底下的畫面第二點包含Uno的USB驅動程式,它會自動幫你安裝。
安裝完畢後,再接上UNO板,系統應該就能找到對應的驅動程式了。
thanks,
jeffrey
你好~ 我剛買了L298N 我想問10-33 裏面 那兩個小馬達接到L298N的方法 是把螺絲弄出來
然後把銅線放進去再收好螺絲嗎?? 我不太好 所以想先問一下比較好><
謝謝~
正解!
thanks,
jeffrey