arduino学习笔记2

news2024/12/25 0:21:02

一.蜂鸣器输出实验

1.源代码

int buzzer=2;//设置控制蜂鸣器的数字口对应板子上2口
void setup() 
{ 
  pinMode(buzzer,OUTPUT);//设置对应的输出模式
} 
void loop() 
{ 
  unsigned char i,j;//定义变量
  while(1) 
 { 
    for(i=0;i<50;i++)//输出一个频率的声音
    { 
      digitalWrite(buzzer,HIGH);//高电平打开蜂鸣器发声
      delay(1);//延时1ms 通过这个延时可以改变声音的频率不同
      digitalWrite(buzzer,LOW);//低电平关闭蜂鸣器不发声音
      delay(1);//延时ms 通过这个延时可以改变声音的频率不同
    } 
    for(i=0;i<50;i++)//输出另一个频率癿声音 
    { 
      digitalWrite(buzzer,HIGH);//高电平打开蜂鸣器发声
      delay(5);//延时2ms 通过这个延时可以改变声音的频率不同
      digitalWrite(buzzer,LOW);//低电平关闭蜂鸣器不发声音
      delay(5);//延时2ms 通过这个延时可以改变声音的频率不同
    } 
  } 
}

2.定义数字引脚

int buzzer=2;//设置控制蜂鸣器的数字口对应板子上2口
int redLed=2;//定义板子上数字口2
int yellowLed=3;//定义板子上数字口3
int greenLed=4;//定义板子上数字口4

在 Arduino 中,数字引脚可以使用 intuint8_t 来定义。int 是有符号整数类型,通常用于表示更大的数字范围,而 uint8_t 是无符号的 8 位整数类型(相当于C语言中的long),可以表示 0-255 的数字范围,这对于表示数字引脚非常方便。在实际应用中,两种类型都可以使用,具体取决于你的需求和个人喜好。

3.unsigned char

在 C/C++ 中,char 类型数据可以被看作是整数类型。unsigned char 表示无符号的 8 位整数类型,其表示范围为 0-255。当你使用 unsigned char i,j; 定义变量 ij 后,它们就被分配了 1 个字节(8 位)的内存空间,可以用来存储整数值。

由于 ij 都是整数类型,因此你可以对它们进行加、减、乘、除等基本数学运算,以及自增和自减运算。在这种情况下,执行 i++ 操作时,编译器会将 i 的值加 1,并将结果存回到变量 i 中。如果 i 已经达到了 255,再执行 i++ 运算时,i 的值会被重置为 0,因为 unsigned char 类型的取值范围为 0-255。

需要注意的是,在 unsigned char 类型中执行数学运算或自增/自减操作时,可能会出现溢出现象。例如,当 i 的值为 255 时再进行 i++ 运算,i 的值就会变成 0。因此,在使用 unsigned char 类型时应该特别小心,确保不会出现意外结果。

4.蜂鸣器

蜂鸣器通常有正负极之分。在接线时,应确保将红色或标有"+“符号的线连接到电源的正极,黑色或标有”-"符号的线连接到电源的负极,否则蜂鸣器可能无法正常工作。

蜂鸣器可以分为有源蜂鸣器和无源蜂鸣器。有源蜂鸣器指的是需要外接振荡器或者驱动信号才能发声的蜂鸣器。这种蜂鸣器通常需要在电路中加上一个谐振电路,才能产生所需要的共振频率,并发出声音。相反,无源蜂鸣器是一种自带驱动电路的蜂鸣器,可以直接接到电源上即可发出声音。无缘蜂鸣器适用于需要简单操作、易于使用的场合,例如电子闹钟、计时器、温度计等。

本次实验用的无源蜂鸣器。

5.实现不同频率

本次实验的电路图与常用数字引脚控制LED灯电路图类似,即蜂鸣器的正极接数字引脚,负极接负极GND。实现不同频率,通过delay()延时函数来设置不同的频率,即每次的延时时间不同,蜂鸣器的频率也不同。

二.蜂鸣器控制实验

1.源代码

int buzzer=2;//设置控制蜂鸣器的数字口对应板子上2口
int key=4;//定义板子上数字4口
int flag=0;//定义一个变量记录按键按下后蜂鸣器是关闭还是打开

