Beruflich Dokumente
Kultur Dokumente
Prof. Reinaldo Bianchi Prof. Paulo Santos Centro Universitrio da FEI 2010
1a. Aula
Programao real de um rob mvel. Breve introduo a programao NQC para robs LEGO. Resultado esperado:
Rob seguidor de pista reta ao final da aula.
Baseado em:
Aula do professor Paulo Santos. Programming Lego Robots, de Mark Overmars.
Trs sensores:
1 e 3 so de luz (SENSOR_LIGHT) 2 de toque (SENSOR_TOUCH)
Dois motores:
A e C (sada B no utilizada!!)
O Rob usado
O rob usado
Sensor 3 Sensor 1 S1 S3
outA
outC
CPU do rob. Permite at 5 programas armazenados na memria. Permite visualizar sensores. Controla motores.
Liga/desliga
Executa/para programa
NQC uma linguagem de programao desenvolvida por Dave Baum especialmente para robs LEGO. No entre em pnico se voc nunca programou!
Subconjunto de Linguagem C. NQC fcil de usar. Programar um rob em NQC muito mais fcil do que programar um computador.
Entradas e Sadas
Todo controle do rob realizado sobre 3 entradas e 3 sadas. OUT_A, OUT_B e OUT_C:
So as 3 sadas de controle do rob.
OnFwd(OUT_A);
Inicia a sada A Se um motor estiver conectado a porta A, ele ser ligado no sentido direto com mxima velocidade.
OnRev(OUT_A+OUT_C);
Reverte as sadas A e C. Se existirem motores ligados a estas sadas, eles sero acionados no sentido reverso com mxima velocidade.
Off(OUT_A+OUT_C);
Desliga os motores.
SetPower(motor, fora).
A fora um nmero inteiro entre 0 e 7:
7 o mais rpido. 0 o mais lento, mas ainda com movimento.
Comando wait
O comando wait faz com que a tarefa pare por um determinado tempo, dado em centsimos de segundos. Wait(400);
Note que as sadas so mantidas no mesmo estado pelo tempo em que a espera durar.
Exemplo 1
Definindo um sensor
Sensor de toque
until
Sensor de luz
Na prtica:
< 30 preto > 50 branco
Expresses e variveis
Expresses
Expresses avaliam (computam) o valor de uma seqncia de variveis, valores, operadores e chamada de mtodos. Exemplos:
2 2*4 a=3 5+2*3a
Variveis
Local onde as informaes so armazenadas dentro de um programa. Uma varivel tem este nome porque o seu valor pode mudar durante a execuo do programa. Cada varivel possui um tipo que define que tipos de valores ela capaz de armazenar
Declarao de variveis
Para ser utilizada, uma varivel deve ser primeiro declarada Declarar uma varivel significa criar um local para armazenar o seu valor Declarao em Java:
int numDeSinalizadores = 0;
Valor Inicial
Variveis
task main() { int move_time, turn_time; move_time = 20; turn_time = 85; OnFwd(OUT_A+OUT_C); Wait(move_time); OnRev(OUT_C); Wait(TURN_TIME); OnFwd(OUT_A+OUT_C); Wait(move_time); Off(OUT_A+OUT_C); }
NQC possui comandos de controle de fluxo iguais as linguagens procedimentais convencionais, como linguagem C ou Pascal:
if... else while do ... while repeat ... until e outras.
Comandos de Deciso
Para resolver a maioria dos problemas necessrio decidir-se entre a execuo de uma instruo ou outra. Os comandos de deciso permitem especificar uma condio que se for verdadeira levar execuo de um determinado bloco de programa.
Operadores
Aritmticos:
+ - * / % ++ -& (and) ^ (xor) (resultado numrico) (incremento/decremento) | (or) (para bits)
Operadores (II)
Atribuio:
= += -=
Operadores relacionais
A == B A igual a B? A != B A diferente de B? A<B A menor que B? A>B A maior que B? A <= B A menor ou igual a B? A >= B A maior ou igual a B? Expresses Lgicas:
&& (e), || (ou), ! (no)
If
Usado para decidir se uma instruo deve ou no ser realizada: if (expresso_booleana) { instrues; }
If ... Else
Usada para escolher entre duas instrues possveis: if (expresso_booleana){ instrues; } else { instrues; }
Exemplos If:
If:
if (SENSOR_1> 50) Off(OUT_A);
If ... else:
if (SENSOR_1> 50) Off(OUT_A); else Off(OUT_C);
Exemplo if aninhados
if (SENSOR_1> 50) Off(OUT_A); else if (SENSOR_1 < 50) Off(OUT_C); else Off(OUT_A+OUT_C);
Comandos de Repetio
repeat:
usado quando se sabe, a priori, quantas vezes deve ser realizada uma repetio
do - while ou while:
usados quando no se sabe quantas vezes deve ocorrer a repetio, apenas a condio de parada.
Repeat
repeat(<quantidade de vezes>) { <comando>; ... }
Exemplo: repeat
task main() { int move_time = 20, turn_time = 85; repeat(4) { OnFwd(OUT_A+OUT_C); Wait(move_time); OnRev(OUT_C); Wait(TURN_TIME); } Off(OUT_A+OUT_C); }
do - while
do { <comando>; ... } while (<condio de parada>);
do ... while
int move_time, turn_time, total_time; task main() { total_time = 0; move_time = 85; turn_time = 25; do { OnFwd(OUT_A+OUT_C); Wait(move_time); OnRev(OUT_C); Wait(turn_time); total_time += move_time; total_time += turn_time; } while (total_time < 2000); Off(OUT_A+OUT_C); }
while
while (<condio>) { <comando>; ... }
while
int move_time, turn_time; task main() { total_time = 0; move_time = 85; turn_time = 25; while (true) { OnFwd(OUT_A+OUT_C); Wait(move_time); OnRev(OUT_C); Wait(turn_time); } }
Macros
No cdigo do programa, <NOME> ser trocado por <VALOR>. Uso de macros uma maneira de organizar o programa e facilitar a programao.
Macros
#define turn_around OnRev(OUT_C);Wait(340);OnFwd(OUT_A+OUT_C);
task main() { OnFwd(OUT_A+OUT_C); Wait(100); turn_around; Wait(200); turn_around; Wait(100); turn_around; Off(OUT_A+OUT_C); }
Programando o LEGO
Programando o LEGO
Bricx Command Center pode ser executado em Windows (95, 98, ME, NT, 2K, XP).
Templates
COMPILE E DEPURE SEU PROGRAMA ANTES DE TEST-LO NO ROB!! Caso contrrio, voc s descobrir os erros depois de um bom tempo... Atrapalha a todos...
Fazer o rob andar em linha reta, seguindo a pista, corrigindo os eventuais desvios. Dividir a turma em equipes de 2 alunos!
Cada dupla deve fornecer um nome para a sua equipe.
Pista usada.
Ao final do curso (4 aulas), a equipe que fizer o trajeto a seguir no menor tempo ser a campe!
Exemplo bsico
Concluso
Fim