arduino学习笔记1

news2024/12/23 3:27:17

一.hello word实验

1.基础结构

void setup() {
  // put your setup code here, to run once:
  //设置初始状态,比如引脚、波特率等
}

void loop() {
  // put your main code here, to run repeatedly:
  //相当于main函数,但一直循环
}

2.Serial(串行通信)

  • Serial.begin:设置电脑与Arduino进行串口通讯时的数据传输速率(每秒传输字节数)。
  • Serial.read:从开发板接收到数据中读取一个字节的数据。
  • Serial.print:发送数据(不换行)。
  • Serial.println:发送数据(换行)。

3.源代码

void setup()
{
  Serial.begin(9600);//设置波特率为9600,这里要跟软件设置相一致
}
void loop()
{
  val=Serial.read();//读取PC 机发送给Arduino板子的字符,并将该指令或字符赋给val
  if(val=='R')//判断接收到的字符是否是“R”。
  {  //如果接收到的是“R”字符
   
    Serial.println("Hello World!");//在串口上显示“Hello World!”字符串
  }
}

4.注意

Serial.read() 函数返回的确实是一个字节(Byte),它表示了串口接收缓冲区中的下一个字符。 但是,这个字节可以存储在 bytecharint 类型的变量中。

二.LED灯闪烁实验

1.源代码

int LED = 2;//对应板子上数字接口2
void setup() 
{
  pinMode(LED,OUTPUT);//设置数字2口为输出接口
}

void loop() //函数循环体
{
 digitalWrite(LED,HIGH);//IO口2设置为高电平,点亮数字2口LED
 delay(1000);//延时1000MS
 digitalWrite(LED,LOW);//IO口2设置为低电平,熄灭数字2口LED
 delay(1000);//延时1000MS
}

2.pinMode函数

通过pinMode()函数,你可以将Arduino的引脚配置为以下三种模式:

  • 输出(OUTPUT)模式
  • 输入(INPUT)模式
  • 输入上拉(INPUT_PULLUP)模式 (仅支持Arduino 1.0.1以后版本)

在输入上拉(INPUT_PULLUP)模式中,Arduino将开启引脚的内部上拉电阻,实现上拉输入功能。一旦将引脚设置为输入(INPUT)模式,Arduino内部上拉电阻将被禁用。

  • 输出模式:当引脚设置为输出(OUTPUT)模式时,引脚为低阻抗状态。这意味着Arduino可以向其它电路元器件提供电流。
  • 输入模式:当引脚设置为输入(INPUT)模式时,引脚为高阻抗状态(100兆欧)。此时该引脚可用于读取传感器信号或开关信号。

注意:当Arduino引脚设置为输入(INPUT)模式或者输入上拉(INPUT_PULLUP)模式,请勿将该引脚与负压或者高于5V的电压相连,否则可能会损坏Arduino控制器。

  • 输入上拉模式:Arduino 微控制器自带内部上拉电阻。如果你需要使用该内部上拉电阻,可以通过pinMode()将引脚设置为输入上拉(INPUT_PULLUP)模式。

3.输入模式与输入上拉模式的区别

在输入模式下,当数字引脚未连接到任何信号源时,它的状态是不确定的(称为“悬浮”状态)。在这种情况下,数字引脚可能会受到电磁干扰或其他噪声,导致它产生随机的高或低电平信号。因此,在使用输入模式时,最好将数字引脚始终连接到有效的信号源(例如传感器或开关)。

在输入上拉模式下,当数字引脚未连接到任何信号源时,它的状态被强制拉高到板子的供电电压(通常为5V或3.3V)。这意味着如果数字引脚未连接到有效的信号源,则它将始终处于高电平状态,从而避免了悬浮状态的问题。

因此,输入上拉模式提供了一种简单的方式来处理数字引脚的悬浮状态,但它也有一个缺点,即消耗额外的电流。当数字引脚处于高电平状态时,它需要更多的电流才能维持这个状态,即使没有实际电路负载。因此,如果您需要处理大量的数字引脚,输入上拉模式可能会使系统的总功耗增加。

4.digitalWrite函数

