【雕爷学编程】Arduino动手做(07)---电位器模块之电位器调速并带蜂鸣的8位跑马灯

news2025/3/1 14:31:54

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试多做实验,不管成功与否,都会记录下来——小小的进步或是搞不掂的问题,希望能够抛砖引玉。

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验七:旋转电位器模块 旋钮编码器电路板 模拟量输出0-5V电压 电子积木

在这里插入图片描述
在这里插入图片描述
电位器模块实验环境
1、实验所需硬件清单——
电位器模块X1
Arduino Uno开发板 X1
杜邦线 若干(备了8条)
LED发光二极管(蓝色)X1
220欧姆限流电阻(1/8W)x1
SG90 9g舵机模块(180度)X1
有源蜂鸣器模块(低电平触发)X1
Proto Shield 原型扩展板(带mini面包板)X1

在这里插入图片描述

(3)实验九开源仿真编程(Linkboy V4.2)串口输出

在这里插入图片描述

在这里插入图片描述

(4)实验十开源图形编程(Mind+、编玩边学)

在这里插入图片描述
4、实验四:用电位器模块控制舵机(SG90 9g)
(1)安装库:IDE-工具-管理库-搜索“Servo”-安装

在这里插入图片描述

(2)实验十一参考开源代码(Arduino):

/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验十一:用电位器模块控制舵机(SG90 9g)
  安装库:IDE-工具-管理库-搜索“Servo”-安装
  实验接线:电位器模块OUT接Uno的A0,舵机S端接D9
*/

#include <Servo.h> // 声明调用 Servo.h 库
Servo myservo; // 创建一个舵机对象
int potpin =A0; // 连接到模拟口 A0
int val; //变量 val 用来存储从模拟口A0读到的值

void setup()
 {
  myservo.attach(9); // 将引脚D9上的舵机与声明的舵机对象连接起来
}

void loop() 
{
  val = analogRead(potpin); //从模拟口A0读值,并通过val 记录
  val = map(val, 0, 1023, 0, 179); //通过 map 函数进行数值转换
  myservo.write(val); // 给舵机写入角度
  delay(15); // 延时 15ms 让舵机转到指定位置
}

(3)实验四场景图

在这里插入图片描述
(4)实验十二开源仿真编程(Linkboy V4.2)

在这里插入图片描述
(5)实验十三开源图形编程(Mind+、编玩边学)

在这里插入图片描述
5、实验十四:利用电位器A0输入的模拟量,控制8位LED点亮状态
(1)实验说明:电位器阻值为0时,LED灯全熄灭,随着选择电位器阻值增大,逐个点亮8只LED灯,反向旋转电位器,则LED灯逐个熄灭。图为实验五接线示意图。

在这里插入图片描述

(2)实验十四参考开源代码(Arduino):

/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验十四:电位器调速并带蜂鸣的8位跑马灯
  实验接线:电位器模块OUT接Uno的A1,8只LED灯分别接D2~D9
*/

// 模拟输入引脚定义(电位器)
const int analogPin = A1;

// 引脚定义 LED 个数
const int LEDCount = 8;

// 对应的 LED 引脚
int LEDPins[] = {
  2,
  3,
  4,
  5,
  6,
  7,
  8,
  9,
};


void setup() {
  // 循环设置,把对应的 LED 都设置成输出
  for (int thisLED = 0; thisLED < LEDCount; thisLED++) {
    pinMode(LEDPins[thisLED], OUTPUT);
  }
}

void loop() {
  // 读取电位器的值
  int sensorReading = analogRead(analogPin);
  // 把对应的值转化成 0 - 最大 LED 个数,这里设置的是 8
  int LEDLevel = map(sensorReading, 0, 1023, 0, LEDCount);
  // 循环对比输出到 LED
  for (int thisLED = 0; thisLED < LEDCount; thisLED++) {
    if (thisLED < LEDLevel) {
      digitalWrite(LEDPins[thisLED], HIGH);
    } else {
      digitalWrite(LEDPins[thisLED], LOW);
    }
  }
}

(3)实验五场景图

在这里插入图片描述

(4)实验十五开源代码(Arduino):

/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验十五:电位器调速并带蜂鸣的8位跑马灯之二
  实验接线:电位器模块OUT接Uno的A0,8只LED灯分别接D0~D7
*/

const int ledCount = 8;

void setup() {
  for (int i = 0; i < ledCount; ++i) {
    pinMode(i, OUTPUT);
  }
}

void loop() {
  int sensorRead = analogRead(A0); // 获取A0端口的模拟量值
  int ledLevel = map(sensorRead, 0, 1023, 0, 8); 
// 进行map转换,范围为0~1023,输出值在0~8之间
  for (int i = 0; i < ledCount; ++i) {
    digitalWrite(i, i < ledLevel ? HIGH : LOW);    
  }
}

(5)实验十五接线示意图

在这里插入图片描述

