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
 请注意屏幕
 给大家一个小提示
 好这节课就讲到这里了
 谢谢各位再见