让你一文学会arduino

大家好我是你们的朋友JamesBin,这篇课文能让你从0到1的学习arduino,下面让我们开始学习吧!

一、认识arduino

  Arduino这个名字源于意大利语,本意为“强壮的朋友”,于2005年诞生于意大利的伊夫雷亚交互设计学院(Interaction Design Institute Ivrea),主导项目的主要创始人之一名叫Massimo Banzi。

  Arduino项目创建的初衷,是为了降低交互设计学院里学生创作交互作品的门槛。其中除了减少学生的花费以外,还考虑到了其学习的难度。也就是说,只要花费很少的money,具有非常少量的编程知识,就可以根据天马行空的创意,创造出不同的作品。

  本着开源的精神,让更多的爱好者受益,Arduino项目创建的伊始,就遵守了开源硬件的协议,任何人都可以免费拿到Arduino硬件电路板的设计图纸,并根据自己的设计工艺进行批量生产。
近年来随着智能硬件的崛起,全世界兴起了一种名为创客的风潮,他们使用Arduino及其周边的各种硬件模块,快速搭建各种好玩的产品。比如可以快速创建个性化的空气质量检测器,火灾报警器,甚至有爱猫的朋友作出智能喂猫器,甚至还可以做出各种稀奇古怪的小型机器人,飞行爱好者们设计出各种飞行器,从而最终完成各种惊险刺激的航拍。
  既然Arduino可以做出这么多有趣的东西,接下来就让我们认识一下她吧!在这里插入图片描述
图片来源:Arduino UNO电路板

图片来源:Arduino UNO电路板
如上图所示,Arduino的基础电路板名叫Arduino UNO。这款电路板最初是2011年9月25日在纽约创客大会(New York Maker Faire)上发布的,型号名字“UNO”,是意大利语中“一”的意思。
简单概括来说,电路板主要包括三大部分:

  • 处理器
  • 电源接口
  • 扩展插槽

处理器使用的是Atmel公司生产的处理器。
  电源的供电方式有三种,第一种是直接通过USB接口直接供电,第二种是通过柱形外部电源接口进行供电,最后一种是通过扩展插槽上的3V或5V引脚进行供电。
  扩展插槽主要分为模拟信号引脚和数字信号引脚以及接地引脚。顾名思义,数字信号引脚可以直接引入或输出的是数字信号,模拟信号引脚引入或输出的是模拟信号。当电路设计复杂的时候,扩展插槽可以接入扩展板,根据不同需求,对整个电路板进行扩展,增强了基础电路板的可扩展性。图中的重启按钮可以对整个电路板进行重启操作。

二、点灯程序

硬件方面
在这里插入图片描述
图片来源:Arduino-UNO-LED

具体包括如下:

Arduino UNO电路板(1块)
mini面包板(1块)
220欧姆电阻(1个)
LED灯(1盏)
面包线(2根)

软件方面只需要Arduino官方提供的IDE即可。
准备好上面这些之后,接下来只要连接好电路,敲几行简单的代码,就可以让我们的神灯闪烁起来!
连接电路
在这里插入图片描述

代码:

int led = 13;  


void setup() {

  pinMode(led, OUTPUT);
}

void loop() {

  digitalWrite(led, HIGH);


}

代码解释:

int led = 13;  // 定义针脚号,数字类型为整型

// 对Arduino电路板或相关状态进行初始化方法
pinMode(led, OUTPUT);
// 设定13号针脚为输出状态,pinMode()方法是Arduino类库提供的系统方法,调用的时候需要传入两个参数。一个是针脚号,另一个是针脚号的状态。

三、闪烁LED灯

硬件方面
在这里插入图片描述
图片来源:Arduino-UNO-LED

具体包括如下:

Arduino UNO电路板(1块)
mini面包板(1块)
220欧姆电阻(1个)
LED灯(1盏)
面包线(2根)

软件方面只需要Arduino官方提供的IDE即可。
准备好上面这些之后,接下来只要连接好电路,敲几行简单的代码,就可以让我们的神灯闪烁起来!
连接电路
在这里插入图片描述

int led = 13;  // 定义针脚号,数字类型为整型


void setup() {

  pinMode(led, OUTPUT);
}
// 系统调用,无限循环方法
void loop() {

  digitalWrite(led, HIGH);

  delay(1000);
  // 此处向Arduino的13针脚发送低电压状态,
  // 此状态可以让LED神灯熄灭
  digitalWrite(led, LOW);
  // 再次延迟1000毫秒,也即1秒钟,
  delay(1000);

}

四、呼吸灯

硬件方面
在这里插入图片描述
图片来源:Arduino-UNO-LED
软件方面
只需要Arduino官方提供的IDE即可。
准备好上面这些之后,接下来只要连接好电路,敲几行简单的代码,就可以让我们的神灯闪烁起来!
连接电路
在这里插入图片描述
代码如下:

