前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >张高兴的 Windows 10 IoT 开发笔记:HC-SR04 超声波测距模块

张高兴的 Windows 10 IoT 开发笔记:HC-SR04 超声波测距模块

作者头像
张高兴
发布于 2018-05-18 07:52:33
发布于 2018-05-18 07:52:33
74502
代码可运行
举报
文章被收录于专栏:张高兴的博客张高兴的博客
运行总次数:2
代码可运行

  HC-SR04 采用 IO 触发测距。下面介绍一下其在 Windows 10 IoT Core 环境下的用法。

  项目运行在 Raspberry Pi 2/3 上,使用 C# 进行编码。

1. 准备

  HC-SR04 ×1 

  Raspberry Pi 2/3 ×1

  公母头杜邦线 ×4

2. 连线

Vcc - 5V

Gnd - GND

Trig - GPIO 17 - Pin 11

Echo - GPIO 27 - Pin 13

3. 代码

  GitHubhttps://github.com/ZhangGaoxing/windows-iot-demo/tree/master/HC_SR04Demo

  你需要在项目中添加一个 C# 代码文件 HCSR04.cs,将下面的代码复制粘贴,并且不要忘记添加引用 Windows IoT Extensions for the UWP

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using System.Diagnostics;
using System.Threading.Tasks;
using Windows.Devices.Gpio;

namespace HC_SR04Demo
{
    class HCSR04
    {
        private int sensorTrig;
        private int sensorEcho;

        private GpioPin pinTrig;
        private GpioPin pinEcho;

        Stopwatch time = new Stopwatch();

        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="trig">Trig Pin</param>
        /// <param name="echo">Echo Pin</param>
        public HCSR04(int trig, int echo)
        {
            sensorTrig = trig;
            sensorEcho = echo;
        }

        /// <summary>
        /// Initialize the sensor
        /// </summary>
        public void Initialize()
        {
            var gpio = GpioController.GetDefault();

            pinTrig = gpio.OpenPin(sensorTrig);
            pinEcho = gpio.OpenPin(sensorEcho);

            pinTrig.SetDriveMode(GpioPinDriveMode.Output);
            pinEcho.SetDriveMode(GpioPinDriveMode.Input);

            pinTrig.Write(GpioPinValue.Low);
        }

        /// <summary>
        /// Read data from the sensor
        /// </summary>
        /// <returns>A double type distance data</returns>
        public async Task<double> ReadAsync()
        {
            double result;

            pinTrig.Write(GpioPinValue.High);
            await Task.Delay(10);
            pinTrig.Write(GpioPinValue.Low);

            while (pinEcho.Read() == GpioPinValue.Low)
            {

            }
            time.Restart();
            while (pinEcho.Read() == GpioPinValue.High)
            {

            }
            time.Stop();

            result = (time.Elapsed.TotalSeconds * 34000) / 2;

            return result;
        }

        /// <summary>
        /// Cleanup
        /// </summary>
        public void Dispose()
        {
            pinTrig.Dispose();
            pinEcho.Dispose();
        }
    }
}

4. 如何使用

  第一步调用构造函数将 HCSR04 实例化,请传入 Trig 和 Echo 的连接值

  第二步调用 Initialize() 初始化设备

  第三步调用 ReadAsync() 读取数据,返回的是一个 double 类型的值

  当需要关闭设备时,调用 Dispose() 

  详见 GitHub

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-01-23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
canvas绘制闹钟-方法2 原
 drawBackground()里面的ctx.save() 为什么不能放到上面的原因:一般ctx.save() 与ctx.restore()是成对出现的。ctx.save() 的作用是保存状态,ctx.restore()指弹出保存的状态来使用,如果此函数中没有ctx.save(),则在draw()中执行ctx.restore(); 就没有意义,因为没有已经保存的状态,导致绘图有问题。
