arduino程序-变量操作(基础知识)
- 1-7 arduino程序-变量操作
- 太极创客网站类型资料
- 变量类型范围超过上限会从下限开始
- 长整型变量
- 作用域(全局变量,局部变量)
- 全局变量
- 局部变量
- 最后作业
1-7 arduino程序-变量操作
大家好这节课呢
我们一起来学习
Arduino变量的基本操作
通过这节课呢
您将学会如何在程序里
对变量呢进行一些基本的运算
接下来呢我会给大家介绍
Arduino的变量类型这个概念
最后呢我会给大家介绍一下关于
Arduino的变量
他的作用域
请打开 blink
实力程序
啊首先
我们对上一节课内容
进行一个简单的回顾好
上一节课里我们学到了如何
在程序里面创建一个
变量
并且
我们学习了如何对这个变量进行赋值
同时呢
我们学习了如何将这个变量应用到
程序中去
让程序根据我们的意愿来执行
在这节课里面呢
我们来一起来学习更多的关于
变量的知识
那么首先呢我来敲一段语句
请大家随着我敲这段语句的 呢
跟着我一起思考一下
啊这段语句它的含义
等我敲完以后我给大家做一个解释
好首先我们敲入
变量的名字 delaytime
然后我们敲这个
复制运算符等号
我们再敲一遍
这个变量的名字
然后我们加
输入一个加号
再输入
1,000最后我们用分号结束这段语句
接下来
我给大家解释下这条语句的含义
啊要解释这条语句呢
我们先要从程序的开头说起
我们知道每一次给arduino通电以后呢
这时候呢
啊他的第一件事就是执行这条语句
也就是说他会建了一个变量
这时候这个变量是等于3,000的
一定记住
这个时候电电量是等于3,000的好
那么接下来呢
耳边呢呢就要执行setup函数
我们看到在setup函数这个内容呢
没有提及关于这个函数的内容
那么这个时候arduino呢
是不会对这个变量
做任何变化
比如在这个过程中
迪丽炭依然等于3,000
好执行完在他函数以后呢
这是耳律呢
就开始进入到 loop 这个函数
好当他进入 loop 函数以后
那么他做的第一件事情是什么呢
就是执行这条语句好
现在他看到 delete 有
改变数值了
怎么改变呢
还记得叠他们现在等于多少吗
叠他们这个时候等于是3,000
那么这句句翻译成
另外一个含义呢
我给大家敲出来是什么呢
比如我们要告诉arduino
你
要改变你这个 delaytime 的数值了
你要改变成什么样子呢
也就是
改变成我现在在屏幕上敲的这个样子
为什么呢
因为这时候 dime 是等于3,000的
那么我们这条语句
实际的含义是什么呢
实际是告诉arduino
你要变成
3,000加1,000
也就是变成4,000了
那到这呢你可能会问我
呃你干嘛还那么麻烦
嗯写个4,000不就完了吗
何必要写这么长一段话呢
好你要是这么想的话呢
我要给你点一个大大的赞
为什么呢因为您在跟我一起思考好
我来给你解释一下吧
这两条语句
对arduino来说他们是完全不同的
为什么呢
我们一句一句说
让我们先把这条语句
让他先下场休息一会
ok 让
这套语句
保留在程序中
我们知道呢arduino
在运行loop函数的时候
他是逐条运行逐条运行
一条一条运行到最后一句的时候
他会返回到第一条
再次执行这条渔具
我们看到在这整个过程中
这个delaytime
一直保持在4,000这个数值
请记住在这种状态下
迪丽炭一直跑保持在4,000这个数值
好那么接下来我们把这条语句
让他下场休息一下
我们再请回刚才
我们让他休息的这条语句
让我们来看一下
这个时候程序的运行状态
啊我们记得啊
当arduino要进入到loop函数的时候
这时候呢delaytime只等于3,000呢
我们执行制完这条语句以后
delaytime等于31,000加11,000也等于41,000
为了便于大家学习
我在这里做一个小笔记
ok 这时候我们
我们的迪丽炭
等于41,000
好那么尔律诺继续往下执行
执行完
这条语句以后他又要返回到这里来了
返回到这里的时候呢
我们知道delaytime是等于4,000
那么在
这一次的时候
delaytime他要做一个再次的复值
那么这时候delaytime的变量值呢
是等于4,000加上1,000
那么delaytime也就变成什么呢
也就变成了
5,000了那么继续执行
执行到这一句
delaytime等于5,000
完成以后他又回到这一句来了
那么这个时候呢
我们知道底力碳等于什么呢
等于5,000好
那么5,000
加1,000
执行完这条语句以后
给他们等于多少呢
就变成了5,000在一边变变成了6,000了
怎么样大家看出区别来了吗
就这样反复执行反复执行
每执行一次
底雷泰姆都会产生一次变化
也就是他都会做一次
增加1,000的一次运算
那么这个时候呢
delaytime就不再是保持
恒定的一个数值
而是产生了变化了
那也许会问我
如果这样arduino每运行一次
他都要啊增加1,000
那这么着一直运行下去
岂不是这个数字就会变得无穷
无尽的大了吗
其实我也
很希望arduino有这么强的运算能力
但是很遗憾的是
这个世界上不存在任何一个电子设备
他能够存储无穷无尽大的数字
这个话题就扯远了
让我们把我们的思绪扯回来
ok 转回到哪了
转回到我们这个程序的最开始
这个地方
还记得
我们每一次创建一个变量的时候
我们要做的第一事情是什么呢
我们要做的第一个事情是告诉arduino
这个变量他的类型是什么
我们知道变量呢
是存储在arduino的内存里面的
那么arduino的内存
肯定是有一个上限的
那么这就是为什么
呃arduino
他不可能存出一个无穷无尽大的
呃数值也就是说
我们在每次创建一个变量的时候
我们都要告诉arduino这个变量
他是什么类型的
而这个工作的目的是什么呢
就是要告诉arduino
你在你内存里边
你给我预先留一个空间
这个空间大小
就是我要放这个数值的大小
那么我们怎么能判断我们这个
呃arduino的这个数值空间是多大呢
我们要根据我们实际程序里面
要用的这个变量
他可能达到最大值的极限状态下
他可能会多大
那么在这个
根据这个情况我们再来判断
究竟给这个变量什么样的类型
太极创客网站类型资料
我们知道 int 类型代表的是整形变量那么整形变量
他能所代表的数值的范围是多少呢
嗯我在这想不太出来了
啊其实诚心想不起来的
打个小广告
如果您以后在写程序
写arduino 程序的时候如果有一些啊
什么技术上的一些细节性的东西
记不太清了
您可以到我们太极创客的网站来
我们太极创客网站里面呢
有对arduino编程的一些
啊参考性的一些资料
那么如果要是想
查一查每一种数据类型
他所代表的数值范围是多少
可以来到这里数据类型这里我们找
刚才我们要想查一下整形
这个数据类型
他的
啊点亮范围我们点进去看一下哈 ok
请看这里说明
啊找找整数的范围
为
-三万两千七百六十八到
正32,767
好那我们再回到刚才那个程序
我们再来看一下
变量类型范围超过上限会从下限开始
好刚才我们说到delaytime这个变量
那么他在每执行一次以后
他要增加增加增加
增加到最大值的时候
他最多也就只能增加到
32,767
这个数字
他不能再超过这个数字了
如果要是到了这个数字的上线以后
我们还在对他进行增加
这样的运算结果会是怎么样的呢
结果会是让这个delaytime这个数据
返回到他的
从最上限
返回到他的最下限
也就是说
我们如果对
delaytime这个数字
啊这个数值
我们再给他增加增加增加
增加到超超过20,000
那32,767的时候
他就会返回到哪呢
返回到负的32,768
然后再加加加加加
一直再
加到32,767的时候
在超过这个数值
这时候他又返回到这个数值了
相反的如果我们对一个数值
如果我们对他不断的再去减
如果他减的超出了他下限的话
他又会返回到他的最上限去
这就好像我们玩那个吃豆似的
你知道有吃豆的那个
在有个通道他从屏幕的右边
出去以后他就会从屏幕的左边进来
这感觉很像是那个吃豆的那个状态
这时候你也许会说了那我要是
呃我的一个数值特别大
长整型变量
我要超过3万多怎么办呢
好没问题
我们还回到
变成参考资料这个页面呢我们看
在这呢我们列出了所有
而对 no 的数据类型
其中呢
啊整形是我们学过的一种类型
我们再看有没有比他长的呢
ok 这是一个长整形
感觉好像听名字像比较长的哈
确实他比整
形长能代表的数字要大
我们点进去看一下啊
ok 我们前面先不去管
我们看到树枝从负的多上的就是哎呦
天呐天呐天呐天呐
反正是复制一个很大的数字
到正的什么
也是一个挣了很大的一个数字
那讲到这呢也许你还会问我
那我们就都把这些
啊所有的程序里面的变量
我们就都给他一个
最大的一个数据类型
不就完了
干嘛还什么长整形还整形呢
这就涉及到我们写程序的时候
我们要考虑
实际我们这个编程的对象的状态
我们要我们知道
我们现在学的是什么呢
是给arduino
他的内存是很有限的
那么
如果我们把所有的数据变量都给他
一个很大的数据类型
事实上
这是对arduino内存那个很大的浪费
也有的时候我们可能程序还没写完呢
内存不够了
这就是为什么我们要根据实际情况
对这个病量进行一个啊
定义因为我们这个程序呢
纯粹是为了教学使用
所以我们这个变量呢
我们没有一个特别实际的含义
我们现在试想一下
假如我们要是给一个
啊变量这个变量他是温度
是我们家庭里边的温度
那么想一想
其实给他一个整数类型就足够了
因为不可能
我们家里温度能达到32,000多度
那是挺可怕一件事情
换句话说他也不可能
达到负的32,000多度
那所以这个整形变量
呃他是足够使用的了
但是如果我们要是比如说我们要统计
统计一个什么中华人民共和国人口
那这个时候我们要给32,000多
呀这个就肯定是太小了
那么这个时候我们就要给他一个
大一点的变量
换句话说
我们在写程序的时候
我们在建立一个变量的时候
我们要根据这个变量
他实际可能会
啊需要多大或者多小
然后我们再根据他这个需求
那再给他变量类型
这样做目的呢
说白了就是为了
能够让内存很有效的利用
作用域(全局变量,局部变量)
这节课讲到这呢
您可能会觉得
变量基本上我们就学的差不多了吧
我告诉您您错了
我们还有一个非常重要的一个变量
知识点我们还没有学到
而这个这边这个知识点
他的重要性
不亚于我们目前已经学到了这些知识
他是什么呢
就是变量的作用欲
天呐作用欲哈哈哈
不用紧张
其实这个理这个道理很简单
那我来给大家讲一下
什么是变量的作用欲哈
我们学到这里以后
我不知道你有没有好奇
我们为什么要把
啊建立变量这个过程写在程序最开始
而且是所有的函数的外面
括号的外面
那么如果我们要把这个呃这个变量
我们把它
起到一个函数的里面
为什么样的结果呢
我告诉你这会产生大大的不同
为什么呢
嗯
所有的变量都有他的一个工作范围
也就是说当我们把一个变量
我们在建立他的时候
如果我们
把这个变量建立在某一个函数
我们现在看到这是setup这函数的里面的时候
那么这个变量
只允许在这个函数内部使用
如果我们到别的函数里面
还要使用这个变量
比如我们现在在录盘数里面
我们要使delaytime
而这个delaytime
他是在setup函数里面建立的
我们试试看
如果我们变异会有什么结果呢
哦
好吧出错了为什么呢
我看
delay time was not declared
in this scope
我们这句话说白了是什么呢
您这个变量
没有在应有的范围里边进行一个定义
换句话说
我们这个变量
in delay time
和
这个迪丽泰们在使用的时候
他是跨越了两个哈不同的函数
那么在这个时候
这个迪丽泰
他呢也就会产生了一个错误
全局变量
那么我们调整一下我们再把它放回到
两个函数的外面
这个时候呢我们再来
编一下那么这种这一次呢我们看到
呃计算机程序就没有再报错了
为什么呢
因为我们把这个
函数他的建立过程放到了整个程序
所有函数
记住整个程序所有函数
只有两个函数
那么他是建立在这两个函数外面的
这种建立在外面的
变量他有一个特殊的名字
他叫什么呢
他叫做全局变量
换句话说这种变量
他是可以在任何一个函数里面使用的
我们做一个实验
现在我们如果把
这个变量他的创建过程
现在在外面我们如果要是在 set up
我要用的
比如说我们给在他
这个函数增加一个
新的语句我们告诉他
Delaytime等于4,000
那么同时呢我们这边Delaytime呢
在loop这边也用到
他在两个函数都有用到
我们再进行一下编译编译
ok 我们看一下好这次就没有错误了
局部变量
相对应的话呢我们刚才
试着把这个变量
我们把它放到setup函数里面了
那么现在在这种情况下
这个
迪丽炭这个变量是只能应用于
在他这个函数里面的
如果要是在别的地方他就会爆错
那么在这种状态下
这个变量
他的学名叫什么呢
请注意他的学名叫做
局部变量
也就是顾名思义了
就是他只能在这个函数的局部
内部使用
如果超出这个函数范围
那么他就会啊
报错了那么试想一下
假如说我们有在这我们建立一个
点亮他名叫 delaytime
3,000我们同时我们在
Loop函数里边
我们又给他建立了一个变量
同名同姓的双胞胎都叫
delaytime我们这次给他1,000吧
好吧
Ok
那么现在我们看到有两个一模一样
名字的
两个点亮分别一个是在setup函数里边
一个是在六盘数里边
如果这种情况下我们如果
这些进行变异的时候
结果会是什么样的呢
哎没有问题是通过的
为什么呢
因为我们这两个变量
都是在自己不同的这个函数范围内
所定义的
但是这样的状态下
这两个变量请注意这两个变量
他们虽然名字相同
事实上他们没有任何关联
虽然他们的名字是一样的
但是他们是完全不同的两个变量
也就是说对于尔滨诺来说
这个变量
和这个变量
他们是完全不同的两个变量
尽管他们有同样的名字
但是他们的
因为他们的作用与范围不同
所以他们是不了两个不同的变量
请记住这一点
另外请注意呢
我刚刚在两个不同的函数里面
给
两个不同的变量
用相同的名字来起名
这种做法只是为了呃教学使用
那么实际上我们在
真正编程的过程中尽量不要这么做
这么做的话会把自己搞糊涂的
除非犯不得已
否则否则尽量不要这么做好吧
最后作业
那这节课到这里呢就快要结束了
最后呢我给大家留一个
实际操作的一个小作业
啊我们这节课提到了很多种数
不同的数据类型
我们呃提到了关于
整数型和长整型这两种
这两种数据类型
请大家呢
如果有时间的话
来到我们太极上课的网站
你们来观察一下
我们有这么多种不同的数据类型
请仔细看一看
每一种数据类型代表什么
我在这想说一下就是目
前我们
啊只学了关于代表数字的这几
几种数字类型
那么有的比如说像是字符型
这一个
字符型的
还有比如说像字符串形
还有像这种数组类型的
目前呢我们是还没有学到的
其他的呢
目前我们基本上已经学到
而且还有这种
voted 空型的
你现在我们还没有提到
虽然我们已经见过了
但我们还没有提到
那么说白了就是说
刚才提到这几种类型以外
其他类型请大家留意一下
比如像呃福典型
或者说像双精度伏点性
他们能代表的数值范围是什么样子的
还有一点就是我给大家留一个小
思考题也会让大家小寻宝宝
如果我们现在要表示一个小数的话
我们用哪一种数据类型
目前我们所讲到的都是整数类型的
数字那么如果我们要是一个小数
3.14派这个数字
那么用哪种数据类型呢
我给大家一个
给大家一个小提示float
请注意屏幕
给大家一个小提示
好这节课就讲到这里了
谢谢各位再见