• 沒有找到結果。

任务3:如何保存数值和计数

在文檔中 基础机器人制作与编程 (頁 24-27)

在任务2中,你已经知道如何使用循环语句让微控制器不断产生零点标定信号。当然,你在编 写某个程序时,肯定并不总是需要机器人永远执行同一个操作或者说任务,而只希望它执行一段指 定的时间或者执行一些固定的次数。这时,你就要在PBASIC 程序中用于到变量。

变量用来保存数值。后面的机器人程序很大程度上都要依赖使用变量。用变量保存数值的最主 要的作用就是程序能用这些变量来计数。一旦你的程序能计数,你就能控制和跟踪事件发生的次数。

用变量存储数值,数学运算和计数

变量可以用来储存数值。PBASIC语言在使用一个变量之前,要先给该变量起一个名字,并说

基础机器人制作与编程 明该变量的大小类型。这叫声明一个变量。声明一个变量的PBASIC语法如下:

variableName VAR Size

实际声明变量时,你用你自己起的名字代替variableName,Size用来说明变量的大小类型,

PBASIC程序中可以声明的变量类型如下:

Bit — 存储0或者1;

Bib — 用来存储0到15之间的任意数值;

Byte — 用来存储0到255之间的任意数值;

Word — 用来存储0到65535之间的任意数值,或者-32768到32767之间的任意数值。

注意:为何有上述特定的变量类型大小呢?请参考二进制的说明。

下面的例程包含两个“word”大小的变量:

value VAR Word

anotherValue VAR Word

在声明变量之后,你也可以对它初始化,即给它一个初始值。

value = 500

anotherValue = 2000

在“value = 500”中,符号“=”是个运算符。你可以利用其它一些运算符和变量进行数学运 算。在这里有两个乘法运算的例子:

value = 10 * value

anotherValue = 2 * value 程序示例: VariablesAndSimpleMath.bs2

这个例程演示了如何对变量进行声明、初始化和运算。

z 在运行程序之前,对DEBUG指令要显示的内容进行预测。

z 输入、保存并运行程序VariablesAndSimpleMath.bs2。

z 和你的预测进行对比,解释所有的不相同的原因。

' VariablesAndSimpleMath.bs2

' Declare variables and use them to solve a few arithmetic problems.

' {$STAMP BS2}

' {$PBASIC 2.5}

value VAR Word ' Declare variables anotherValue VAR Word

value = 500 ' Initialize variables anotherValue = 2000

DEBUG ? value ' Display values DEBUG ? anotherValue

value = 10 * anotherValue ' Perform operations DEBUG ? value ' Display values again

DEBUG ? anotherValue END

程序VariablesAndSimpleMath.bs2是如何工作的

下面的代码定义了两个字变量:value 和 anotherValue。

value VAR Word ' Declare variables anotherValue VAR Word

然后,初始化变量,即给刚刚声明的变量赋上你决定的初始值。这两条指令执行后,value的 值是500,anotherValue的值是2000。

基础机器人制作与编程 value = 500 ' Initialize variables

anotherValue = 2000

随后的DEBUG指令帮助你了解初始化变量后每个变量存储的数值,因为给value赋值是500,

anotherValue赋值2000,因此DEBUG指令向调试终端发送信息:“value = 500” 和 “anotherValue

= 2000”并显示。

DEBUG ? value ' Display values DEBUG ? anotherValue

这里又新引入了一个DEBUG指令的格式说明字符“?”,该格式说明字符用在一个变量名之 前,使DEBUG终端显示其名称,以及存储在该变量中的数值,然后回车。这样对于查询一个变量 的内容非常方便。

下面三行的疑问是:调试终端将显示什么?答案是value的值是anotherValue的10倍,因为 anotherValue的值是2000,那么value就是20000,而变量anotherValue不变。.

value = 10 * anotherValue ' Perform operations DEBUG ? value ' Display values again

DEBUG ? anotherValue 该你了――用负数计算

如果你想做一些包含负数的计算,你可以使用DEBUG指令的SDEC格式说明来显示。下面的 例子能通过修改程序VariablesAndSimpleMath.bs2得到。

z 删除程序VariablesAndSimpleMath.bs2的下面部分:

value = 10 * anotherValue ' Perform operations DEBUG ? value ' Display values again

z 改成如下代码:

value = value - anotherValue ' Answer = -1500

DEBUG "value = ", SDEC value, CR ' Display values again z 运行更改后的程序并验证value的值是否由500变为-1500。

计数并控制循环次数

最方便的控制一段代码执行次数的方法是利用FOR…NEXT循环,语法如下:

FOR Counter = StartValue TO EndValue {STEP StepValue} … NEXT

省略号“…”表示你可以在FOR 和NEXT之间放一条或多条的程序指令。使用前面的循环前 要确保先声明一个变量替代参数Counter。参数StartValue 和EndValue可以是数值也可以是变 量。语法描述中位于大括号{ }之间的东西,表示是可选参数。换句话说,没有它FOR…NEXT仍将 工作,但是你可以将之用于一些特殊目的。

你没有必要一定要将变量命名为“counter”,例如,你可以用“myCounter”

myCounter VAR Word

下面是一个用myCounter来计数的FOR…NEXT循环例程。每执行一次循环,它会显示 myCounter的值。

例程: CountToTen.bs2

z 输入、保存并运行程序CountToTen.bs2。

' CountToTen.bs2

' Use a variable in a FOR...NEXT loop.

' {$STAMP BS2}

' {$PBASIC 2.5}

myCounter VAR Word FOR myCounter = 1 TO 10

基础机器人制作与编程 DEBUG ? myCounter

PAUSE 500 NEXT

DEBUG CR, "All done!"

END

该你了――不同的初始值和终值以及计数步长 你可以给变量StartValue 和EndValue 赋不同的值 z 修改FOR…NEXT循环如下:

FOR myCounter = 21 TO 9 DEBUG ? myCounter PAUSE 500

NEXT

z 运行修改后的程序。BASIC Stamp往下计数代替了往上计数,你注意到了吗?只要 StartValue的值大于EndValue,程序就会这样运行。

还记得可选参数{STEP StepValue}吗? 你可以用它来使myCounter以不同步长计数,而不是 按9, 10, 11…这样每次增1来计数。例如,你可以让它每次增加2(9, 11,13…)或增加5 (10, 15, 20…) 或任何你给出的StepValue,递增或递减都可以。下面的例子是以3为步长向下计数。

z 增加STEP 3到FOR…NEXT循环,如下所示:

FOR myCounter = 21 TO 9 STEP 3 DEBUG ? myCounter

PAUSE 500 NEXT

z 运行更改后的程序,验证是否以3为步长递减。

在文檔中 基础机器人制作与编程 (頁 24-27)