旋转编码器、DS1302 实时时钟、红外遥控模块、雨滴探测传感器 | 配合Arduino使用案例

旋转编码器

src=http___cbu01.alicdn.com_img_ibank_O1CN01sMzEe52N30BZzdOqH_!!2210293519906-0-cib.jpg&refer=http___cbu01.alicdn.webp

旋转编码器是一种用作检测自动化领域中的角度、速度、长度、位置和加速度的传感器。

有绝对式和增量式,这里使用增量式(相对)。
绝对输出只是周的当前位置,是他们成为角度传感器。增量输出关于轴的运动信息,需要进一步处理成速度、距离和位置等信息。

本案例通过左右旋转输出数值,按下清空数值。

/**
 **** Arduino 接线 ****
 * Arduino   传感器
 * VCC       5v
 * GND       GND
 * 2        CLK   
 * 3        DT   
 * 4        SW   
 **********************
 */

int clkPin = 2;
int dtPin = 3;
int swPin = 4;

void setup() {
  Serial.begin(9600);  // 串口通信用于输出 log
  pinMode(clkPin, INPUT);
  pinMode(dtPin, INPUT);
  pinMode(swPin, INPUT);

  digitalWrite(swPin, HIGH);
}
// 旋转就会不断变大或者变小,按下就会清零
int encoderVal = 0;
void loop() {
  int change = getEncoderTurn();
  encoderVal = encoderVal + change;
  if (digitalRead(swPin) == LOW) {
    // 按钮按下
    encoderVal = 0;
  }
  Serial.println(encoderVal);
}

int getEncoderTurn(void) {
  static int oldA = HIGH;  //set the oldA as HIGH
  static int oldB = HIGH;  //set the oldB as HIGH
  int result = 0;
  int newA = digitalRead(dtPin);     //read the value of clkPin to newA
  int newB = digitalRead(clkPin);    //read the value of dtPin to newB
  if (newA != oldA || newB != oldB)  //if the value of clkPin or the dtPin has changed
  {
    if (oldA == HIGH && newA == LOW) {
      result = (oldB * 2 - 1);
    }
  }
  oldA = newA;
  oldB = newB;
  return result;
}

DS1302 实时时钟

u=3208019454,1113893018&fm=253&fmt=auto&app=138&f=JPEG.webp

可为程序实现时钟功能。下面程序将会一秒钟输出一次:2023-07-27 星期四 21:28:09

开始之前需要先安装依赖

image.png

/**
 **** Arduino 接线 ****
 * Arduino   传感器
 * VCC       3.3v
 * GND       GND
 * 5        RST   
 * 6        SDA/DAT   
 * 7        SCL/CLK   
 **********************
 */

#include <Ds1302.h>

uint8_t RST_PIN = 5;
uint8_t SDA_PIN = 6;
uint8_t SCL_PIN = 7;

// DS1302 RTC instance
Ds1302 rtc(RST_PIN, SCL_PIN, SDA_PIN);

const static char* WeekDays[] = {
  "星期一",
  "星期二",
  "星期三",
  "星期四",
  "星期五",
  "星期六",
  "星期日"
};


void setup() {
  Serial.begin(9600);

  // 初始化
  rtc.init();

  /** 设置时间 **/
  // 变量定义见代码底部枚举
  Ds1302::DateTime dt = {
    .year = 23,
    .month = Ds1302::MONTH_JUL,
    .day = 27,
    .hour = 21,
    .minute = 26,
    .second = 0,
    // 周
    .dow = Ds1302::DOW_THU
  };
  rtc.setDateTime(&dt);
}


