arduino 学习笔记及课件01基础入门

arduino基础教程:引脚模式、信号与程序结构解析
本文是arduino学习笔记的第一部分,主要介绍了arduino的基础知识,包括引脚模式(INPUT, OUTPUT, INPUT_PULLUP)及其信号,变量类型(int, byte, char, long)和程序结构(setup(), loop()),还讲解了基础案例如数字输入输出、模拟输出(PWM)以及常用语法如for, while, if和switch语句。" 80636443,7466511,Linux内核中断控制器驱动解析,"['Linux内核', '驱动开发', '嵌入式硬件', '中断处理']
AI助手已提取文章相关产品:

arduino 学习笔记及课件01基础入门

logo
以下学习笔记中图片部分由太极创客视频截图所得

概论在这里插入图片描述

一、 引脚及信号

1.1引脚模式

INPUT:当Arduino没有使用上拉电阻或下拉电阻而直接与开放的开关相连)。在开关未闭合时,该Arduino引脚处于不确定状态。为了获得准确的开关信号,须使用上拉电阻或下拉电阻。一般可以选用10K欧姆的电阻。
OUTPUT:Arduino引脚不能直接接地或直接与Arduino+5V/+3.3V引脚相连,否则可能损坏Arduino控制器。Arduino需要配合使用上拉电阻或者下拉电阻方能进行上述操作。(如果被驱动的电机需要超过40mA的电流,Arduino将需要三极管或其它辅助元件来驱动他们。)
INPUT_PULLUP:Arduino 微控制器自带内部上拉电阻,接地时引脚为低电平,否则为高电平。

1.2 信号

输入、输出、数字、模拟,两两组合。其中输入一个参数,引脚号。输出两个参数,引脚、输出值。其中
模拟输入:analogRead( pin ) 范围:0-1023
模拟输入:analogWrite( pin,value ) 范围 :0-255
数字输入:digitalRead( pin )
数字输出:digitalWrite( pin , status )

二、变量及程序结构

2.1变量

int : 整数是基本数据类型。整数数据类型占用2字节16位。整数的范围为-32,768到32,767( -2^15 ~(2^15)-1)。
byte:byte类型变量可存储8位无符号数,其存储数值范围是 0 – 255。
char:char数据类型使用1个字节的内存来存储单个字符值。字符以ASCII编码的形式存储。字符应写在单引号中,如: ‘A’。
long:长整数型变量是扩展的数字存储变量,它可以存储32位(4字节)大小的变量,数值从-2,147,483,648到2,147,483,647。

2.2程序结构

set up() 执行一次
loop()循环执行

三 、基础案例程序

3.1数字输出

点亮电路板上自带的led灯

void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  // 初始化LED_BUILTIN数字引脚为输出模式
  pinMode(LED_BUILTIN, OUTPUT);
}
// loop 函数永远会反复的运行
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   // 点亮LED(高电平)turn the LED on (HIGH is the voltage level)
  delay(1000);                       // 等待1秒 wait for a second
  digitalWrite(LED_BUILTIN, LOW);    // 将电平设置为低来熄灭LED turn the LED off by making the voltage LOW
  delay(1000);                       // 等待1秒 wait for a second
}

3.2数字输入

硬件:开关
按键开关原理
硬件连接上拉电阻
按键按下:2号引脚读取到低电平
按键松开:2号引脚读取到高电平
按键实验电路连接
在这里插入图片描述

//引脚2连接有按键开关,给它一个名字:
int pushButton = 2;
 // the setup routine runs once when you press reset:
//当你按下复位按钮后,setup流程运行一次:
void setup() {
  // initialize serial communication at 9600 bits per second:
  //串口通讯初始化,每秒9600位
  Serial.begin(9600);
  // make the pushbutton's pin an input:
  //设置按键引脚为输入
  pinMode(pushButton, INPUT);
}
 
// the loop routine runs over and over again forever:
// loop 流程会永远的反复运行
void loop() {
  // read the input pin:
  //读取输入引脚:
  int buttonState = digitalRead(pushButton);
  // print out the state of the button:
  // 显示按键状态
  Serial.println(buttonState);
  delay(1);        // delay in between reads for stability 为确保程序稳定运行进行短暂停止
}

