arduino学习笔记(二)——bamboosir920

arduino学习笔记(二)

文章目录

  • arduino学习笔记(二)
    • 时间函数
      • delay()函数
      • delayMicroseconds()函数
      • micros()函数
      • millis()函数
    • I/O函数
      • 引脚配置
        • INPUT
        • OUTPUT
      • pinMode()函数
      • digitalWrite()函数
      • analogRead()函数
      • analogWrite()函数
      • 随机数
        • randomSeed(seed)
        • random()
      • 中断
        • 中断类型
        • attachInterrupt()函数
      • 通信
        • 并行通信
        • 串行通信
        • 异步
          • 同步位
          • 数据位
          • 奇偶校验位
          • 波特率
          • eg

时间函数

delay()函数

它接受单个整数(或数字)参数。此数字表示时间(以毫秒为单位)。当程序遇到这个函数时,应该等到下一行代码。然而,问题是,delay()函数并不是让程序等待的好方法,因为它被称为阻塞(blocking)函数

delay(ms);

delayMicroseconds()函数

接受单个整数或数字为参数,表示时间,以微秒为单位。
1000000us=1s;

精确延迟的最大值为16383.

delayMicroseconds(us);

micros()函数

返回arduino程序开始运行当前程序时的微秒数,大概在70Min后溢出,回到零

unsigned long time;
time=micros();

millis()函数

此函数用于返回Arduino板开始运行当前程序时的毫秒数。这个数字在大约50天后溢出,即回到零。

millis() ;

I/O函数

引脚配置

INPUT

Arduino引脚默认配置为输入,因此在使用它们作为输入时,不需要使用 pinMode()显式声明为输入。以这种方式配置的引脚被称为高阻抗状态。此状态下,对采样电路要求非常小,相当于引脚钱串联100M欧的串联。

意味着从输入引脚从一个状态切换到另一个状态所需电流非常小。

上拉电阻如果没有输入,上拉电阻通常用于将输入引脚引导到已知状态。这可以通过在输入端添加上拉电阻(到5V)或下拉电阻(接地电阻)来实现。10K电阻对于上拉或下拉电阻来说是一个很好的值。

使用内置上拉电阻,引脚配置为输入
通过将pinMode()设置为INPUT_PULLUP可访问这些内置上拉电阻。设置上拉电阻有效反转了INPUT模式的行为,HIGH表示传感器关闭,LOW表示传感器打开。

当将传感器连接到配置为INPUT_PULLUP的引脚时,另一端应接地。在简单开关的情况下,这会导致当开关打开时引脚变为高电平,当按下开关时引脚为低电平。上拉电阻提供足够的电流来点亮连接到被配置为输入的引脚的LED。

pinMode(3,INPUT) ;
pinMode(5,INPUT_PULLUP) ; 

引脚处于INPUT模式时,配置为有上拉电阻导通的引脚将被开启;如果引脚通过pinMode()切换到OUTPUT模式,引脚将配置为高电平。

OUTPUT

通过pinMode()配置为OUTPUT的引脚被认为处于低阻抗状态。这意味着它们可以向其他电路提供大量的电流。

足以点亮LED或者运行传感器电流(不要忘记串联电阻),单不足以运行继电器,电机

试图从输出引脚运行高电流器件,可能损坏或破坏引脚中的输出晶体管。可能会导致死引脚现象,最好通过470欧或1K欧电阻将OUTPUT引脚连接到其他器件

pinMode()函数

pinMode()函数用于将特定引脚配置为输入或输出。可以使用INPUT_PULLUP模式启用内部上拉电阻。此外,INPUT模式显式禁止内部上拉。

void setup() {
   pinMode(pin,mode);
}
\\pin - 你希望设置模式的引脚的编号
\\mode - INPUT,OUTPUT或INPUT_PULLUP。

digitalWrite()函数

digitalWrite()函数用于向数字引脚写入HIGH或LOW值。

如果引脚已被设置为OUTPUT,则其电压被设置为相应的值:HIGH为5V(或3.3V)。如果是INTPUT,digitalWrite()会启用(HIGH)或禁止(LOW)输入引脚内部上拉

在没有明确设置pinMode()时,digitalWrite()将启用内部上拉电阻,这就像一个大的限流电阻。

Void loop() {
   digitalWrite(pin ,value);
}
\\ pin - 你希望设置模式的引脚的编号
\\ value - HIGH或LOW

analogRead()函数

Arduino能够检测是否有一个电压施加到其引脚,并通过digitalRead()函数报告。开/关传感器(检测物体的存在)和模拟传感器之间存在一个差异,模拟传感器的值连续变化。

analogRead(pin);

analogWrite()函数

analogWrite()函数将模拟值(PWM波)写入引脚。它可用于以不同的亮度点亮LED或以各种速度驱动电机。在调用analogWrite()函数之后,引脚将产生指定占空比的稳定方波,直到下一次调用analogWrite()或在相同引脚上调用digitalRead()或digitalWrite()。

analogWrite(pin , value ) ;
\\value − 占空比:0(始终导通)到255(始终关断)之间。

随机数

randomSeed(seed)

randomSeed(seed)函数重置Arduino的伪随机数生成器。

虽然random()返回的数字的分布本质上是随机的,但是顺序是可预测的。你应该将发生器重置为某个随机值。如果你有一个未连接的模拟引脚,它可能会从周围环境中拾取随机噪音。

randomSeed(analogRead(5)); 

从5号针脚读取电压值,获得随机种子

random()

random函数生成伪随机数。

long random(max) 
long random(min, max) 

中断

中断(interrupt)停止Arduino的当前工作,以便可以完成一些其他工作。

  • 中断可以来自各种来源
  • 大多数Arduino设计有两个硬件中断(称为“interrupt0”和“interrupt1”)分别硬连接到数字I/O引脚2和3。
  • Arduino Mega有六个硬件中断,包括引脚21,20,19和18上的附加中断(“interrupt2”到“interrupt5”)。
  • 你可以使用称为“中断服务程序”(Interrupt Service Routine,通常称为ISR)的特殊函数来定义程序。
  • 你可以定义该程序并指定上升沿,下降沿或两者的条件。在这些特定条件下,将处理中断。
  • 每次在输入引脚上发生事件时,都可以自动执行该函数。

中断类型

硬件中断 - 它们响应外部事件而发生,例如外部中断引脚变为高电平或低电平。

软件中断 - 它们响应于在软件中发送的指令而发生。“Arduino语言”支持的唯一类型的中断是attachInterrupt()函数。

attachInterrupt()函数

中断函数

attachInterrupt(digitalPinToInterrupt(pin),ISR,mode);
attachInterrupt(pin, ISR, mode);

ISR:
当中断发生时,执行的函数。

mode的值:

  • LOW :在引脚为低电平时触发中断。
  • CHANGE :在引脚更改值时触发中断。
  • FALLING :当引脚从高电平变为低电平时触发中断。
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位。

eg

启动时发送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
   }
}

你可能感兴趣的:(arduino)