#define 常量名 常量值
% 取模運算符
String abc / char abc[n] 定義字符串
pinMode(pin,mode); 用於引腳的初始化 mode包括 INPUT/OUTPUT/INPUT_PULLUP
Arduino 數模轉換器有 10位精度,能夠將0-5V轉換爲 0-1023,僅用於analogRead(pin) analogWrite(n) 寫的並非真正的模擬信號,而是佔空比不一樣的方波:電壓=佔空比×5V,n∈(0,255),PWM(脈衝寬度調製)波 millis()/micros() 獲取系統通電或復位後的運行時間,單位是毫秒/微秒 當引腳懸空時,其電壓值處於不定狀態,故要根據電壓值進行其餘操做時應避免懸空
tone(pin,frequency,duration) 佔空比爲定值50%, duration默認無窮大,若無duration,則應用noTone()來中止發聲,注意:同一時間 tone()僅能做用於一個引腳 pulseIn(pin,value,timeout) 返回脈衝寬度,單位爲微秒,timeout超時時間,默認爲 1s 串口監視器中的中止符是在按下「發送」後系統自動發動的
外部中斷
LOW/CHANGE/RISING/FALLING 低電平/變電平/上升沿/降低沿觸發attachInterrupt(中斷編號,中斷函數名(返回void),中斷模式) 初始化中斷引腳
detachInterrupt(中斷編號) 禁用外部中斷
編寫library 函數
硬件串口(UART)通訊
兩個設備TX與RX交叉鏈接,GND相連
在MEGA上USB口是和引腳 0,1連在一塊的
Serial.available() 返回串口接收緩衝區的字節數
Serial.begin(speed,config) 初始化串口,speed波特率,config數據、校驗、中止位
Serial.end() 釋放串口通訊引腳,使其做爲普通引腳
Serial.find(target) 在緩衝區中搜索target,找到返回 true,不然返回false
Serial.findUntil(target,terminal) 搜索target直至terminal,無返回值
Serial.flush() 等待正在發送的數據發送完成
Serial.peek() 返回但不刪除一字節數據
Serial.print(value,format) 以ASCII碼格式輸出數據
Serial.read() 讀取並刪除一字節數據
Serial.readBytes(buffer,length) 讀取 length長度的數據並存入 buffer
Serial.readBytesUntil(character,buffer,length)
Serial.setTimeout(time) 設置超時(等待串口數據)時間,與前兩個函數配合使用
Serial.write(val/str/(buf,len)) 以字節形式輸出數據到串口,返回輸出的字節數
ps:對於MEGA,Serial 包括Serial,Serial1,Serial2,Serial3,Serial4
String += (char)Char 將Char添加到String後面
void serialEvent() 串口事件,在串口緩衝區有數據時觸發,實際是運行在兩次 loop之間
軟件模擬串口通訊
SoftwareSerial mySerial(rxPin.txPin) 構造函數,建立一個軟串口
mySerial.listen() 開啓軟串口監視狀態,一個時刻只能監視一個軟串口
mySerial.isListening() 判斷是否是處在監視狀態
mySerial.overflow() 檢測緩衝區是否是已經溢出
其餘函數和硬串口同樣
IIC總線與Wire類庫函數
Wire.begin(none/address) 以主機/從機模式加入IIC 總線
Wire.requestFrom(address,quantity,stop)主機向從機發送數據請求, stop:true 釋放 IIC
Wire.beginTransmission(address) 告訴某從機主機要向它發送數據
Wire.endTransmission(none/stop) 告訴從機數據發送完畢,stop:true釋放IIC
Wire.write(value/string/(date,length)) 主機從機間發送數據
Wire.available() 返回緩衝區的字節數
Wire.read() 從機或主機從緩衝區中讀取數據
Wire.onReceive(myHandler1) 從機的函數,主機endTransmission後myHandler1被觸發
Wire.onRequest(myHandler2) 從機的函數,主機requestFrom後myHandler2 被觸發
其中:void myHandler1(int numBytes) void myHandler2() numBytes:主機發送的字節數
SPI總線與SPI類庫函數
SPI.begin() 初始化SPI通訊
SPI.end() 關閉SPI 通訊
SPI.transfer(val) val要發送的字節數據,返回讀到的字節數據
shiftOut(datePin,clockPin,bitOrder,value) IDE自帶函數,模擬SPI串行輸出,無返回
shiftIn(datePin,clockPin,bitOrder) IDE自帶函數,模擬 SPI串行輸入,返回輸入數據
EEPROM類庫
EEPROM.write(address,value) 對指定地址寫入數據,無返回值
EEPROM.read(address) 從指定地址讀數據,若無數據,則讀出255
union date 共用體類型,將大於1B的數據存到 EEPROM
{ 此例將float數據存到EEPROM中
float a; 讀寫的時候是對c.b[ i]操做,輸出或其餘是對 c.a操做
byte b[4];
}
date c;
SD卡類庫
對SD卡中的文件進行操做,用 SD類
對SD卡文件中的具體內容操做用 file類
SD.begin(csPin) csPin爲輸出模式,連到SD卡使能端,返回 true/false
SD.exists(filename) 判斷某文件夾是否存在,返回true/false
SD.open(filename,mode) 打開某文件,mode:FILE_READ/FILE_WRITE,返回true/false
SD.remove(filename) 移除某文件夾,返回true/false
SD.mkdir(filename) 建立某文件夾,返回true/false
SD.rmdir(filename) 移除某空文件夾,返回true/false
file.available() 檢查並返回當前文件中可讀的字節數
file.close() 關閉某文件
file.peek() 讀取當前字節,但並不移動到下一字節
file.position() 獲取「光標」在當前文件中的位置
file.print(date,FORMAT) 以某格式輸出數據到文件
file.seek(position) 將「光標」移到某一位置
file.size() 獲取文件大小
file.read() 讀取1B數據
file.write(date/(buf,len)) 寫入數據到文件
以上file爲一個File 類對象
定義一個File對象myFile,再用myFile = SD.open()打開文件,此文件就和myFile關聯了
IRremote類庫
IRrecv object(recvPin) 構造函數,建立一個紅外接收頭對象,recvPin連到接收頭引腳
IRrecv.enableIRIn() 初始化紅外解碼
IRrecv.decode(&results) 檢查是否收到編碼,解碼信息存入decode_results對象results
IRrecv.resume() 接收下一個編碼
IRsend object() 建立 IRsend類對象
IRsend.sendNEC(data,nbits) 以NEC編碼格式發送指定值
IRsend.sendRaw(buf,len,hz) 以原始編碼格式發送信號
result.value 是接收到的編碼數據
LiquidCrystal類庫
LiquidCrystal(rs,(rw),enable,(d0,d1,d2,d3),d4,d5,d6,d7) 初始化LCD
lcd.begin(cols,rows) 設置顯示器的寬度和高度
lcd.clear() 清屏,光標移到左上角
lcd.home() 光標復位到左上角
lcd.setCursor(col,row) 設置光標到指定位置
lcd.write(data) 輸出一個字符到 LCD
lcd.print(data) 輸出一串字符到 LCD,返回輸出的字符數
lcd.(no)c/Cursor() 顯示/隱藏光標
lcd.(no)b/Blink() 開啓/關閉光標閃爍
lcd.(no)d/Display() 開啓/關閉LCD顯示功能
lcd.scrollDisplayLeft/Right() 向左/右滾屏
lcd.(no)a/Autoscroll() 開啓/關閉自動滾屏
lcd.createChar(num,data) 建立自定義字符,num 自定義字符編號,data像素數據 oop