void setup() 
{ 
  pinMode(buzzer,OUTPUT);//设置对应的输出模式
  pinMode(key,INPUT_PULLUP);//定义按键为上拉输入模式
} 
void loop() 
{ 
    if(digitalRead(key)==LOW)//判断按键是否按下,按键按下时为高电平
    {
      if(flag==0){//判断蜂鸣器是否打开
        flag=1; //标志蜂鸣器打开 
        digitalWrite(buzzer,HIGH);//对应的蜂鸣器发声
    
      }else{
        flag=0;  //标志蜂鸣器关闭
        digitalWrite(buzzer,LOW);//对应的蜂鸣器不发声

      }
       while(!digitalRead(key));//按键释放时候退出while循环,防止按键按下多次触发

    }
 
}

2.电路图

j1hl.jpg

3.理解

同样是用按键控制电路,所以本次实验较按键控制LED实验思路受一样的,也无新的陌生函数,唯一不同就是这里的蜂鸣器是常规接法,而按键控制LED灯接法比较特殊,所以digitalWrite(buzzer,HIGH)表示开启蜂鸣器,digitalWrite(buzzer,LOW)表示关闭蜂鸣器。

按键控制LED实验

三.电位器调节实验

1.源代码

int dwqPin=14;   //定义电位器接口14(这个是板子的模拟口A0)
void setup()
{
    pinMode(dwqPin,INPUT);  //定义数字接口为输出接口
    Serial.begin(9600);     //设置波特率为9600
}

void loop()
{
    Serial.println("模拟量值为:");    //显示字符串"模拟量值为:"
    Serial.println(analogRead(dwqPin));    //读取模拟接口A0的值,并且通过串口进行显示出来
    delay(2000);//延时2秒
}

2.电路图

j3Xq.jpg

3.电位器

Arduino电位器指的是一种用于控制模拟信号的模拟输入设备。它通常由一个可调节的旋钮和两个输出端口组成,其中一个输出端口连接到Arduino板子上的模拟输入引脚,另一个输出端口则连接到地线。通过旋转旋钮,可以改变电位器的输出电压,从而改变连接到模拟输入引脚的电压值。Arduino电位器常用于控制LED灯的亮度、音调发生器的频率等场合。

4.数字引脚和模拟引脚

Arduino板子上的数字引脚和模拟引脚都是用于输入和输出信号的引脚,但它们之间有很大的区别。

Arduino的数字引脚只能够输出两种状态:高电平和低电平,因此它们也被称为IO(Input/Output)引脚。数字引脚用于控制数字电路中的开关、继电器等应用,以及读取数字传感器如按钮、光敏电阻等的状态。在Arduino Uno板子上,有14个数字引脚(0-13),其中6个引脚可以作为PWM输出(3, 5, 6, 9, 10, 和 11)。

相比之下,Arduino的模拟引脚可以输出连续变化的电压信号。它们通常用于传输和处理模拟信号,例如声音、图像、温度和湿度等物理量。Arduino Uno板子上有6个模拟引脚(A0-A5),它们可以根据外部设备提供的电压来产生10位数字值的模拟输入数据,或者通过PWM技术产生模拟输出信号。

需要注意的是,Arduino的数字引脚和模拟引脚可以互相转换使用。例如,可以将一个数字引脚设置为输出,并将其连接到一个LED,然后使用analogWrite()函数在该引脚上产生PWM信号,从而控制LED的亮度。此外,也可以将一个模拟引脚设置为数字输入并读取其状态。因此,在设计Arduino程序时,需要根据具体应用需求选择合适的引脚类型。

常使用下面数字定义模拟引脚:

模拟引脚数字引脚
A014
A115
A216
A317
A418
A519

5.PWM技术

PWM输出是一种电子信号,使用脉宽调制(Pulse Width Modulation, PWM)技术来控制输出信号的能量。PWM输出通常用于控制电机速度、LED亮度和音频信号的调制等应用。

PWM信号由一系列脉冲组成,在此过程中每个脉冲的宽度(即通断时间)确定了平均输出功率的大小。这些脉冲的频率通常是固定的,但占空比(开通时间与总周期时间之比)可以通过软件或硬件来改变,从而控制输出信号的平均能量。

为了使用微控制器生成PWM输出,软件需要设置一个定时器以在固定的频率下产生周期性中断。在每次中断时,软件根据所需的输出级别更新占空比。硬件随后会在输出引脚上生成相应的PWM波形。

同时,专用的PWM集成电路(PWM ICs)通常具有内置定时器和其他功能,简化了生成PWM输出的过程。这些IC还可以提供额外的功能,例如故障检测和保护电路,因此在许多应用中都很流行。

