#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
- #if ARDUINO >= 100 //版本兼容设置
- #include"Arduino.h"
- #else
- #include"WProgram.h"
- #endif
- class XXX{ //声明类
- private:
- public:
- }
- #ifndef XXX_H //条件编译命令,判断XXX_H是不是已经存在
- #define XXX_H
- .
- .
- .
- #endif
- #include"XXX.H" //编写cpp文件,注意应加上版本兼容语句
- XXX::XXX()
- 返回类型 XXX::other_func()
- func_name1 KEYWORD1 //关键字高亮显示
- func_name2 KEYWORD2
硬件串口(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像素数据