void loop() {
  // 获取当前时间
  Ds1302::DateTime now;
  rtc.getDateTime(&now);

  static uint8_t last_second = 0;
  if (last_second != now.second) {
    last_second = now.second;

    Serial.print("20");
    Serial.print(now.year);  // 00-99
    Serial.print('-');
    if (now.month < 10) Serial.print('0');
    Serial.print(now.month);  // 01-12
    Serial.print('-');
    if (now.day < 10) Serial.print('0');
    Serial.print(now.day);  // 01-31
    Serial.print(' ');
    Serial.print(WeekDays[now.dow - 1]);  // 1-7
    Serial.print(' ');
    if (now.hour < 10) Serial.print('0');
    Serial.print(now.hour);  // 00-23
    Serial.print(':');
    if (now.minute < 10) Serial.print('0');
    Serial.print(now.minute);  // 00-59
    Serial.print(':');
    if (now.second < 10) Serial.print('0');
    Serial.print(now.second);  // 00-59
    Serial.println();
  }

  delay(1000);
}


 
//  * 月份枚举 
// enum MONTH : uint8_t {
//     MONTH_JAN = 1,
//     MONTH_FEB = 2,
//     MONTH_MAR = 3,
//     MONTH_APR = 4,
//     MONTH_MAY = 5,
//     MONTH_JUN = 6,
//     MONTH_JUL = 7,
//     MONTH_AUG = 8,
//     MONTH_SET = 9,
//     MONTH_OCT = 10,
//     MONTH_NOV = 11,
//     MONTH_DEC = 12
// };


//  * 周枚举 
// enum DOW : uint8_t {
//     DOW_MON = 1,
//     DOW_TUE = 2,
//     DOW_WED = 3,
//     DOW_THU = 4,
//     DOW_FRI = 5,
//     DOW_SAT = 6,
//     DOW_SUN = 7
// };
 

红外遥控模块

.jpg

该模块由两部分组成:信号发射器和接收器组成。

开始之前先安装依赖

image.png

/**
 **** Arduino 接线 ****
 * Arduino   传感器
 * VCC       5v
 * GND       GND
 * A0        D0    
 **********************
 */

#include <IRremote.h>

int pin = A0;

IRrecv irrecv(pin);
decode_results results;

void setup() {
  Serial.begin(115200); 
  IrReceiver.begin(pin);  
}

void loop() {
  if (IrReceiver.decode()) {
    // IrReceiver.decodedIRData.command 每个按钮都是一个不一样的数字,根据数字判断即可
    Serial.println(IrReceiver.decodedIRData.command);
    IrReceiver.resume();  // 允许接收下一个值
  } 
} 

雨滴探测传感器

u=99622666,1154093227&fm=253&fmt=auto&app=138&f=JPEG.webp

用来检测是否下雨,一般用于汽车的雨刷系统、只能照明和天窗系统

该模块由两部分组成:信号发射器和接收器组成。

/**
 **** Arduino 接线 ****
 * Arduino   传感器
 * VCC       5v
 * GND       GND
 * A0        A0    雨滴越多值越小
 * A1        D0    达到阈值时输入低电平
 **********************
 */ 

int pin1 = A0;
int pin2 = A1; 

int pin1Val = 0;
int pin2Val = 0; 

void setup() {
  Serial.begin(9600);  
  pinMode(pin2, INPUT);
}