3.3 模拟输出

PWM原理、

以点亮led为例,在一个周期类,高电平所占的比例为led电压的比例,模拟输出255值对于引脚5V电压
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

硬件连接:
在这里插入图片描述

在这里插入图片描述

boolean pushButton1;   // 创建布尔型变量用来存储按键开关1的电平状态
boolean pushButton2;   // 创建布尔型变量用来存储按键开关2的电平状态
int ledPin = 9;        //LED引脚号
int brightness = 128;  //LED亮度参数

void setup() {
  // put your setup code here, to run once:
  pinMode(2, INPUT_PULLUP); //将引脚2设置为输入上拉模式
  pinMode(8, INPUT_PULLUP); //将引脚8设置为输入上拉模式
  pinMode(ledPin, OUTPUT);  //将LED引脚设置为输出模式
  Serial.begin(9600);      //启动串口通讯
}

void loop() {
  // put your main code here, to run repeatedly:
  pushButton1 = digitalRead(2); //读取引脚2电平状态并将其赋值给布尔变量
  pushButton2 = digitalRead(8); //读取引脚8电平状态并将其赋值给布尔变量
  
  if (!pushButton1 && brightness > 0){     // 当按下按键开关1并且LED亮度参数大于0
    brightness--;                          // 减低LED亮度参数
                                           //(brightness-- 相当于  brightness = brightness - 1;)
  } else if (!pushButton2 && brightness < 255) {  //当按下按键开关2并且LED亮度参数小于255
    brightness++;                                 //增加LED亮度参数
                                                  //(brightness++ 相当于  brightness = brightness + 1;)
  }
  analogWrite(ledPin, brightness);         //模拟输出控制LED亮度
  Serial.println(brightness);              //将LED亮度参数显示在串口监视器上
  delay(10);
}

3.4 模拟输入

在这里插入图片描述

在这里插入图片描述

/*
  模拟输入
   本程序旨在演示如何使用analogRead()读取Arduino的引脚电平。
  通过调节电位器, A0引脚的输入电压将在0V-5V之间。
  该输入电压将被映射到数值0-1023之间,并显示在串口监视器中。
   电路连接:
   电位器中间引脚连接到模拟输入A0引脚
   电位器两端引脚分别连接在Arduino +5V和接地引脚
 */
 
void setup() {
  // 串口通讯初始化(9600 bps):
  Serial.begin(9600);
}
 