6、实验十六:电位器调速并带蜂鸣的8位跑马灯
(1)实验说明:这个实验比较麻烦,因为这个实验包含了跑马灯、蜂鸣器和电位器。电位器阻值越大,跑马灯速度越慢,间隔时间根据电位器的阻值采样为:(100+2×采样值)毫秒,采样值为0~1023。即100~2146毫秒之间,每次点亮LED时,蜂鸣器都会蜂鸣一次(20毫秒)。
实验十六参考开源代码(Arduino):

/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验十六:电位器调速并带蜂鸣的8位跑马灯
  实验接线:电位器模块OUT接Uno的A0,8只LED灯分别接D2~D9
  低电平触发蜂鸣器接D12
*/

#define Pot A0   //电位器引脚创建A0
#define Buzzer 12  //蜂鸣器接D12 
byte ledPin[] = {2, 3, 4, 5, 6, 7, 8, 9}; //Port 2~9 LED输出,高电平有效
int ledDelay;
int dir = 1;
int currentLED = 0;
int PotBuffer = 0;
unsigned long changeTime;

void setup() {
  pinMode(Buzzer, OUTPUT); //蜂鸣器为输出
  digitalWrite(Buzzer, HIGH); //蜂鸣器初始为不鸣叫
  for (int x = 0; x < 8; x++)
  {
    pinMode(ledPin[x], OUTPUT);  // LED为输出
  }
  changeTime = millis();
}

void loop(){
  PotBuffer = analogRead(Pot);      //读取AD值
  if ((millis() - changeTime) > 20)  //判断蜂鸣时间是否到了20ms
  {
    digitalWrite(Buzzer, HIGH);   //到了则关断蜂鸣器
  }
  if ((millis() - changeTime) > ledDelay)  //判断是否到了LED持续点亮的时间
  {
    changeLED();   //到了则点亮下一个LED
    changeTime = millis();    //再设置现在点亮的起始时间
  }
}

void changeLED() {
  for (int x = 0; x < 8; x++) {
    digitalWrite(ledPin[x], LOW);
  }
  digitalWrite(ledPin[currentLED], HIGH);
  //BuzzerDi();
  digitalWrite(Buzzer, LOW);
  ledDelay = 20 + 2 * PotBuffer;
  currentLED += dir;
  if (currentLED == 7) {
    dir = -1;
  }
  if (currentLED == 0) {
    dir = 1;
  }
}

(3)实验十六场景图

在这里插入图片描述

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

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

相关文章

详解使用SSH远程连接Ubuntu服务器系统

演示环境&#xff1a; 1.Windows10系统 2.VMware Workstation Pro虚拟机 2.Ubuntu16.04.6&#xff08;以上版本通用&#xff09; 回归正题 一、在Ubuntu端&#xff1a; 1.首先需要安装SSH服务器&#xff0c;在ubuntu终端输入以下指令 sudo apt-get install ssh2.输入你的ubu…

数据安全加固:深入解析滴滴ES安全认证技术方案

前文分别介绍了滴滴自研的ES强一致性多活是如何实现的、以及如何提升ES的性能潜力。由于ES具有强大的搜索和分析功能&#xff0c;同时也因其开源和易于使用而成为黑客攻击的目标。近些年&#xff0c;业界ES数据泄露事件频发, 以下是一些比较严重的数据泄露案件&#xff1a; 202…

基于 ChatGLM2 和 OpenVINO™ 打造中文聊天助手

点击蓝字 关注我们,让开发变得更有趣 作者 | 英特尔 AI 软件工程师 杨亦诚 排版 | 李擎 基于ChatGLM2和OpenVINO™打造中文聊天助手 ChatGLM 是由清华大学团队开发的是一个开源的、支持中英双语的类 ChatGPT 大语言模型&#xff0c;它能生成相当符合人类偏好的回答, ChatGLM2 …

160. 相交链表 题解

题目描述&#xff1a;160. 相交链表 - 力扣&#xff08;LeetCode&#xff09; 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 注&#xff1a;本题中链表相交是“Y”型的&am…

KDD 2023 | 美团技术团队精选论文解读

本文精选了美团技术团队被KDD 2023收录的7篇论文进行解读&#xff0c;论文覆盖了Feed流推荐、多模态数据、实例分割、用户意图预测等多个方向。这些论文也是美团技术团队与国内多所高校、科研机构合作的成果。希望给从事相关研究工作的同学带来一些启发或者帮助。 ACM SIGKDD&a…

(el-switch)操作(不使用 ts):Element-plus 中 Switch 将默认值修改为 “true“ 与 “false“(字符串)来控制开关

Ⅰ、Element-plus 提供的 Switch 开关组件与想要目标情况的对比&#xff1a; 1、Element-plus 提供 Switch 组件情况&#xff1a; 其一、Element-ui 自提供的 Switch 代码情况为(示例的代码)&#xff1a; // Element-plus 自提供的代码&#xff1a; // 此时是使用了 ts 语言环…

如何理解MySQL隔离性---3个记录隐藏字段、undo日志、Read View

目录 一、3个记录隐藏字段 二、undo 日志 三、read view 一、3个记录隐藏字段 本片文章是帮助理解上篇文章Mysql隔离性的辅助知识。 mysql在建表时&#xff0c;不仅仅创建了表的结构&#xff0c;还创建了3个隐藏字段。 DB_TRX_ID &#xff1a;6 byte&#xff0c;最近修改( 修…