void setup ()
{
  pinMode(13,OUTPUT);
}
 
void loop()
{
  //循环语句,控制PWM亮度的增加
  for (int a=0; a<=255;a++)
  {
    analogWrite(11,a);
    delay(8);//当前亮度级别维持的时间,单位毫秒
  }
  //循环语句,控制PWM亮度减小 
  for (int a=255; a>=0;a--)
  {
    analogWrite(11,a);
    delay(10);//当前亮度的维持的时间,单位毫秒  
  }
  delay(800);//完成一个循环后等待的时间,单位毫秒
}

五、按键

硬件方面
在这里插入图片描述
图片来源:Arduino电路配件

具体包括如下:

Arduino UNO电路板(1块)
面包板(1块)
10k电阻(1个)
按键开关(1个)
面包线(3根)

软件方面
Arduino官方提供的IDE,和之前一样。
在这里插入图片描述
代码如下


const int buttonPin = 2;

const int ledPin =  13;
// 定义按键状态变量初始值为0
int buttonState = 0;


void setup() {
  // 设置ledPin端口为输出端口
  pinMode(ledPin, OUTPUT);
  // 设置buttonPin端口为输入端口
  pinMode(buttonPin, INPUT);
}


void loop() {
  // 读取按键状态
  buttonState = digitalRead(buttonPin);

  if (buttonState == HIGH) {
    // 点亮LED神灯
    digitalWrite(ledPin, HIGH);
  } else {
    // 熄灭LED神灯
    digitalWrite(ledPin, LOW);
  }
}

六、按键消抖

连线:
在这里插入图片描述

  • Arduino UNO电路板(1块)
  • 面包板(1块)
  • 10k电阻(1个)
  • 按键开关(1个)
  • 面包线(3根)

代码

// 定义按键输入针脚号常量,
// 并初始化为2号针脚。
const int buttonPin = 2;
// 定义LED输入针脚号常量,
// 并初始化为13号针脚。
// 注:此处我们使用的LED神灯是Arduino UNO电路板自带,
// 此神灯对应的针脚号默认为13,此数值不得随意更改,
// 所以这里定义的数值13是为了和默认值相对应。
const int ledPin = 13;
// 定义记录LED神灯当前状态的变量,
// 并初始化状态为HIGH。
int ledState = HIGH;
// 定义记录按键当前状态的变量
int buttonState;
// 定义记录按键最近一次状态变化的变量,
// 并初始化状态为LOW。
int lastButtonState = LOW;
// 定义记录最近一次抖动的时间变量,
// 并初始化时间为0毫秒。
long lastDebounceTime = 0;
// 定义延迟抖动的时间变量,
// 并初始化为50毫秒。
long debounceDelay = 50;

// 对Arduino电路板或相关状态进行初始化方法
void setup() {
  // 设置按键的针脚为输入状态
  pinMode(buttonPin, INPUT);
  // 设置电路板上LED神灯的针脚状态为输出状态
  pinMode(ledPin, OUTPUT);
  // 设置电路板上LED神灯的初始状态,
  // 此处因为变量ledState的初始状态为HIGH,
  // 所以LED神灯的初始状态为亮。
  digitalWrite(ledPin, ledState);
}

// 系统调用,无限循环方法
void loop() {
  // 读取按键的状态
  int reading = digitalRead(buttonPin);
  // 判断当前的按键状态是否和之前有所变化
  if (reading != lastButtonState) {
    // 如果按键发生了变化,
    // 则重新设置最近一次抖动的时间。
    lastDebounceTime = millis();
  }
  // 判断按键按下或抬起的状态时间间隔是否大于延迟抖动的时间长度。
  // 方法millis()可以获取当前时间,单位统一为毫秒。
  if ((millis() - lastDebounceTime) > debounceDelay) {
    // 判断当前的按键状态是否和之前有所变化
    if (reading != buttonState) {
      // 如果发生了变化,
      // 则更新按键状态变量。
      buttonState = reading;
      // 判断按键的状态是否为按下,
      // 只有在按键按下的时候,
      // 才改变LED神灯的状态。
      if (buttonState == HIGH) {
        // 如果LED神灯当前为亮度,
        // 则变为灭。如果为灭,
        // 则变为亮。
        ledState = !ledState;
      }
    }
  }
  // 最终改变电路板上LED神灯的状态
  digitalWrite(ledPin, ledState);
  // 更新按键最近一次状态变化的变量
  lastButtonState = reading;
}

持续更新中

发布了111 篇原创文章 · 获赞 177 · 访问量 21万+

猜你喜欢

转载自blog.csdn.net/qq_45172832/article/details/105155678