在网上看到一个Arduino函数说明,觉得挺好转过来留着-Arduino中文社区 - Powered by Discuz! Archiver

helloword1111 发表于 2020-2-10 21:42

在网上看到一个Arduino函数说明,觉得挺好转过来留着

#define 常量名 常量值
% 取模运算符
String abc/char abc定义字符串
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_name1KEYWORD1   //关键字高亮显示
[*]func_name2KEYWORD2

复制代码
硬件串口(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;
}
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像素数据

meiyang5156 发表于 2020-3-3 11:01

谢谢分享!

skyhewenzhi 发表于 2020-7-29 17:25

很厉害的东西,谢谢版主无私分享

平凡主角 发表于 2020-9-28 13:53

新手路过,请多指教。。
页: [1]
查看完整版本: 在网上看到一个Arduino函数说明,觉得挺好转过来留着