void loop() { 
    pin1Val = analogRead(pin1);
    pin2Val = digitalRead(pin2);

    Serial.print(pin1Val);  // 雨滴越多值越小
    Serial.print(" - "); 
    Serial.println(pin2Val); // 达到阈值时输入低电平
    delay(200);
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

干货分享 | 详解TSMaster CAN 与 CANFD 的 CRCE2E 校验方法

面对切换工具链的用户来说&#xff0c;在 TSMaster 上完成总线通讯中的 CRC/E2E 校验处理不是特别熟悉&#xff0c;该文章可以协助客户快速使用 TSMaster 完成 CAN/CAN FD 总线通讯的 CRC/E2E 校验。 本文关键字&#xff1a;TSMaster&#xff0c;CAN/CANFD&#xff0c;CRC 校验…

【漏洞复现】SpringBlade tenant/list SQL 注入漏洞

0x01 产品简介 SpringBlade ,是一个由商业级项目升级优化而来的 SpringCloud 分布式微服务架构、SpingBoot 单体式微服务架构并存的综合型项目。 0x02 漏洞概述 SpringBlade 后台框架 /api/blade-system/tenantist路径存在SQL注入漏洞&#xff0c;攻击者除了可以利用 SQL 注…

参数介绍 安捷伦Agilent4155C、4156C 半导体测试仪

Agilent / HP 4155C 半导体参数分析仪是一款经济高效、精确的实验室台式解决方案&#xff0c;可用于高级设备特性分析。Agilent / HP 4155C 分析仪的功能和规格包括&#xff1a;一般功能&#xff1a; 经济高效、精确的实验室台式参数分析仪4 个中等功率 SMU、2 个 VSU 和 2 个 …

iOS 通过PacketLogger 抓包蓝牙数据包

当使用iOS平台调试蓝牙外设时&#xff0c;需要抓取蓝牙数据包&#xff0c;那么如何获取iOS端设备与蓝牙设备之间通信的蓝牙数据包呢&#xff1f; 一、资料准备 1、苹果手机 2、Xcode开发工具 3、Apple开发者账户 二、环境搭建 2.1、手机环境搭建 手机浏览器访问地址&…

Anzo Capital:什么是BUOVB形态?如何交易?

各位投资者如果你在研究趋势图表的时候&#xff0c;发现了这种形态的图表&#xff1a;第一个蜡烛图是看跌&#xff0c;第二个蜡烛图看涨而且全部遮住第一个蜡烛图&#xff0c;也就是第二个蜡烛图的高点可能超出第一个条形几个点&#xff0c;其低点也可能超出第一个蜡烛图几个点…

HCIP-Datacom-ARST自选题库__BGP/MPLS IP VPN多选【11道题】

1.在BGP/MPLS IP VPN中&#xff0c;PE上分配私网标签的方式有以下哪些顶? 基于平台的MPLS标签分配 基于VPN实例的MPLS标签分配 基于路由的MPLS标签分配 基于接口的MPLS标签分配 2.以下关于BGP/MPLS IP VPN的描述&#xff0c;正确的有哪些项? 在BGP/MPLSIP VPN场景中&am…

超声波清洗机哪个品牌更值得推荐?精选四大王牌臻品分享

近年来&#xff0c;随着人们对健康生活要求的提升&#xff0c;超声波清洗机在市场上的受欢迎程度逐渐攀升&#xff0c;产品的多样性也让人眼花缭乱。近期收到了大量读者的一些私信&#xff0c;其中很多人询问使用超声波清洗机会对眼镜有伤害吗、超声波清洗机是不是智商税、超声…

苏宁电商数据揭秘:掌握苏宁API接口,一键解锁无限商机

苏宁API接口是一套开放的、基于HTTP协议的接口&#xff0c;它允许开发者通过编程方式访问苏宁平台上的商品、订单、用户等信息。这些接口支持多种数据格式&#xff0c;如JSON和XML&#xff0c;并提供了完善的错误处理和权限控制机制。 要使用苏宁API接口&#xff0c;首先需要在…

家政上门系统源码,家政上门预约服务系统开发涉及的主要功能

家政上门预约服务系统开发是指建立一个在线平台或应用程序&#xff0c;用于提供家政服务的预约和管理功能。该系统的目标是让用户能够方便地预约各种家政服务&#xff0c;如保洁、家庭护理、月嫂、家电维修等&#xff0c;并实现服务供应商管理和订单管理等功能。 以下是开发家政…

bootstrapblazor小白笔记

使用了bootstrapblazor&#xff0c;采用.net8.0&#xff0c;server模式&#xff0c;所有的问题都是基于以上条件所遇到的 1、登录过后需要在每个页面都使用认证吗 是不需要的&#xff0c;每个页面都写attribute [Authorize]没有问题&#xff0c;但是页面很多的话一个一个的写很…

Vue可视化表单设计 FcDesigner v3.1.0 发布,新增 12 个组件,支持事件配置等

FcDesigner 是一款可视化表单设计器组件。可以通过拖拽的方式快速创建表单&#xff0c;提高开发者对表单的开发效率&#xff0c;节省开发者的时间。 本项目采用 Vue 和 ElementPlus 进行页面构建&#xff0c;内置多语言解决方案&#xff0c;支持二次扩展开发&#xff0c;支持自…

用JS来控制遥控车(一行代码即可连接, 超简单!)

简介 有些时候我们想要做车辆的某一个功能&#xff0c;但是又不想浪费时间做整辆小车时&#xff0c;一般会去买一辆差不多的遥控车来改&#xff0c;但是那也比较麻烦&#xff0c;市面上好像也没有便宜的直接提供编程接口的遥控车。所以就自己做一个吧~。 主要是要实现向外提供…

智能名片小程序源码系统平台版 人人可创建属于自己的名片 前后端分离 带完整的源代码以及搭建教程

系统概述 智能名片小程序源码系统平台版是一款基于微信小程序的个性化名片搭建平台。该平台采用前后端分离的设计架构&#xff0c;前端提供丰富的界面元素和灵活的布局方式&#xff0c;后端则提供强大的数据支持和功能扩展能力。用户无需具备专业的编程知识&#xff0c;只需按…

python中的while循环

没有循环时&#xff0c;想打印0-100之间的数字&#xff0c;则需要循环多次&#xff0c;例&#xff1a; print(0) print(1) print(2) print(3) ... print(99) 但是使用循环的话&#xff0c;就不会有那么麻烦 while 循环 while 这个单词有“在……时”的含义&#xff0c;whil…

patchworklib,一款极其强大的 Python 库!

一、问题 如果想把多个图合并放在一个图里&#xff0c;如图&#xff0c;该如何实现 好在R语言 和 Python 都有对应的解决方案&#xff0c; 分别是patchwork包和patchworklib库。 二、R语言 安装 两个图并排在一行&#xff0c;只需要导入patchwork&#xff0c; 然后相加即可 …

算法课程笔记——计数原理

算法课程笔记——计数原理

2024年信息素养大赛图形化编程小低组复赛模拟真题

2024年全国青少年信息素养大赛复赛为六道编程题&#xff0c;分值为10分*215分*225分*2&#xff0c;难度依次递增&#xff0c;按步骤评分&#xff0c;据Scratch实验室预估&#xff0c;初赛80%的晋级率&#xff0c;初赛近20万人&#xff0c;意味着有15万多进入复赛&#xff0c;7月…

最前端|手把手教你打造前端规范工程

前端代码风格因人而异&#xff0c;一个项目参与的人多了&#xff0c;不加强控制可能就是一个大杂烩&#xff0c;对开发人员来讲就是一个噩梦。 如何解决这种困境&#xff1f; 通过使用 ESLint Prettier Husky Lint-stagedCommitlint Commitizen 这套方案&#xff0c;它能够在…

Camx架构-Camera kernel Driver debugging

目录 V4L2 framework camera drivers CRM 功能性 CRM log analysis 使能CRM log: camera启动期间列举子设备: userspace 连接或者取消已获得的device handles(UMD 等效于CSLLink/CSLUnlink) userspace open request (UMD等效于CSLOpenRequest) 在SOF期间,reque…

Linux防火墙入门——iptables、firewalld配置详解

合理的防火墙是你的计算机防止网络入侵的第一道屏障。你在家里上网&#xff0c;通常互联网服务提供会在路由中搭建一层防火墙。当你离开家时&#xff0c;那么你计算机上的那层防火墙就是仅有的一层&#xff0c;所以配置和控制好你 Linux 电脑上的防火墙很重要。 很多 Linux 发…