Documentos de Académico
Documentos de Profesional
Documentos de Cultura
10a. 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
outA
S3
outC
CPU do rob.
Permite at 5
programas
armazenados na
memria.
Permite visualizar
sensores.
Controla motores.
Liga/desliga
Escolhe o programa a
executar
Executa/para
programa
A linguagem NQC
(not quite C)
Exemplo 1
Entradas e Sadas
SENSOR_1, SENSOR_2 E
SENSOR_3:
So as 3 entradas de sensores 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(fora).
A fora um nmero inteiro entre 0 e 7:
7 o mais rpido.
0 o mais lento, mas ainda com movimento.
Comando wait
Definindo um sensor
Sensor de toque
O sensor mais
simples possvel
Sensor de luz
Na prtica:
< 30 preto
> 50 branco
repeat
task main()
{
repeat(4)
{
OnFwd(OUT_A+OUT_C);
Wait(MOVE_TIME);
OnRev(OUT_C);
Wait(TURN_TIME);
}
Off(OUT_A+OUT_C);
}
do ... while
int move_time, turn_time, total_time;
task main()
{
total_time = 0;
do
{
move_time = Random(100);
turn_time = Random(100);
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 e if/else
Anda e gira aleatoriamente para esquerda ou direita
#define MOVE_TIME
100
#define TURN_TIME
85
task main()
{
while(true){
OnFwd(OUT_A+OUT_C);
Wait(MOVE_TIME);
if (Random(1) == 0){
OnRev(OUT_C);
}
else{
OnRev(OUT_A);}
Wait(TURN_TIME);
}
}
Funo random
Operadores
Operadores relacionais:
= =,
!=
Operadores Booleanos:
Variveis
#define TURN_TIME
85
int move_time;
task main()
{move_time = 20;
repeat(50)
{
OnFwd(OUT_A+OUT_C);
Wait(move_time); OnRev(OUT_C);
Wait(TURN_TIME);
move_time += 5; }
Off(OUT_A+OUT_C);
}
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
Templates
Pista usada.
Exemplo bsico
Concluso
Fim