6.analogRead()函数

  • 作用:本指令用于从Arduino的模拟输入引脚读取数值。

  • Arduino控制器有多个10位数模转换通道。这意味着Arduino可以将0-5伏特的电压输入信号映射到数值0-1023。换句话说,我们可以将5伏特等分成1024份。0伏特的输入信号对应着数值0,而5伏特的输入信号对应着1023。

  • 语法:analogRead(pin)

  • 参数:被读取的模拟引脚号码

  • 返回值:0到1023之间的值

四.光控小灯实验

1.源代码

int led = 2; //定义小灯的输出引脚数字口2
int lightR = 14;//定义光敏电阻的输入引脚14,也就是对应的模拟口A0
int val;
void setup() 
{ 
  pinMode(led,OUTPUT);//设置连接小灯的引脚为输出模式
   pinMode(lightR,INPUT);
   Serial.begin(9600);     //设置波特率为9600
} 

void loop() 
{ 
  val=analogRead(lightR);  //读取模拟接口A0的值,也就是14号口,把值赋给val
  Serial.println(val);    //通过串口打印对应的val值,并且通过串口进行显示出来
  delay(1000);//延时1秒
  if(val>300)//判断是否大于设定值
   {
      digitalWrite(led,HIGH);//点亮led
   }else{
     digitalWrite(led,LOW);//关闭led
   }
}

2.电路图

3.波特率

波特率是指数据在通信中传输的速率,它是衡量串行通信速度的一个参数。9600 是比较常见的波特率之一,因为它既可用于低速通信,也可以用于高速通信。

在计算机和现代电子设备中,串行通信通常使用异步串行通信协议进行通信。在这种协议中,传输数据需要发送方和接收方都采用相同的波特率。9600 是一个合理的选择,因为它可以很好地平衡通信速度和传输距离之间的关系,并且在大多数情况下具有良好的兼容性和稳定性。

此外,9600 波特率还具有与其他常用波特率(例如 300、1200、2400、4800 和 19200)相比相对较高的数据传输速度,因此它在许多应用中被广泛使用。

4.VCC

在Arduino中,VCC通常指的是芯片上的电源引脚,也就是电路板上用于提供电源的正极。一般来说,VCC引脚连接到外部电源或者芯片内部的稳压器,用于为整个系统提供稳定的电源。

电源引脚在模拟引脚旁边。

Arduino的电源引脚数量取决于不同型号的开发板,但通常都会包括以下几个电源引脚:

  1. VCC(或VIN):用于连接外部电源或者芯片内部的稳压器,以提供系统所需的电源。
  2. GND:用于连接电路板和其他组件的地线,提供回路的闭合路径。
  3. 3.3V(或5V):一些Arduino型号可能还包括一个额外的电源引脚,一般用于连接低功耗的外围设备和传感器,例如无线模块、温度传感器等。

五.PWM调节光亮实验

1.源代码

int ledpin=3;//定义数字接口3输出PWM波
int dwqPin=14;   //定义电位器接口14(这个是板子的模拟口A0)
int val = 0;  //定义变量
void setup()
{
    pinMode(ledpin,OUTPUT);  //定义LED灯控制口为输入
    pinMode(dwqPin,INPUT);  //定义数字接口为输出接口
    Serial.begin(9600);     //设置波特率为9600
}
void loop()
{
    val=analogRead(dwqPin);//读取电位器的值传给val变量
    Serial.println("模拟量值为:");    //显示字符串"模拟量值为:"
    Serial.println(val/4);    //读取模拟接口A0的值,并且通过串口进行显示出来
    analogWrite(ledpin,val/4);// 用产生的pwm波控制小灯,其中pwm波的范围为0到255
    delay(100);//延时100ms
}

2.电路图

jNBH.jpg

3.analogWrite()函数

  • 作用:将一个模拟数值写进Arduino引脚。
  • 语法:analogWrite(pin, value)
  • 参数1:pin表示要写进模拟数值的引脚号码
  • 参数2:value是0到255之间的PWM频率值, 0对应off, 255对应on

其中,0表示PWM信号的低电平占空比为100%,也就是输出电压为0V,灯熄灭;255表示PWM信号的高电平占空比为100%,也就是输出电压为5V,灯亮。

4.占空比

