它接受单个整数(或数字)参数。此数字表示时间(以毫秒为单位)。当程序遇到这个函数时,应该等到下一行代码。然而,问题是,delay()函数并不是让程序等待的好方法,因为它被称为阻塞(blocking)函数。
delay(ms);
接受单个整数或数字为参数,表示时间,以微秒为单位。
1000000us=1s;
精确延迟的最大值为16383.
delayMicroseconds(us);
返回arduino程序开始运行当前程序时的微秒数,大概在70Min后溢出,回到零
unsigned long time;
time=micros();
此函数用于返回Arduino板开始运行当前程序时的毫秒数。这个数字在大约50天后溢出,即回到零。
millis() ;
Arduino引脚默认配置为输入,因此在使用它们作为输入时,不需要使用 pinMode()显式声明为输入。以这种方式配置的引脚被称为高阻抗状态。此状态下,对采样电路要求非常小,相当于引脚钱串联100M欧的串联。
意味着从输入引脚从一个状态切换到另一个状态所需电流非常小。
上拉电阻如果没有输入,上拉电阻通常用于将输入引脚引导到已知状态。这可以通过在输入端添加上拉电阻(到5V)或下拉电阻(接地电阻)来实现。10K电阻对于上拉或下拉电阻来说是一个很好的值。
使用内置上拉电阻,引脚配置为输入
通过将pinMode()设置为INPUT_PULLUP可访问这些内置上拉电阻。设置上拉电阻有效反转了INPUT模式的行为,HIGH表示传感器关闭,LOW表示传感器打开。
当将传感器连接到配置为INPUT_PULLUP的引脚时,另一端应接地。在简单开关的情况下,这会导致当开关打开时引脚变为高电平,当按下开关时引脚为低电平。上拉电阻提供足够的电流来点亮连接到被配置为输入的引脚的LED。
pinMode(3,INPUT) ;
pinMode(5,INPUT_PULLUP) ;
引脚处于INPUT模式时,配置为有上拉电阻导通的引脚将被开启;如果引脚通过pinMode()切换到OUTPUT模式,引脚将配置为高电平。
通过pinMode()配置为OUTPUT的引脚被认为处于低阻抗状态。这意味着它们可以向其他电路提供大量的电流。
足以点亮LED或者运行传感器电流(不要忘记串联电阻),单不足以运行继电器,电机
试图从输出引脚运行高电流器件,可能损坏或破坏引脚中的输出晶体管。可能会导致死引脚现象,最好通过470欧或1K欧电阻将OUTPUT引脚连接到其他器件
pinMode()函数用于将特定引脚配置为输入或输出。可以使用INPUT_PULLUP模式启用内部上拉电阻。此外,INPUT模式显式禁止内部上拉。
void setup() {
pinMode(pin,mode);
}
\\pin - 你希望设置模式的引脚的编号
\\mode - INPUT,OUTPUT或INPUT_PULLUP。
digitalWrite()函数用于向数字引脚写入HIGH或LOW值。
如果引脚已被设置为OUTPUT,则其电压被设置为相应的值:HIGH为5V(或3.3V)。如果是INTPUT,digitalWrite()会启用(HIGH)或禁止(LOW)输入引脚内部上拉
在没有明确设置pinMode()时,digitalWrite()将启用内部上拉电阻,这就像一个大的限流电阻。
Void loop() {
digitalWrite(pin ,value);
}
\\ pin - 你希望设置模式的引脚的编号
\\ value - HIGH或LOW
Arduino能够检测是否有一个电压施加到其引脚,并通过digitalRead()函数报告。开/关传感器(检测物体的存在)和模拟传感器之间存在一个差异,模拟传感器的值连续变化。
analogRead(pin);
analogWrite()函数将模拟值(PWM波)写入引脚。它可用于以不同的亮度点亮LED或以各种速度驱动电机。在调用analogWrite()函数之后,引脚将产生指定占空比的稳定方波,直到下一次调用analogWrite()或在相同引脚上调用digitalRead()或digitalWrite()。
analogWrite(pin , value ) ;
\\value − 占空比:0(始终导通)到255(始终关断)之间。
randomSeed(seed)函数重置Arduino的伪随机数生成器。
虽然random()返回的数字的分布本质上是随机的,但是顺序是可预测的。你应该将发生器重置为某个随机值。如果你有一个未连接的模拟引脚,它可能会从周围环境中拾取随机噪音。
randomSeed(analogRead(5));
从5号针脚读取电压值,获得随机种子
random函数生成伪随机数。
long random(max)
long random(min, max)
中断(interrupt)停止Arduino的当前工作,以便可以完成一些其他工作。
硬件中断 - 它们响应外部事件而发生,例如外部中断引脚变为高电平或低电平。
软件中断 - 它们响应于在软件中发送的指令而发生。“Arduino语言”支持的唯一类型的中断是attachInterrupt()函数。
中断函数
attachInterrupt(digitalPinToInterrupt(pin),ISR,mode);
attachInterrupt(pin, ISR, mode);
ISR:
当中断发生时,执行的函数。
mode的值:
int pin = 2;
volatile int state = LOW;
void setup() {
pinMode(13, OUTPUT);
attachInterrupt(digitalPinToInterrupt(pin), blink, CHANGE);
}
void loop() {
digitalWrite(13, state);
}
void blink() {
# ISR function
state = !state;
}
需要大量I/O口,不考虑
同步位是与每个数据包传输的两个或三个特殊位。它们是起始位和停止位。分别标记数据包的开始和结束。
起始位始终只有一个,但停止位的数量可以配置为一个或两个(尽管通常保持为1)。
起始位始终由从1到0的空闲数据线指示,而停止位将通过将线保持在1处而转换回空闲状态。
每个分组中的数据量可以设置为5到9位的任意大小。当然,标准数据大小是基本8位字节,但其他大小有它们的用途。7位数据包的效率可能比8位高,特别是如果你只是传输7位ASCII字符。
用户可以选择是否应该有奇偶校验位,如果是,则奇偶校验应该是奇数还是偶数。如果数据位中的1的数目是偶数,则奇偶校验位为0。奇数的奇偶校验正好相反。
术语波特率用于表示每秒传输的位数[bps]。注意,它指的是位,而不是字节。协议通常要求每个字节与几个控制位一起传输。这意味着串行数据流中的一个字节可以包括11位。
启动时发送hello world,并根据提供的输入传送输出
void setup() {
Serial.begin(9600); //set up serial library baud rate to 9600
Serial.println("hello world"); //print hello world
}
void loop() {
if(Serial.available()) /available for reading from {
serial port
Serial.print("I received:"); //print I received
Serial.write(Serial.read()); //send what you read
}
}