Arduino学习总结 + 实习项目

本文介绍了Arduino的基础函数,包括pinMode、digitalWrite、analogWrite、analogRead和map,以及如何使用它们进行基本的LED控制。接着,详细讲解了串口通信、IIC总线协议和SPI通讯协议,提供了代码示例。最后,讨论了电机驱动、红外遥控小车运动的实现,并提到了麦克纳姆轮的控制方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

基本函数

1、pinMode( )

2、digitalWrite( )

3、analogWrite( )

4、analogRead( )

5.map( )

基本点灯

串口通信

1、连接

 2、代码

IIC总线协议

1、物理层

2、协议层

3、代码

SPI通讯协议

总结三种通信协议

电机驱动 

红外遥控小车运动

1、材料

2、代码

麦克纳姆轮

1、正确安装方式ABBA

2、控制运动

3、代码(待调试)


基本函数

1、pinMode( )

将指定引脚配置为输入或输出模式 无返回值

语法:

pinMode(pin,mode)

pin:要设置的引脚编号

mode:模式

INPUT 输入模式
OUTPUT 输出模式
INPUT_PULLUP 上拉输入模式

2、digitalWrite( )

设置引脚的输出电压为高电平或低电平 无返回值

语法:

digitalWrite(pin,value)

pin:要设置其输出的引脚编号

value:表示输出的电压

HIGH(1)

5V

LOW(0) 0V

3、analogWrite( )

模拟输出函数 在指定引脚输出指定占空比的PWM方波 无返回值

语法:

analogWrite(pin,value)

pin:产生方波的指定引脚

value:占空比,介于0-255之间,用于计算一段时间内的通导时间

4、analogRead( )

模拟输入函数 读取模拟接口的值 即施加到其中一个引脚的电压

语法:

val = analogRead(pin)

val:返回值 返回0-1023之间的数字,表示0-5V的电压

pin:要读取电压的引脚

5.map( )

将变量按照映射范围来返回相应的值

语法:

val = map(value,fromLOW,fromHIGH,yoLOW,toHIGH)

将value变量按照fromLOW-formHIGH的范围,映射到toLOW-toHIGH的范围

val:接收映射返回值

基本点灯

1、闪烁的LED灯

//基本点灯
//闪烁的LED灯

int pin = 13;//Arduino Mega的LED灯引脚为13号引脚
void setup() {
  pinMode(pin,OUTPUT);
}

void loop() {
  digitalWrite(pin,HIGH);
  delay(5000);//暂停5000ms
  digitalWrite(pin,LOW);
  delay(5000);
}

2、用按钮控制LED灯的闪烁(第一种)

//基本点灯
//用按钮来控制LED灯的闪烁+按钮防抖
//这种按钮为按下闪烁,放松熄灭

int LEDpin = 13;
int pin = 2;//假设按钮连接的是2号引脚
void setup() {
  pinMode(LEDpin,OUTPUT);
  pinMode(pin,INPUT);
}

void loop() {
  if(digitalRead(pin) == HIGH){
    digitalWrite(pin,HIGH);
  }else{
    digitalWrite(pin,LOW);
  }
  delay(1);
}

3、用按钮控制LED灯的闪烁(第二种)

//基本点灯
//用按钮来控制LED灯的闪烁+按钮防抖
//这种按钮为每次按下和放松为一次改变状态

int LEDpin = 13;
int pin = 2;
int x = 0;//x=0灯灭,x=1灯亮
int deng1 = 0;//按键当时的状态
int deng2 = 0;//按键之前的状态
void setup() {
  pinMode(LEDpin,OUTPUT);
  pinMode(pin,INPUT);
}

void loop() {
  deng1 = digitalRead(pin);
  if(deng1 == 1 and deng2 == 0){
    delay(50);//按钮防抖
    if(x == 0){
      x = 1;
    }else{
      x = 0;
    }
  }
  deng2 = deng1;
  delay(1);
  if(x == 1){
    digitalWrite(LEDpin,HIGH);
  }else{
    digitalWrite(LEDpin,LOW);
  }
}

4、会呼吸的LED灯

//基本点灯
//会呼吸的LED灯

int pin = 13;
void setup() {
  pinMode(pin,OUTPUT);
}

void loop() {
  for(int i = 0;i < 255;i++){
    analogWrite(pin,i);
    delay(4);
  }
  for(int i = 255;i > 0;i++){
    analogWrite(pin,i);
    delay(4);
  }
}

串口通信

1、连接

需要两个数据引脚,一个用于传输数据的TX(pin=1),另一个用于接收的RX(pin=0)。一个设备的TX连接另一个设备的RX,反之,RX连接TX。

还需要两个设备共地,即参考电压一致。所以要把两个设备的GND引脚相连。

 2、代码

使用库#include <SoftwareSerial.h>

SoftwareSerial mySerial(rxPin,txPin); 类库的构造函数,通过它用户可以指定软串口RT、TX引脚。mySerial是用户自定义的软件串口对象 rxPin是软串口接收引脚(类似于RX)txPin是软串口发送引脚(类似于TX)

begin( );

available( ); Serial.available( ) 获取软串口接收到的数据个数,即获取串口接收缓冲区的字节数(缓冲区最多保存64bytes的数据)当其大于0时,说明串口接收到了数据,可以读取

//available典型用法

while(Serial.available() > 0){
    data = Serial.read();
    delay(2);
}

read( ); Serial.read( ) 从串口缓冲区中取出并读取一个bytes的数据

peek( ); Serial.peek( ) 从缓冲区返回一个字节数据,与read( )不同的是,peek( )读取数据后不会在缓冲区删除修改数据

write( ); Serial.write( ) 以字节形式输出数据到串口(与IIC中使用的wire.h一致)

listen( ); 开启串口监听状态

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值