一、引脚
二、函数介绍
1.pinMode(pin, mode)
引脚配置成输入或者输出,其中mode可以为INPUT或者OUTPUT
例如:
pinMode(7, INPUT); // 将引脚7定义为输入接口
2.digitalWrite(pin, value)
打开一个数值引脚并将其赋值高电平或者低电平,此引脚必须是前面定义过的输入或者输出模式,否则digitalWrite不生效。
value可以为HIGH或者LOW
例如:
digitalWrite(8, HIGH); // 给8号引脚高电平
3.digitalRead(pin)
读取一个输入状态的引脚值。当引脚处于高电平状态时返回HIGH,否则返回LOW。
例如:
val = digitalRead(7); // 读取7号引脚的值并赋值给val
4.analogRead(pin)
读取模拟输入引脚的值,并将其表示为0至1023之间的数值,对应0至5V的电压。
例如:
val = analogRead(0); // 读取模拟接口0的值,并赋值给val
5.analogWrite(pin, value)
改变该引脚的PWM输出数值,引脚(pin)可以是3、5、6、9、10、11。PWM值的改变范围是0至255,对应的电压输出值是0至5V。
例如:
analogWrite(9, 128); // 将9号引脚的LED点亮至50%亮度
6.Serial.begin(speed)
为与Arduino串口通信做准备,我们可以通过Arduino的上位机软件检测返回值,这里设置通信的波特率,我们通常使用9600,我们也可以使用其他的通信波特率,但最大值是115200.
例如:
Serial.begin(9600);
7.Serial.print(data)
Serial.print(data, encoding)
将数据通过串口传回,encoding指明数据传回类型,默认为纯文本格式。
例如:
Serial.print(75); //显示75
Serial.print(75, DEC); //同上
Serial.print(75, HEX); //“4B”(75的十六进制表达)
Serial.print(75,OCT); //“113”(75的八进制表达)
Serial.print(75, BIN); //“1001011”(75的二进制表达)
Serial.print(75, BYTE); //“K”(K的ASCII码值是75)
8.Serial.println(data)
Serial.println(data, encoding)
与Serial.print(data)相同,只是在传回数据的末尾多加一个换行符(\r\n)。换行符的意义就等于你在输入一些文字后敲入的回车键。
例如:
Serial.println(75); //显示“75\r\n”
Serial.println(75, DEC); //同上
Serial.println(75, HEX); //“4B\r\n”
Serial.println(75,OCT); //“113\r\n”
Serial.println(75, BIN); //“1001011\r\n”
Serial.println(75, BYTE); //“K\r\n”
9.pulseIn(pin, value)
读取一个引脚的脉冲持续时间,例如使用红外传感器或者加速度计时。它们都是利用单位时间不同的脉冲来获得状态值的传感器。
例如:
time = pulseIn(7,HIGH); // 读取7号引脚持续为高电平的时间
10.delay(ms)
延迟一定毫秒的时间。
例如:
delay(500); // 延迟500ms
11.delayMicroseconds(us)
延迟一定微秒的时间。
例如:
delayMicroseconds(1000); //延时1000us
12.min(x, y)
x和y中返回最小值。
例如:
val = min(10, 20); // val 的值为10
13.max(x, y)
x和y中返回最大值。
例如:
val = max(10, 20); // val 的值为20
14.abs(x)
传回x的绝对值,正数的绝对值是其本身,负数的绝对值是其相反的数。
例如:
val = abs(-5); // val 的值是5
15.map(value, fromLow, fromHigh, toLow, toHigh)
将value的值按照fromLow与fromHigh的范围,对等转换至toLow与toHigh的范围。通常应用于读取相似信号,并将其转换到程序中所需的范围。
例如:
val = map(analogRead(0), 0,1023, 100, 200); //将模拟接口0读取的0~1023的值转换成0~100的值
16.pow(base, exponent)
传回一个数(base)的指数(exponent)的值
例如:
double x = pow(y, 32); //使x是y的32次方
17.sqrt(x)
去x的平方根。
例如:
double a = sqrt(1138); // 1138的平方根是33.73425674438
18.sin(rad)
传回某个角度(用弧度单位)的正弦值。
例如:
double sine = sin(2); // 2弧度的正弦值近似为0.90929737091
以此有cos(rad)、tan(rad)...
shiftOut(dataPin, clockPin, bitOrder, value)
发送数据到移位寄存器,用来扩大数字输出范围,此函数使用时有一个引脚作为数据输出,另一个引脚用来表示时钟,bitOrder用来表示字节的格式(LSBFIRST是最低有效位,MSBFIRST是最高有效位),value则要输出字节的值。
例如:
shiftOut(dataPin, clockPin, LSBFIRST, 255);
millis()
检测程序执行开始到当前的时间。
例如:
duration = millis()-lastTime; //表示从lastTime到当前的时间
constrain(x, a, b)
判断x与a和b的关系,若x小于a,则传回a;若x介于a与b之间,则传回x本身;若大于b,则传回b。
例如:
val = constrain(analogRead(0), 0, 255); // 忽略大于255的数
randomSeed(seed)
复位Arduino的随机数发生器,会产生一系列的随机数,虽然这些数字貌似是随机产生,但是它们的顺序其实还是可以被预测的。所以如果我们需要真正的一组随机数,我们就要重新设定随机数的种子。若我们没有连接一个模拟值引脚,它可以从周围环境(无线电波、宇宙射线、手机或者荧光灯的电磁干扰等)获得随机噪声。
例如:
randomSeed(analogRead(5)); // 利用5号引脚的噪声
long random(max)
long random(min, max)
传回指定区间的长整型随机数。如果没有规定最小值,则默认最小值为0。
例如:
long randnum = random(o, 100); //传回一个介于0~100之间的数
long randnum = random(11); //传回一个介于0~10之间的数
int Serial.available()
传回一个数值,告诉上位机有多少字节没有被read()函数读取,若Serial.available()返回值是0,则代表串行数据都已被read()读取。
例如:
int count = Serial.available();
int Serial.read()
读取一个字节的串行数据
例如:
int data = Serial.read();
Serial.flush()
因为数据传输的速度要大于Arduino程序处理速度,所以Arduino会将数据先存放在缓存区中。如果有需要,我们可以利用Serial.flush()函数来清空缓存区,以确保缓存区的数据是最新的。
例如:
Serial.flush();
三、程序运行
1.一个Arduino程序分为两部分:
void setup()
在这个函数里防止初始化Arduino的程序,使主循环程序在开始之前设置好相关参数。
void loop()
这是Arduino的主函数。这套程序会一直重复执行,直到电源被断开。
2.Arduino语言有一些特殊意义的关键字。
例如:
HIGH和LOW用来表示你打开或关闭(高电平或者低电平);
Arduino的一个引脚(pin),INPUT和OUTPUT用来设定某个特定引脚是输入接口还是输出接口;
INPUT_PULLUP用来设定某个引脚为输入,并且被拉高;
True和False,像它们的字面意思一样;表示一个条件或一个运算是真还是假。
3.语法规则如C语言