作用:将数字引脚写HIGH(高电平)或LOW(低电平)。

  • 如果该引脚通过pinMode()设置为输出模式(OUTPUT),您可以通过digitalWrite()语句将该引脚设置为HIGH(5伏特)或LOW(0伏特/GND)。
  • 如果该引脚通过pinMode()设置为输入模式(INPUT),当您通过digitalWrite()语句将该引脚设置为HIGH时,这与将该引脚将被设置为输入上拉(INPUT_PULLUP)模式相同。

5.delay函数

delay()函数可用于暂停程序运行(延时函数)。暂停时间可以由delay()函数的参数进行控制,单位是毫秒(1秒钟=1000毫秒),无返回值。

三.流水灯实验

1.源代码

int ledMark = 2 ;  //第一颗LED对应板子的数字口2
int num = 5;   //LED 灯的个数

void setup()
{
   for (int i = ledMark; i < ledMark + num; i ++) 
   {
     pinMode(i, OUTPUT);   //设置数字口2到6为输出模式
   }
}

void loop()
{
   for (int i = ledMark; i < ledMark + num; i ++) 
   {
     digitalWrite(i, LOW);    //设置对应的数字口为低电平,使得小灯逐渐熄灭
     delay(500);        //延时500ms
   }
   for (int i = ledMark; i < ledMark + num; i ++) 
   {
     digitalWrite(i, HIGH);    //设置对应的数字口为高电平,使得小灯逐渐亮起
     delay(500);        //延时500ms
   }  
}

2.for循环

和C语言里面的for循环一样使用,不解释。

3.电路

相当于5个LED电路,用for循环控制这些电路工作时间:

j6qk.jpg

四.按键控制LED灯实验

1.源代码