void loop() {
  // 读取模拟输入值:
  int analogInputVal = analogRead(A0);
   // 将结果通过串口监视器显示:
 Serial.println(analogInputVal);

3.5 模拟输入输出

在这里插入图片描述

void setup() {
  
  Serial.begin(9600);  // 串口通讯初始化(9600 bps)
  pinMode(9, OUTPUT);  // 设置9号引脚为输出模式
}
 
void loop() {
  int analogInputVal = analogRead(A0);  // 读取模拟输入值
 
  int brightness = map(analogInputVal, 0, 1023, 0, 255); //将模拟输入数值(0 - 1023)等比映射到模拟输出数值区间(0-255)内
  
  analogWrite(9, brightness);  //根据模拟输入值调节LED亮度
 
  // 将结果通过串口监视器显示:
  Serial.print("analogInputVal = ");
  Serial.println(analogInputVal);
  
  Serial.print("brightness = ");
  Serial.println(brightness);
  
  Serial.println("");
}

4.常用语法

4.1 for(定义变量赋值;循环条件;变量递变)

{

循环体;

}

在这里插入图片描述

案例01


void setup() {
  Serial.begin(9600);
}
void loop() {
  int sum = 0;
  for (int i = 1; i <= 50; i += 2 ) {
    Serial.print("i=");
    Serial.println(i);//打印变量
    sum += i;
    Serial.print("sum=");
    Serial.println(sum);//打印计算结果
  }
  Serial.println("当前循环结束");
  delay(3000);
}

案例02:当for内的三个语句均为空时则表示死循环,当循环条件为空时表示循环体进入死循环。

void setup() {
  Serial.begin(9600);
}
void loop() {
  int sum = 0;
  for (;  ;  ) {
    sum++;
 Serial.print("sum=");
    Serial.println(sum);
  }
  Serial.println("当前循环结束");
  delay(10000);
}

4.2 while(循环条件){

循环体;

break;

}

在这里插入图片描述

while循环,实际为死循环,一般有两种方式跳出循环,1、可以通过循环条件判断,当循环条件为假时跳出循环。2、使用break语句跳出循环,break语句只能跳出当前循环,如果有多个循环,要跳出多个循环或者指定循环则需要对循环进行标记,for循环也是如此,详细见案例goto语句。3.如果需要跳出本次循环则需要continue语句。
总结:
跳出本次循环:continue
跳出当前循环:break
跳出指定循环:goto

案例01:通过循环条件跳出循环。

void setup() {
 Serial.begin(9600);
}
void loop() {
 int sum = 0;
 int i = 1;
 while (i <= 50) {
   Serial.print("i=");
   Serial.println(i);
   sum += i;
   i++;
   Serial.print("sum=");
   Serial.println(sum);
 }
Serial.println("当前循环结束");
delay(3000);
}

案例02 通过break语句跳出循环
加粗样式

void setup() {
  Serial.begin(9600);
}
void loop() {
  int sum = 0;
  int i = 1;
  while (true) {
    Serial.print("i=");
    Serial.println(i);
    sum += i;
    i++;
    Serial.print("sum=");
    Serial.println(sum);
    if(i>50){//如果已经加到50则停止循环
      break;
      }
  }
Serial.println("当前循环结束");
delay(3000);
}

4.3 goto

常用于跳出循环,程序跳转到指定位置。
在这里插入图片描述

void setup() {
  Serial.begin(9600);
}
void loop() {
  int sum = 0;
  int i = 1;

  while (true) {
    while (true) {
      Serial.print("i=");
      Serial.println(i);
      sum += i;
      i++;
      Serial.print("sum=");
      Serial.println(sum);
      if (i > 50) {
        goto here;
      }
    }
    Serial.println("跳出第一个循环");
  }
here:
  Serial.println("跳出第二个循环");

  delay(3000);
}

4.4 if语句

结构

if(条件){
执行体1;
}else{
执行体2;
}
案例01
在这里插入图片描述

void setup() {
  Serial.begin(9600);
}
void loop() {
  int i = 90;
  if (i >= 0 && i < 60) {
    Serial.println("不及格");
  } else if (i > =60 && i <= 75 ) {
    Serial.println("中等");
  } else if (i > 75 && i <= 90) {
    Serial.println("良");
  } else if ( i > 90 && i <= 100) {
    Serial.println("优");
  } else {
    Serial.println("输入参数错误且if语句已执行完毕");
  }
 Serial.println("if语句已执行完毕准备执行下一行程序");
}

4.5 switch语句

结构:

switch (变量){
case 常量1:
执行体;
break;
ase 常量2:
执行体;
break;

}
变量只能为数字类型或char字符型,不能为字符串。

void setup() {
  Serial.begin(9600);
}
void loop() {
  int i = 90;
  char level;
  if (i >= 0 && i < 60) {
    level = 'D';
  } else if (i >= 60 && i <= 75 ) {
    level = 'C';
  } else if (i > 75 && i <= 90) {
    level = 'B';
  } else if ( i > 90 && i <= 100) {
    level = 'A';
  } else {
    Serial.println("输入参数错误");
  }
  Serial.println("if语句执行完毕");

  switch (level) {
    case 'D':
      Serial.println("不及格");
      break;
    case 'C':
      Serial.println("中等");
      break; \
    case 'B':
      Serial.println("良");
      break;
    case 'A':
      Serial.println("优");
      break;
      default :
      Serial.println("输入参数错误且switch语句执行完毕");
  }
  Serial.println("switch 语句已执行完毕准备执行下一行程序");
}

在这里插入图片描述

您可能感兴趣的与本文相关内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值