占空比(Duty Cycle)是指PWM信号高电平持续时间与周期时间之比。在Arduino等系统中,PWM信号的周期时间通常是固定的,因此占空比可以用来控制信号高电平的持续时间。

占空比通常用百分数或小数表示,范围从0到1或0%到100%。例如,一个50%的占空比意味着PWM信号的高电平持续时间为周期时间的一半。

在控制LED、电机、舵机等电子设备时,占空比是非常重要的参数。它可以控制输出设备的亮度、速度、位置等属性。例如,通过改变PWM信号的占空比,可以实现LED的调光、电机的调速、舵机的转动角度控制等功能。

六.说明

接上一篇博客,arduino学习笔记2!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/449230.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023年4月的12篇AI论文推荐

GPT-4发布仅仅三周后&#xff0c;就已经随处可见了。本月的论文推荐除了GPT-4以外还包括、语言模型的应用、扩散模型、计算机视觉、视频生成、推荐系统和神经辐射场。 1、GPT-4 Technical Report Sbastien Bubeck, Varun Chandrasekaran, Ronen Eldan, Johannes Gehrke, Eric…

密码技术知识总结

密码技术知识总结 1. 密码技术简介 对称密码&#xff1a;加密和解密时使用同一密钥的方式公钥密码&#xff1a;加密和解密时使用不同密钥&#xff0c;也称非对称密码单向散列函数&#xff1a;保证数据的完整性&#xff0c;检测数据是否被篡改过 散列值&#xff1a;又称哈希值…

k8s 控制器---Statefulset

1. Statefulset 控制器 StatefulSet 是为了管理有状态服务的问题而设计的。 1.1 什么叫有状态服务&#xff1f; StatefulSet 是有状态的集合&#xff0c;管理有状态的服务&#xff0c;它所管理的 Pod 的名称不能随意变化。数据 持久化的目录也是不一样&#xff0c;每一个 Pod …

Unity --- UGUI --- Rect Transform(矩形变换) --- 锚点及其相关应用

1.所有的UI物体都没有Transform组件&#xff0c;取而代之的是Transform组件的派生 --- Rect Transform(矩形变换) 2.Rect Transform和Transform一样都有旋转和缩放&#xff0c;它两之间的区别是&#xff1a; Rect Transform多了&#xff1a;a.Pibot轴心点&#xff1b;b.Ancho…

002 学习鸿蒙应用开发ArkTs语言

目录 一.ArkTs语言介绍 1.ArkTs语言概述 2.ArkTs语言特性 二.基本UI描述 1.基本概念 2.UI描述规范 无参数构造配置 有参数构造配置 属性配置 事件配置 子组件配置 三.状态管理 1.基本概念 2.页面级状态管理 State Prop Link Observed和ObjectLink数据管理 P…

​从底层技术分析如何调教你的ChatGPT?

相信很多人都已经在使用类ChatGPT的工具进行工作或者娱乐了&#xff0c;这里说的类ChatGPT的是指和ChatGPT相同或者相似功能的产品&#xff0c;包括国外的开源平替模型、百度的文心一言等&#xff0c;但是你真的会使用这些工具和应用吗&#xff1f;你使用的方法是正确的吗&…

Java ---内部类

&#xff08;一&#xff09;定义 将一个类 A 定义在另一个类 B 里面&#xff0c;里面的那个类 A 就称为 内部类 &#xff08; InnerClass &#xff09; &#xff0c;类 B 则称为 外部类&#xff08; OuterClass &#xff09;。广泛意义上的内部类一般来说包括这四种&#xff1…

【中级软件设计师】—(针对上午题)软件工程上(三十五)

【中级软件设计师】—&#xff08;针对上午题&#xff09;软件工程&#xff08;三十五&#xff09; 一、CMM 1 2 3 4 5 二、能力成熟度模型集成&#xff08;CMMI&#xff09; 6 7 8 9 三、软件过程模型 &#xff08;一&#xff09;、瀑布模型 &#xff08;二&#xff09;、V模…

第八章 项目进度管理

项目进度有8个过程 1、规划项目&#xff0c;进度管理&#xff08;计划&#xff09; 2、定义活动&#xff08;活动清单&#xff09; 3、排序活动 4、估算活动资源&#xff08;估算人力&#xff09; 5、估算活动时间 6、制定进度计划表 7、控制进度 规划项目进度管理 为实施项目进…

薪资17K是一个怎样的水平?来看看98年测试工程师的面试全过程…