int led=2;//定义板子上数字2口
int key=4;//定义板子上数字4口
int flag=0;//定义一个变量记录按键按下后小灯是亮起还是熄灭
void setup()
{
    pinMode(led,OUTPUT);//定义小灯为输出模式
    pinMode(key,INPUT_PULLUP);//定义按键为输入模式,此时引脚为高电阻低电平
}
void loop()
{
    if(digitalRead(key)==LOW)//判断按键是否按下,按键按下时为低电平
    {

          if(flag==0){//判断小灯是否亮起
            flag=1; //标志小灯亮起 
            digitalWrite(led,LOW);//对应的LED小灯亮起
          }else{
            flag=0;  //标志小灯亮熄灭
            digitalWrite(led,HIGH);//对应的LED小灯熄灭
    
          }

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

2.电路图

jYQW.jpg

3.digitalread函数

  • 语法:digitalread(pin)

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

  • 作用:读取数字引脚的 HIGH(高电平)或 LOW(低电平)。

digitalRead(key)==LOW理解:key引脚原来是输入上拉模式,按键未按下时,电路断开,key引脚由于输入上拉模式强制提供供电电压,所以为高电平;而在按键按下后,电路接通,引脚为输入模式时为低电平。

while(!digitalRead(key))理解:按键按下,!digitalRead(key)值为1,一直在while循环里,就不会因为loop循环特性而执行其他命令造成多次触发;按键松开,!digitalRead(key)值为0,退出while循环,也不满足if真值条件,使LED灯一直熄灭。

4.代码理解

          if(flag==0){//判断小灯是否亮起
            flag=1; //标志小灯亮起 
            digitalWrite(led,LOW);//对应的LED小灯亮起
          }else{
            flag=0;  //标志小灯亮熄灭
            digitalWrite(led,HIGH);//对应的LED小灯熄灭
    
          }

注意看电路图,此时LED灯的正极接到5V电源,负极接的数字2号引脚,与我们常用的用数字引脚控制LED灯电路不同。当数字引脚为高电平时,正极负极都为5V电压,没有电势差,所以LED熄灭;当数字引脚为低电平时,正极为电源5V电压,负极为0,有电势差,所以LED灯亮。

五.抢答器实验

1.源代码

int redLed=2;//定义板子上数字口2
int yellowLed=3;//定义板子上数字口3
int greenLed=4;//定义板子上数字口4
int redKey=5;//控制红色LED的按键
int yellowKey=6;//控制黄色LED的按键
int greenKey=7;//控制绿色LED的按键
int resetKey=8;//初始化控制按键

void setup()
{
    pinMode(redLed,OUTPUT);//控制对应的口为输出模式
    pinMode(yellowLed,OUTPUT);//控制对应的口为输出模式
    pinMode(greenLed,OUTPUT);//控制对应的口为输出模式
    
    pinMode(redKey,INPUT_PULLUP);//控制对应的按键为输入模式
    pinMode(yellowKey,INPUT_PULLUP);//控制对应的按键为输入模式
    pinMode(greenKey,INPUT_PULLUP);//控制对应的按键为输入模式
    pinMode(resetKey,INPUT_PULLUP);//复位按键

}
void loop()
{
    if(digitalRead(redKey)==LOW)//判断控制红色LED的按键是否按下,按下小灯亮起
      RED();
    if(digitalRead(yellowKey)==LOW)//判断控制黄色LED的按键是否按下,按下小灯亮起
      YELLOW();
    if(digitalRead(greenKey)==LOW)//判断控制绿色LED的按键是否按下,按下小灯亮起
      GREEN();
}

void RED()
{
  while(digitalRead(resetKey)==1)//判断reset按键是否按下,如果按下将跳出当前的while循环,进行clear()函数
  {
   digitalWrite(redLed,HIGH);//红色LED亮起
   digitalWrite(greenLed,LOW);//绿色LED熄灭
   digitalWrite(yellowLed,LOW);//黄色LED熄灭
  }
  clear();//熄灭所有小灯
}

void YELLOW()//判断reset按键是否按下,如果按下将跳出当前的while循环,进行clear()函数
{
  while(digitalRead(resetKey)==1)
  {
   digitalWrite(redLed,LOW);//红色LED熄灭
   digitalWrite(greenLed,LOW);//绿色LED熄灭
   digitalWrite(yellowLed,HIGH);//黄色LED亮起
  }
  clear();//熄灭所有小灯
}

void GREEN()//判断reset按键是否按下,如果按下将跳出当前的while循环,进行clear()函数
{
  while(digitalRead(resetKey)==1)
  {
   digitalWrite(redLed,LOW);//红色LED熄灭
   digitalWrite(greenLed,HIGH);//绿色LED亮起
   digitalWrite(yellowLed,LOW);//黄色LED熄灭
  }
  clear();//熄灭所有小灯
}
void clear()
{
  digitalWrite(redLed,LOW);//红色LED熄灭
  digitalWrite(greenLed,LOW);//绿色LED熄灭
  digitalWrite(yellowLed,LOW);//黄色LED熄灭
}

2.电路图

3.自定义函数

arduino编程本来就是C语言的一种,因此他的格式和用法都和C语言一样,但在这里毕竟setup()和loop()函数才是系统主函数,所以为了实现某个功能而定义的函数我们把它放在后面。

4.代码理解

注意这里的电路图中LED灯的连接方式,它是我们经常用的正极接数字引脚、负极接GND的常见方式,和上一个实验的连接方式不同。

复位函数:

void clear()
{
  digitalWrite(redLed,LOW);//红色LED熄灭
  digitalWrite(greenLed,LOW);//绿色LED熄灭
  digitalWrite(yellowLed,LOW);//黄色LED熄灭
}

复位函数即所有灯熄灭,从新开始抢答。抢答器应满足三个LED灯同时只有一个能亮,其余熄灭。代码虽然有点长,但无陌生函数,耐心可以理解。

六.总结

这是初次接触硬件,而arduino是最简单的硬件,通过学习50个简单实验来了解arduino,每次学习五个进行一次总结,这是学习笔记1!

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

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

相关文章

像素是什么

像素分为设备像素和设备无关像素。 下面说说来龙去脉。 一、显示器 显示图像的电子设备。 &#xff08;一&#xff09;显示器种类 1.LCD LCD&#xff08;Liquid crystal display&#xff09;&#xff0c;是液体晶体显示&#xff0c;也就是液晶显示器&#xff0c;LCD具有功耗低…

谷歌 Google Cloud 安装 NodeJS服务环境

目录 1. 安装 wget2. 安装 Node2.1 下载安装包2.2 安装包解压2.3 3 安装全局包并创建软链接 3. 安装 git 创建实例略过&#xff0c;点击 SSH 按钮&#xff0c; 在浏览器中打开SSH客户端 注&#xff1a; 本文基于 CentOS 9服务器操作系统 为了方便后面工具插件的顺利安装&a…

用PHP实现经典的4种排序算法

文章目录 一、前言二、4种排序算法2.1 快速排序2.2 插入排序2.3 选择排序2.4 冒泡排序 总结 一、前言 排序算法是一种将一组无序的数据元素按照某个规则(大小、字母序等)排列成有序的序列的算法。常见的排序算法包括冒泡排序、选择排序、插入排序、快速排序、归并排序等。 1.冒…

Python批量梯度下降法的举例

梯度下降法 梯度下降法是一种常用的优化算法&#xff0c;用于求解目标函数的最小值。其基本思想是&#xff0c;通过不断地朝着函数梯度下降的方向更新参数&#xff0c;直到找到函数的最小值。 具体来说&#xff0c;假设我们有一个可导的目标函数 f ( x ) f(x) f(x)&#xff…

项目五:使用路由器构建园区网

使用路由器构建园区网 1、新建拓扑2、配置交换机与主机3、配置路由交换机并进行通信4、通信测试5、配置路由器并进行通信测试1、配置路由器R-12、配置路由器R-2、R-33、通信测试 1、新建拓扑 依次添加四台主机&#xff0c;两台交换机&#xff0c;型号为S3700。两台路由交换机&…

体制内干部职务职级及领导干部排序对应关系大全

请点击↑关注、收藏&#xff0c;本博客免费为你获取精彩知识分享&#xff01;有惊喜哟&#xff01;&#xff01; 一、公务员级别对应关系 &#xff08;一&#xff09;综合管理公务员职务与职级 1、职务分为10级&#xff0c;包括&#xff1a;正国职、副国职、正部职、副部职、正…

【WSN定位】基于加权双曲线的Dvhop定位算法【Matlab代码#16】

文章目录 1. 原始Dvhop定位2. 基于双曲线的Dvhop定位3. 对原始模型加权4. 部分代码5. 结果展示6. 资源获取7. 参考文献 1. 原始Dvhop定位 可参考Dvhop定位算法 2. 基于双曲线的Dvhop定位 双曲线定位算法是一种通过将待定位节点定位在以锚节点为焦点、两锚节点之间距离为焦距…

字符集与字符编码(ASCII、GBK、UNICODE)

1 常见编码 1.1 单字节编码&#xff1a;ASCII ASCII使用1个字节&#xff08;8个bit&#xff09;来记录一组常用字符&#xff0c;见下表&#xff1a; 例如其中字母a的二进制位&#xff1a;1100 001 97&#xff0c;那么a在计算机中就可以用1100001来保存。 注意上表中其实只…

【02-Java Web先导课】-Tomcat服务器的下载与安装

文章目录 前言一、Tomcat服务器&#xff08;apache-tomcat-8.5.28&#xff09;的 下载1、下载地址 二、Tomcat服务器的安装1、Tomcat目录结构2、Tomcat的启动与停止4、Tomcat启动成功后的测试 免责声明&#xff1a; 前言 Tomcat主要实现了Java EE中的Servlet、JSP规范&#xf…

【Python爬虫项目实战三】Ddddocr识别Ocr过开放猫验证码(接Authorization认证更新)

目录 &#x1f347;前言&#x1f34d;验证码识别的几个方法&#x1f965;百度AI开放平台&#x1f965;Ddddocr&#x1f991;分析验证码位数&#x1f991;获取验证码接口&#x1f991;算法识别匹配&#x1f991;请求登陆接口 &#x1f34b;总结&#xff1a; &#x1f347;前言 …

Doris(13):数据模型

在 Doris 中&#xff0c;数据以表&#xff08;Table&#xff09;的形式进行逻辑上的描述。一张表包括行&#xff08;Row&#xff09;和列&#xff08;Column&#xff09;。Row即用户的一行数据。Column 用于描述一行数据中不同的字段。 Column可以分为两大类&#xff1a;Key&a…

Java双亲委派和类加载器

Java双亲委派和类加载器 Java类生命周期主要内容类加载器的分类Bootstrap ClassLoader非Bootstrap ClassLoaderExtension ClassLoaderApplication ClassLoaderUser ClassLoader 类加载的命名空间问题提出双亲委派机制问题解答 破坏双亲委派破坏双亲委派-第一次破坏双亲委派-第二…

【MySQL】GROUP BY分组子句与联合查询的使用详解

目录 前篇都在这里喔~ MySQL的增删改查 MySQL数据库约束和聚合函数的使用 1.GROUP BY子句 练习表如下&#xff1a; 1.查询不包含董事长的平均工资 2.按照角色分组计算平均工资 3.过滤掉平均工资大于一万的角色 4.♥过滤数据♥ 2.联合查询 以下列表作为依据 1.内连接 …

(十二)rk3568 NPU 中部署自己训练的模型,(1)使用yolov5训练自己的数据集-环境搭建部分

rk3568中带有0.8T算力的NPU&#xff0c;可以完成一些轻量级的图像识别任务。 本文向零基础人员介绍从windows中搭建训练环境&#xff0c;模型训练、模型转换到rknn模型部署到电路板上全部过程。 rk3568npu支持caffe、darknet、onnx、pytorch、tensorflow等多种框架。 本人使用…

springboot+vue企业人事人力资源管理系统java公司员工出差考勤办公OA系统

“简易云”是这个系统的名字 &#xff08;6&#xff09;系统管理&#xff1a;主要下拉分为角色管理、菜单管理&#xff1b; 角色管理&#xff1a;此页面可对角色进行增删改查操作&#xff0c;可修改不同角色的权限&#xff1b; 菜单管理&#xff1a;此页面可配置系统可展示的菜…

linux学习记录 和文件系统相关的命令

记录过程&#xff0c;会有错误,硬链接与软链接哪里可能没有说清楚 文件,目录操作命令 pwd 获取当前处于哪个目录当中&#xff0c;返回的是绝对路径 [rootlocalhost home]# pwd /homecd cd 相对/绝对路径 切换目录的&#xff0c;change directory .代表当前目录 …代表上一级…

【C++学习】类和对象--对象特性(1)

构造函数和析构函数 对象的初始化和清理是两个非常重要的安全问题 一个对象或变量没有初始状态&#xff0c;对其使用后果是未知的 使用完一个对象或变量&#xff0c;没有及时清理&#xff0c;也会造成一定的安全问题 C利用构造函数和析构函数解决上述问题&#xff0c;这两个函数…

排序 Comparable 和 Comparator 区别所在

在 Java 中&#xff0c;Comparable 和Comparator 都是用来元素排序的&#xff0c;但是本质不用。我们从几点开始分析。 1.字面含义 Comparable 中文翻译是”比较“&#xff0c;以 able 结尾 说明它具有某种能力。 Comparator 中文翻译是”比较器“&#xff0c;以 or 结尾 表明…

【C++ 二十】STL:遍历、查找、排序、拷贝和替换、算术生成、集合算法

STL&#xff1a;遍历、查找、排序、拷贝和替换、算术生成、集合算法 文章目录 STL&#xff1a;遍历、查找、排序、拷贝和替换、算术生成、集合算法前言1 常用遍历算法1.1 for_each1.2 transform 2 常用查找算法2.1 find2.2 find_if2.3 adjacent_find2.4 binary_search2.5 count…

室内人员定位系统源码,采用java语言+UWB定位技术开发

运用UWB定位技术开发的人员定位系统源码 文末获取联系 本套系统运用UWB定位技术开发的高精度人员定位系统&#xff0c;通过独特的射频处理&#xff0c;配合先进的位置算法&#xff0c;可以有效计算复杂环境下的人员与物品的活动信息。 系统提供位置实时显示、历史轨迹回放、人…