tianyawhl
2019/04/04
5830
基于canvas和ol的点标注的避让实现
在做地图的时候,点的标注展示是一个非常常见的功能,但是十几种点在某些区域比较密集是非常常见的,但是业务表达中却需要将之展示出来。基于此需求,本文结合canvas和ol做一简单的实现。
牛老师讲GIS
2021/12/21
6000
基于canvas和ol的点标注的避让实现
canvas反向裁剪技巧
我们都知道在canvas 可以通过clip来实现剪裁功能,其步骤一般是先设置要裁剪的区域(路径),然后通过ctx.clip()的实现裁剪,裁剪之后,后续的绘制只能在裁剪的区域显示效果,比如如下一段代码,实现了一个圆形裁剪:
用户3158888
2019/05/29
1.3K0
Canvas
http://www.w3c.org/TR/2dcontext/ https://html.spec.whatwg.org/
jinghong
2020/05/09
13.1K0
Canvas
canvas学习笔记(八)—- 基本动画
1.用window.setInterVal()、window.setTimeOut()和window.requestAnimationFrame()来定期执行一个指定函数
Java架构师必看
2021/08/19
6660
Canvas 入门
svg 是基于 XML 的矢量图形,canvas 是用脚本绘制的图形, svg 不会失真,canvas 会失真。
逃跑计划
2022/08/05
5360
Canvas 入门
H5和微信小游戏 Canvas API 整理前言
这段时间闲下来,系统学习了微信小程序和微信小游戏,发现还是挺有意思的。现在微信小游戏的开发都离不开游戏引擎,用原生小游戏开发工具开发的很少很少。但是毕竟我不是专业游戏开发,所有游戏引擎就不搞了,我们就单纯来看原生微信小游戏开发。
大公爵
2018/10/10
2.9K0
H5和微信小游戏 Canvas API 整理前言
HTML5 Canvas制作雷达图实战
雷达图又叫蜘蛛网图,是一种对各项数据查看很明显的表现图,在很多游戏中,对游戏中的每个角色的分析图一般也用这种图。
疯狂的技术宅
2019/03/28
1.8K0
HTML5 Canvas制作雷达图实战
Canvas3 绘图和重叠
在绘制图形时,如果画布上已经有图形,就涉及到一个问题:两个图形如何组合。可以通过CanvasRenderingContext2D.globalCompositeOperation属性来设置组合方式
用户9184480
2024/12/17
880
Canvas3 绘图和重叠
HTML5+CSS3+JavaScript从入门到精通-05
HTML5+CSS3+JavaScript从入门到精通 作者:王征,李晓波 第五章 HTML网页中的canvas绘图 案例 05-01 canvas元素 <!DOCTYPE html> <!--web05-01--> <!--canvas--> <html> <head> <meta charset="utf-8" /> <title>canvas元素</title> </head> <body> <h3 align="center">canvas元素</h3> <hr /
qiqi_fu
2021/12/03
1.2K0
HTML5+CSS3+JavaScript从入门到精通-05
用Canvas生成随机验证码(后端前端都可以)
一 、使用前端生成验证码 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> <canvas id="canvas" width="120" height="40"></canvas> <a href="#" id="changeImg">看不清,换一张</a> <script>
SpiritLing
2018/04/16
1.1K0
Canvas 从进阶到退学
接着 《Canvas 从入门到劝朋友放弃(图解版)》 ,本文继续补充 canvas 基础知识点。
德育处主任
2022/12/13
2.1K0
Canvas 从进阶到退学
canvas动画
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
sofu456
2019/12/03
8590
Canvas
注意canvas 的 width 和 height 不要用 css 来设定,如果用 css 样式来设置,会变形和失真
小丞同学
2021/08/16
1.2K0
第154天:canvas基础(一)
​ <canvas> 是 HTML5 新增的,一个可以使用脚本(通常为JavaScript)在其中绘制图像的 HTML 元素。它可以用来制作照片集或者制作简单(也不是那么简单)的动画,甚至可以进行实时视频处理和渲染。
半指温柔乐
2018/09/11
7580
第154天:canvas基础(一)
Day 3 学习Canvas这一篇文章就够了
一、canvas简介 ​ <canvas> 是 HTML5 新增的,一个可以使用脚本(通常为JavaScript)在其中绘制图像的 HTML 元素。它可以用来制作照片集或者制作简单(也不是那么简单)的动画,甚至可以进行实时视频处理和渲染。 ​ 它最初由苹果内部使用自己MacOS X WebKit推出,供应用程序使用像仪表盘的构件和 Safari 浏览器使用。 后来,有人通过Gecko内核的浏览器 (尤其是Mozilla和Firefox),Opera和Chrome和超文本网络应用技术工作组建议为下一代的网络技术使用该元素。 ​ Canvas是由HTML代码配合高度和宽度属性而定义出的可绘制区域。JavaScript代码可以访问该区域,类似于其他通用的二维API,通过一套完整的绘图函数来动态生成图形。 ​ Mozilla 程序从 Gecko 1.8 (Firefox 1.5)开始支持 <canvas>, Internet Explorer 从IE9开始<canvas> 。Chrome和Opera 9+ 也支持 <canvas>。 二、Canvas基本使用 2.1 <canvas>元素
IT人一直在路上
2019/09/16
1K0
Day 3 学习Canvas这一篇文章就够了
第156天:canvas(三)
​ translate方法接受两个参数。x 是左右偏移量,y 是上下偏移量,如右图所示。
半指温柔乐
2018/09/11
5140
第156天:canvas(三)
手写原生代码专题 | 简易手写画板(二)
如视频所示,在这个示例中,我们用到了画布 canvas 相关的知识,比如创建画布、画圆形、画直线的基础知识,有了这些基础后,我们就能轻松完成本示例,示例效果如下视频所示。
前端达人
2021/07/16
1.5K0
①万字《详解canvas api画图》小白前端入门教程(建议收藏)
在页面中增加一个canvas元素就相当于在网页中添加一块画布,之后就可以利用一系列的绘图指令,在“画布”上绘制图形。
不吃西红柿
2022/09/19
6130
①万字《详解canvas api画图》小白前端入门教程(建议收藏)
我希望按照我的思路尽可能将canvas基础讲明白
写在前面 canvas很多人写过,我之前的博客里面也写过关于canvas的教程,但是后面我觉得其实不太好,因为很多东西都是很模糊的,没有非常直观清晰的将canvas讲解明白,究其原因,还是这个属性使用的不够多,导致很多属性不够熟练,但是我希望这篇文章可以将这个属性彻底的讲明白,毕竟只是一个标签而已,怎么讲都不会太复杂,他之所以不太好学原因就在于他自带的方法太多,加上很多的效果都是需要方法之间的相互配合使用,所以难度和复杂度就直接升高了很多,它不像html的其他标签一样,比如p、span等都只是自带了一些样
何处锦绣不灰堆
2022/05/31
3550
我希望按照我的思路尽可能将canvas基础讲明白
相关推荐
canvas绘制闹钟-方法2 原
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文