Vídeo: Exercício Python #059 - Criando um Menu de Opções 2024
As sub-rotinas PBASIC são inestimáveis em seus projetos eletrônicos usando um processador BASIC Stamp. A sub-rotina é uma seção de um programa que pode ser chamado a partir de qualquer local do programa. Quando a sub-rotina terminar, o controle do programa volta para o local a partir do qual a sub-rotina foi chamada.
As sub-rotinas são úteis porque permitem que você separe longas partes do seu programa do loop principal do programa, o que simplifica o ciclo do programa principal para facilitar a compreensão. Outro benefício das sub-rotinas é que eles podem tornar o seu programa menor.
Suponha que você esteja escrevendo um programa que precisa realizar cálculos complicados várias vezes. Se você colocar o cálculo complicado em uma sub-rotina, você pode chamar a sub-rotina de vários lugares do programa. Dessa forma, você escreve o código que executa o cálculo complicado apenas uma vez.
Para criar e usar sub-rotinas, você precisa usar dois comandos PBASIC. O primeiro é GOSUB, que chama a sub-rotina. Você geralmente usa o comando GOSUB dentro do loop principal do seu programa sempre que quiser chamar a sub-rotina. O segundo comando é RETURN, que é sempre o último comando na sub-rotina.
Para criar uma sub-rotina, você começa com um rótulo e termina com um comando RETURN. Entre eles, você escreve qualquer comando que você deseja executar quando a sub-rotina é chamada.
Aqui está um exemplo de uma sub-rotina que gera um número aleatório entre 1 e 999 e salva-o em uma variável chamada Rnd:
GetRandom: RANDOM Rnd Rnd = Rnd // 999 + 1 RETURN
Para chamar esta sub-rotina, você simplesmente usaria um comando GOSUB como este:
GOSUB GetRandom
Este comando GOSUB transfere o controle para o rótulo GetRandom. Então, quando a sub-rotina GetRandom atinge o comando RETURN, o controle salta de volta ao comando imediatamente após o comando GOSUB.
Aqui está um programa completo que usa uma sub-rotina para obter um número aleatório entre 1 e 1 000, e usa o número aleatório para que o LED do pino 0 pisque em intervalos aleatórios. Você pode executar este programa em qualquer circuito Basic Stamp que tenha um LED no pino 0.
'LED Blinker Program' Doug Lowe '10 de julho de 2011 "Este programa pisca o LED no pino 0 aleatoriamente.' {$ STAMP BS2} '{$ PBASIC 2. 5} Rnd VAR Word Led1 PIN 0 DO GOSUB GetRandom HIGH Led1 PAUSE Rnd BAIXO Led1 PAUSE 100 LOOP GetRandom: RANDOM Rnd Rnd = Rnd // 999 + 1 RETORNO
Quando você usa uma sub-rotina, é vital que você impede que seu programa acidentalmente "caia" em sua sub-rotina e executando-a quando você não pretendia que fosse executado.Por exemplo, suponha que o programa no Listagem 3-5 usou um loop FOR-NEXT em vez de um loop DO porque você queria piscar o LED apenas 100 vezes. Aqui está um exemplo de como não escreve esse programa:
FOR Counter = 1 TO 100 GOSUB GetRandom HIGH Led1 PAUSE Rnd BAIXO Led1 PAUSE 100 PRÓXIMO GetRandom: RANDOM Rnd Rnd = Rnd // 999 + 1 RETORNO
Você vê o porquê? Depois que o loop FOR-NEXT piscar o LED 100 vezes, o programa continuará com o próximo comando após o loop FOR-NEXT, que é a sub-rotina!
Para evitar que isso aconteça, você pode usar outro comando PBASIC, END, que simplesmente diz ao BASIC Stamp que você chegou ao final do seu programa, então ele deve parar de executar comandos. Você colocaria o comando END depois do comando NEXT, assim:
FOR Counter = 1 TO 100 GOSUB GetRandom HIGH Led1 PAUSE Rnd BAIXO Led1 PAUSE 100 NEXT END GetRandom: RANDOM Rnd Rnd = Rnd // 999 + 1 RETURN > Então, o programa irá parar depois que o ciclo FOR-NEXT terminar.