📜  Arduino-高级I O功能(1)

📅  最后修改于: 2023-12-03 14:59:22.767000             🧑  作者: Mango

Arduino-高级I/O功能

Arduino是一个开源电子平台,可用于建立各种交互式电子项目。Arduino板上有大量的数字输入输出引脚,可以用于控制LED、驱动电机、传感器、通信和网络等各种应用。除此之外,Arduino还支持一些高级的I/O功能,使我们能够更为灵活地控制硬件。

PWM

PWM是脉宽调制技术,可以模拟模拟信号。Arduino的某些引脚支持PWM输出,可以将其输出信号的占空比调整为模拟信号的大小。可以用PWM输出来控制LED的亮度、电机的转速、舵机的角度等等。

int ledPin = 9;    // 设置LED引脚
int brightness = 0;    // 初始化亮度

void setup() {
  pinMode(ledPin, OUTPUT);    // 将引脚设为输出模式
}

void loop() {
  analogWrite(ledPin, brightness);    // 给引脚设置PWM输出信号
  brightness = brightness + 5;    // 逐渐提高亮度
  if (brightness > 255) {    // 如果亮度达到最大值,就反转亮度递增的方向
    brightness = 0;
  }
  delay(30);    // 等待一段时间再重复操作,可以控制PWM输出的频率
}
数字输入输出

Arduino的数字输入输出功能可以通过引脚来控制高低电平。默认情况下,Arduino的引脚都是数字输入输出引脚,可以使用digitalRead()来获取引脚接收到的电平,使用digitalWrite()来设置引脚输出的电平。

int ledPin = 9;    // 设置LED引脚
int buttonPin = 2;    // 设置按键引脚

void setup() {
  pinMode(ledPin, OUTPUT);    // 将LED引脚设置为输出模式
  pinMode(buttonPin, INPUT);    // 将按键引脚设置为输入模式
}

void loop() {
  int buttonState = digitalRead(buttonPin);    // 获取按键引脚的电平
  if (buttonState == HIGH) {    // 如果按键被按下
    digitalWrite(ledPin, HIGH);    // 点亮LED
  } else {
    digitalWrite(ledPin, LOW);    // 熄灭LED
  }
}
外部中断

Arduino还支持外部中断功能,可以在特定引脚上设置回调函数,用于中断当前程序的执行,响应中断事件。Arduino Uno板上有2个中断引脚,可以用于控制电机、编码器、传感器等复杂的应用场景。

int motorPin1 = 9;    // 设置电机引脚1
int motorPin2 = 10;    // 设置电机引脚2
int buttonPin = 2;    // 设置按键引脚
volatile int count = 0;    // 定义计数器,用于计算电机转动的次数

void setup() {
  pinMode(motorPin1, OUTPUT);    // 将电机引脚1设置为输出模式
  pinMode(motorPin2, OUTPUT);    // 将电机引脚2设置为输出模式
  pinMode(buttonPin, INPUT);    // 将按键引脚设置为输入模式
  attachInterrupt(digitalPinToInterrupt(buttonPin), countPulse, RISING);    // 在按键引脚上设置中断回调函数
}

void loop() {
  if (count >= 360) {    // 如果电机已经转动360度
    digitalWrite(motorPin1, LOW);    // 停止电机转动
    digitalWrite(motorPin2, LOW);
  } else {
    digitalWrite(motorPin1, HIGH);    // 开始电机转动
    digitalWrite(motorPin2, LOW);
  }
}

void countPulse() {    // 中断回调函数,用于计数
  count++;
}

以上是一些Arduino的高级I/O功能介绍,可以用于控制各种各样的硬件,如果需要使用更为复杂的功能,可以在参考手册上查找相关资料。