美文网首页16级创客教育理论与实践
ardinuo分享-04-的数学函数和时间函数

ardinuo分享-04-的数学函数和时间函数

作者: 樊文静0215 | 来源:发表于2018-11-26 22:30 被阅读3次

    一、时间函数

    (一)delay()函数

      1.delay()函数简介

    描述:将程序暂停给定参数的时间量(以毫秒为单位)

    函数原型:delay(ms)

    参数:ms - 暂停的毫秒数

    返回值:无

          2.什么是函数?

          Delay()函数是常用的时间函数之一,当程序运行到delay这一行时,会暂停一段时间,暂停的时间据取决于括号中的数字了,例如,delay(100),则函数会暂停100ms之后继续往下执行,delay(200)则会在200ms之后继续执行,但这个总不是那么的准确,与我们所用的CPU,各种软硬件的参数密切相关,切记不要用它进行太过精密的计算,他的选择或是根据一遍遍测验得到的,有些经验丰富的人凭经验就可大体估计出他的数值。

        3.延时函数的作用

        或许有的人会问,为什么我们要使用延迟函数,而且就延迟了或许不到一秒钟,这不是增加了指令的响应时间么?猜想一下代码的读取速度和人的反应速度,这个差别不是十几二十倍的关系,举个单片机的例子,我们都知道单片机的处理速度是很快的,有的时候为了让我们便于观察需要加入延时,例如一个指示灯的亮灭,如果不加入延时是看不出来的,再有就是键盘去抖动,一般按键都有20ms左右的抖动,为了更好的检测防止干扰,也需要延时一段时间在进行判断,否则键盘的抖动会影响我们的检测结果,总之延时的作用在不同的情况下也不同。

          4.Delay()函数在arduino函数中的应用

          在之前的Blink程序中,我们通过使用延时函数,使LED按一定频率闪烁。Arduino提供了毫秒级和微秒级两种延时函数。运行延时函数时,会等待指定的时间,再运行此后的程序,我们可以通过参数设定延时时间。以下就是延时函数在arduino函数中的应用,延时函数就是为了使观测效果更明显。

    图 1 LED灯闪烁 图 2 判断按钮的按下状态 图 3 LED渐变色

    (二)millis()函数

      1、millis()函数简介

    描述:返回自Arduino板开始运行当前程序以来的毫秒数。大约50天后,此数字将溢出(回到零)

    语法: time = millis()

    参数:无

    返回值:程序启动后的毫秒数(unsigned long 类型)

      2.什么是millis()函数?

        millis在英语中解释为微秒,millis()函数会返回一个值,这个值代表的是当前cpu的时间,单位为微秒,举个例子long begintime=mills();  endtime=mills();然后用endtime的值减去begintime的值就能算出时间差,这样可以用来定时,也可以不用占用cpu时间,所以当写的程序比较长时,这个函数很有用。而且我们身边也有很多使用million函数的例子啊,我们都知道,在电脑中我们可以使用左右键来实现不同的操作,然而在手机中我们并没有左右键,手机没办法判断我们是用左手进行操作还是右手进行操作,这时候,millis函数就发挥其作用了,他通过判断人手按屏幕时间的长短来执行不同的操作,按屏幕时间的长短便是通过millis函数来计算的,还记得以前的按键手机,长按“#”键解锁,不知道你们能否想起这样的例子来呢。

        3.millis()函数和delay()函数的区别

        上文中我们主要介绍的是millis() 函数作为定时器的用处,我们都知道delay()函数一个主要的作用就是延时,然而这个功能也被millis()函数窃取到了,millis()函数可以替代delay()函数,实现其延时功能,而且milis()函数在用作延时函数时可以在每次延迟中加入自定义逻辑,在每次延迟的过程中完成多个操作。

    图 4 红外设备的响应

      4.millis()函数在ardinuo中的应用


    二、数学函数

          数学函数的掌握比较的简单,他们在程序开头均需加上#include<math.h>,min()函数、max()函数、abs()函数、三角函数和我们数学上接触的并无区别,我大致粗略的讲解一下,主要给大家介绍的是map()函数和constrain()函数。


        (一)map()函数

      1、map()函数简介:

    描述:将数字从一个范围重新映射到另一个范围。

    函数原型:map(value, fromLow, fromHigh, toLow, toHigh)

    参数:

    value:要映射的数

    fromLow:当前值范围的下限

    fromHigh:当前值范围的下限

    toLow:目标值范围的下限

    toHigh:目标值范围的上限

    返回值:映射后的值


        2.map()函数的应用

        Map在英文中解释为地图,那么map()函数就应该具有地图的一些性质,即一对一,在map()函数中输入一个值,那么就会输出唯一的一个值。Map函数有五个参数,其中第一个值是我们输入的值,第二个参数和第三个参数是可输入的第一个参数的范围,第四五个参数则是我们将要映射的值的范围,如果我们不想限制值得范围,也可以不用填写值得范围,因为有时候我们需要的值不在规定的区间内。map()函数使用整型数进行运算因此不会产生分数。小数的余数部分会被舍去,不会四舍五入或者平均。


        3.map()函数在ardinuo中的应用

        如图所示是一个Arduino 温度传感器NTC测温的代码片段,因为前一个代码的AD值飘得厉害,所以温度值也就飘,这次的代码尝试调整线性函数和映射AD值,从2^10位降到8位、7位测试其稳定性。而这一功能的实现就是依赖于map()函数,图中标黄的部分就是我们的map()函数。当出现的值的范围太小或者太大以至于我们操作很难进行下去的时候,map()函数就发挥其作用啦。

                                            图 5 arduino 温度传感器NTC测温


      (二)constrain()函数

        1、constrain()函数简介

    描述:将数字约束在一个范围内。如果此数小于该区间的最小值则返回最小值,若在此区间内则显示该值,若大于该区间的最大值则显示最大值。

    函数原型:constrain(x, a, b)

    参数:

            x:要约束的数字

            a:范围的下限

              b:范围的上限

    返回值:

                如果 x 在(a, b) 范围内:返回 x

                如果 x 小于 a:返回 a

                  如果 x 大于 b:返回 b


        2.什么是constrain()函数

        Constrain是强制、限制的意思,他就是为了把某些东西限制在一定范围内,他作为数学函数,那么自然也不例外了,我们可以轻而易举的推理出它的作用就是把数限制在一定范围内,举个例子吧,假如你是一位老师在批改学生的卷子,一个学生卷面整洁,解题正确详细,在你心里已经远远超过100分了,但是呢,满分就是100分,所以你只能给予他最高分,相反一个同学不写卷子还乱涂乱花,纵然你很气愤,但你的理智告诉你,你只能给他打最低分0分。Constrain()函数在程序中的作用就相当我们的理智,不能计算机给我们什么数我们就输出什么数,计算机也要有自己的判断和思考,而constrain()函数的作用就是计算机的判断依据。


        3.constrain()函数的应用

        如图所示是根据RGB值来改变LED灯的代码,通过这种方式,如果发来的值超过了PWM的允许值,也能够正常执行。 这些值还要用255减一下,以适配共阳RGB LED,作差后才是在0时LED关闭,在255时LED打开。在约束和数学运算完成后,RGB LED内的三个小LED就能够工作了。

    图 6 改变LED灯亮度

        (三) min()函数、max()函数

        Min()函数和max()函数看起来很简单,但在输入参数的时候要注意相比较的参数类型需要是相同的,min(a,b)的值等于a、b两者之间的最小值,max(a,b)则等于两者之间的最大值,代码实例如图所示:


        (四)  abs()函数

        Abs(x)函数就是一个绝对值的求值运算,其思想很简单,就是我们小学学的那种|5|=5,|-5|=5这种简单的运算,调用他的方式有两种,一种是直接在函数中定义y=abs(x),当我们在程序中对这个函数调用较少,而且计算很简单时,我们可以直接定义,这个方法简单易学:而第二方法是在头文件中定义,这个就比较困难而且有点难度,我们必须要注意括号的运用,下图中我就用两个abs()函数,来区分一下他们的区别。

        对于abs1(x)来说,如果函数式子如图所示。Test(abs1(-1)+2),则先判断x是否小于零,当x小于零时,直接就为-x了,当x大于零时,才会+2,原程序就相当于abs1(x) (x<0)? -x:x+2;对于abs2(x)来说,函数相当于((x<0)? -(x+2):x+2)。


        (五)  三角函数

        三角函数包括sin(rad)、cos(rad)、tan(rad),分别返回rad的正弦值、余弦值、正切值。这个函数大家应该都不陌生,想必学过三角函数的人都不陌生这个函数9的应用吧,他的用法和数学函数的用法一样,只不过写到了计算机内部,方便我们进行快速准确的运算,下面就是一个三角函数的例子。

    相关文章

      网友评论

        本文标题:ardinuo分享-04-的数学函数和时间函数

        本文链接:https://www.haomeiwen.com/subject/mzgiqqtx.html