uniapp-原生地图截屏返回base64-进行画板编辑功能

一、场景 vue写uniapp打包安卓包&#xff0c;实现原生地图截屏&#xff08;andirod同事做的&#xff09;-画板编辑功能 实现效果&#xff1a; 二、逻辑步骤简略 1. 由 原生地图nvue部分&#xff0c;回调返回 地图截屏生成的base64 数据&#xff0c; 2. 通过 uni插件市场 im…

Go异常处理机制panic和recover

recover 使用panic抛出异常后, 将立即停止当前函数的执行并运行所有被defer的函数&#xff0c;然后将panic抛向上一层&#xff0c;直至程序crash。但是也可以使用被defer的recover函数来捕获异常阻止程序的崩溃&#xff0c;recover只有被defer后才是有意义的。 func main() { p…

如何让ES低成本、高性能?滴滴落地ZSTD压缩算法的实践分享

前文分别介绍了滴滴自研的ES强一致性多活是如何实现的、以及如何提升ES的性能潜力。由于滴滴ES日志场景每天写入量在5PB-10PB量级&#xff0c;写入压力和业务成本压力大&#xff0c;为了提升ES的写入性能&#xff0c;我们让ES支持ZSTD压缩算法&#xff0c;本篇文章详细展开滴滴…

Ceph集群安装部署

Ceph集群安装部署 目录 Ceph集群安装部署 1、环境准备 1.1 环境简介1.2 配置hosts解析(所有节点)1.3 配置时间同步2、安装docker(所有节点)3、配置镜像 3.1 下载ceph镜像(所有节点执行)3.2 搭建制作本地仓库(ceph-01节点执行)3.3 配置私有仓库(所有节点执行)3.4 为 Docker 镜像…

C语言可变数组 嵌套的可变数组,翻过了山跨过了河 又掉进了坑

可变数组 ​专栏内容&#xff1a; postgresql内核源码分析 手写数据库toadb 并发编程 个人主页&#xff1a;我的主页 座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物. 概述 数组中元素是顺序存放&#xff0c;这一特性让我们…

Java获取路径时Class.getResource()和ClassLoader.getResource()区别

Java中取资源时&#xff0c;经常用到Class.getResource()和ClassLoader.getResource()&#xff0c;Class.getResourceAsStream()和ClassLoader().getResourceAsStream()&#xff0c;这里来看看他们在取资源文件时候的路径有什么区别的问题。 环境信息&#xff1a; 系统&#…

css3瀑布流布局遇见截断下一列展示后半截现象

css3 瀑布流布局遇见截断下一列展示后半截现象 注&#xff1a;css3实现瀑布流布局简直不要太香&#xff5e;&#xff5e;&#xff5e;&#xff5e;&#xff5e; 场景-在uniapp项目中 当瀑布流布局column-grap:10px 相邻两列之间的间隙为10px&#xff0c;column-count:2,2列展示…

基于k8s的devOps自动化运维平台架构设计(中英文版本)

▲ 点击上方"DevOps和k8s全栈技术"关注公众号 In the rapidly evolving landscape of software development and IT operations, DevOps has emerged as a transformative approach to bridge the gap between development and operations teams. One of the key ena…

第五期(2022-2023)传统行业云原生技术落地调研报告——央国企篇

随着国务院国资委印发《关于加快推进国有企业数字化转型工作的通知》&#xff0c;开启了国有企业数字化转型的新篇章。大型央、 国企纷纷顺应趋势&#xff0c;加速云化布局&#xff0c;将数字化转型工作定位为“十四五”时期重点任务。同时&#xff0c;越来越多的企业通过云原生…

【Leetcode】155. 最小栈、JZ31 栈的压入、弹出序列

作者&#xff1a;小卢 专栏&#xff1a;《Leetcode》 喜欢的话&#xff1a;世间因为少年的挺身而出&#xff0c;而更加瑰丽。 ——《人民日报》 155. 最小栈 155. 最小栈 题目描述; 设计一个支持 push &#xff0c;pop &#xff0c;top …

C语言笔记7

#include <stdio.h> int main(void) {int a123;int b052;//十进制42int c0xa2;//十进制162printf("a%d b%o c%x \n",a,b,c);//分别是十进制 八进制 十六进制printf("a%d b%d c%d \n",a,b,c);printf("Hello 凌迟老头\n");return …

uniapp 使用canvas画海报(微信小程序)

效果展示&#xff1a; 项目要求&#xff1a;点击分享绘制海报&#xff0c;并实现分享到好友&#xff0c;朋友圈&#xff0c;并保存 先实现绘制海报 <view class"data_item" v-for"(item,index) in dataList" :key"index"click"goDet…

并发——线程池,Executor 框架

文章目录 1 简介2 Executor 框架结构(主要由三大部分组成)1) 任务(Runnable /Callable)2) 任务的执行(Executor)3) 异步计算的结果(Future) 3 Executor 框架的使用示意图 1 简介 Executor 框架是 Java5 之后引进的&#xff0c;在 Java 5 之后&#xff0c;通过 Executor 来启动…