我的情况 大概介绍一下个人情况&#xff0c;男&#xff0c;本科&#xff0c;三年多测试工作经验&#xff0c;懂python&#xff0c;会写脚本&#xff0c;会selenium&#xff0c;会性能&#xff0c;然而到今天都没有收到一份offer&#xff01;从年后就开始准备简历&#xff0c;年…

电容的基本知识

1、电容是电路中重要的元件&#xff0c;种类多、用途广&#xff0c;主要有插件类和贴片类两种。 2、电容主要特性参数:标称容量、耐压、误差、温度 2.1电容容量常用单位有微法《uF)、纳法《nF)、皮法《pF) 单位换算:1uF10^3nF10"6pF《电容的基本单位用法拉…

完成近4亿元C轮融资+自研底盘域控,本土线控制动玩家“拼”了

显然&#xff0c;线控制动赛道已经进入白热化竞争阶段。 高工智能汽车研究院监测数据显示&#xff0c;2022年中国市场&#xff08;不含进出口&#xff09;乘用车前装搭载线控制动系统&#xff08;One-Box&#xff0c;Two-Box&#xff09;上险交付合计497.39万辆&#xff0c;同…

java反序列化 cc链6 分析

前言 这里分析完cc1的两个以后&#xff0c;白日梦佬又介绍了cc6链&#xff0c;最主要的是这个链子不受jdk的版本影响&#xff0c;甚至不受cs版本的影响&#xff0c;这么说就是cs大部分都是可以使用cc链6&#xff0c;而且这个链子要简洁的很多&#xff0c;我一听这个好啊&#x…

springcloud-02

1、微服务概述 1.1 概念 1.2 架构演进 单体架构&#xff1a; 将业务的所有功能集中在一个项目中年开发&#xff0c; 打成一个jar包 优点&#xff1a;架构简单&#xff0c;部署成本低 缺点&#xff1a;耦合度高 分布式架构 按业务功能对系统进行拆分&#xff0c;每一个业务模块…

如何将项目提交到别人的仓库

大纲&#xff1a; 1、在gitee中克隆(clone)别人仓库的代码。 首先&#xff0c;进入别人的仓库&#xff0c;点击 克隆/下载 2、在你存放项目的文件夹下克隆你刚刚复制的代码 &#xff08;右键点击Git Clone即可&#xff09; 点击OK 就开始克隆了 克隆成功之后&#xff0c;文件上…

【HuggingGPT】Solving AI Tasks with ChatGPT and its Friends in Hugging Face

文章目录 所解决的问题&#xff1f;背景所采用的方法&#xff1f;取得的效果&#xff1f;问题所出版信息&#xff1f;作者信息&#xff1f;参考链接 所解决的问题&#xff1f; 当前的语言模型Large Language Models (LLMs)缺乏处理复杂信息的能力&#xff0c;像视觉&#xff0…

重学Java设计模式-行为型模式-中介者模式

重学Java设计模式-行为型模式-中介者模式 内容摘自&#xff1a;https://bugstack.cn/md/develop/design-pattern/2020-06-27-重学 Java 设计模式《实战中介者模式》.html#重学-java-设计模式-实战中介者模式「按照mybatis原理手写orm框架-给jdbc方式操作数据库增加中介者场景」…

Maven项目中出现【不再支持目标选项 1.5】的解决办法

1 快速解决【单项目】 本方法只适用于单个项目&#xff0c;新建项目使用maven还会出现问题。 在pom.xml配置&#xff1a; <properties><maven.compiler.source>11</maven.compiler.source><maven.compiler.target>11</maven.compiler.target>&l…

高并发高吞吐IO秘密武器——epoll池化技术

1、epoll函数详解 epoll是Linux特有的IO复用函数&#xff0c;使用一组函数来完成任务&#xff0c;而不是单个函数。 epoll把用户关心的文件描述符上的事件放在内核的一个事件表中&#xff0c;不需要像select、poll那样每次调用都要重复传入文件描述符集或事件集。 epoll需要…

闲人闲谈PS之四十一——重新认识PS模块

惯例闲话&#xff1a;4月份参加了SAP咨询大师乐老师组织的公司间业务培训&#xff0c;印象极为深刻&#xff0c;乐老师从三权分立的角度同大家分析了公司间业务交易对象–库存的属地权、管理权、所有权&#xff0c;通过这种全新的视角&#xff0c;把复杂难以理解的公司交易用最…