Professional Documents
Culture Documents
net/publication/317302716
Programación de Robots Lego Mindstorms NXT con Java - Tema 3 Java para
NXT
CITATIONS READS
0 83
1 author:
SEE PROFILE
Some of the authors of this publication are also working on these related projects:
All content following this page was uploaded by Julio Cesar Sandria Reynoso on 02 June 2017.
Curso:
Programación de Robots
Lego Mindstorms NXT con Java
Tema 3. Java para NXT
Resumen
• Este tema enfatiza la programación
orientada a objetos con Java para los
robots Lego Mindstorms NXT. Se ilustra la
creación de clases, objetos e interfaces.
Se ejemplifica la herencia, el uso de
métodos, tipos de datos y arreglos en
Java, así como el control de flujo de
programas y el manejo de excepciones.
Todo esto aplicado en un robot móvil
Lego.
www.RobotSA.com 2
Programación de Robots Lego Mindstorms NXT con Java M.I.A. Julio César Sandria Reynoso
Contenido
• Prerrequisitos
• Introducción a Java usando el NXT
• El paquete java.lang
www.RobotSA.com 3
Programación de Robots Lego Mindstorms NXT con Java M.I.A. Julio César Sandria Reynoso
Prerrequisitos
• Instalar JDK
• Instalar Driver del NXT
• Instalar leJOS NXJ
• Instalar ambiente de desarrollo
– Eclipse
– NetBeans
• Armar TriBot (solo base)
www.RobotSA.com 4
Programación de Robots Lego Mindstorms NXT con Java M.I.A. Julio César Sandria Reynoso
www.RobotSA.com 5
Programación de Robots Lego Mindstorms NXT con Java M.I.A. Julio César Sandria Reynoso
El paquete java.lang
• Math
• Object
• Runtime
• String
• StringBuffer
• System
• Thread
www.RobotSA.com 6
Programación de Robots Lego Mindstorms NXT con Java M.I.A. Julio César Sandria Reynoso
Programación Orientada a
Objetos con Java
• El lenguaje Java
• Java e Internet
• Bytecode
• Características de Java
• Códigos y datos
• Dos paradigmas
www.RobotSA.com 7
Programación de Robots Lego Mindstorms NXT con Java M.I.A. Julio César Sandria Reynoso
www.RobotSA.com 8
Programación de Robots Lego Mindstorms NXT con Java M.I.A. Julio César Sandria Reynoso
www.RobotSA.com 9
Programación de Robots Lego Mindstorms NXT con Java M.I.A. Julio César Sandria Reynoso
POO: bytecode
• Java resuelve los problemas de seguridad
y portabilidad, porque la salida del
compilador no es un código ejecutable,
sino un bytecode
• El bytecode es un conjunto de
instrucciones altamente optimizado
diseñado para ser ejecutado por una
máquina virtual (JVM) que emula a un
intérprete Java
www.RobotSA.com 10
Programación de Robots Lego Mindstorms NXT con Java M.I.A. Julio César Sandria Reynoso
www.RobotSA.com 11
Programación de Robots Lego Mindstorms NXT con Java M.I.A. Julio César Sandria Reynoso
www.RobotSA.com 12
Programación de Robots Lego Mindstorms NXT con Java M.I.A. Julio César Sandria Reynoso
www.RobotSA.com 13
Programación de Robots Lego Mindstorms NXT con Java M.I.A. Julio César Sandria Reynoso
Archivos Fuentes
• Compile, cargue y ejecute el programa
siguiente:
import lejos.nxt.*;
public class HOLA {
public static void main(String[] args) {
LCD.drawString("HOLA",2,0);
LCD.refresh();
while(true){}
}
}
– Oprima los botones naranja y gris para detener el programa
www.RobotSA.com 14
Programación de Robots Lego Mindstorms NXT con Java M.I.A. Julio César Sandria Reynoso
www.RobotSA.com 15
Programación de Robots Lego Mindstorms NXT con Java M.I.A. Julio César Sandria Reynoso
Clases y Objetos
• Clase
– Define un tipo de dato
– Contiene datos y un conjunto de métodos
para manipular los datos
• Objeto
– Es un ejemplar de una clase
www.RobotSA.com 16
Programación de Robots Lego Mindstorms NXT con Java M.I.A. Julio César Sandria Reynoso
Clases y Objetos
Clase Objeto
• Automóvil • VW Sedan
– Motor – Motor de 4 cilindros
– Puertas – 2 puertas
– Cajuela – 1 cajuela
– Llantas – 4 llantas
Clase Motor
Clase Motor Objetos
• Campos • Motor.A y Motor.B
– A, B, C
• Métodos Motor.A.setPower(1);
– backward() Motor.C.setPower(7);
– forward() Motor.A.forward();
– getPower() Motor.C.forward();
– isBackward() Thread.sleep (1000);
– isForward() Motor.A.stop();
– isMoving() Motor.C.stop();
– isStopped()
– reverseDirection()
– setPower(int aPower)
– stop()
www.RobotSA.com 18
Programación de Robots Lego Mindstorms NXT con Java M.I.A. Julio César Sandria Reynoso
Herencia
Objeto
BiBot “Hereda”
de Objeto Superclase
o
BiBot extiende Subclase
a Objeto
BiBot
Superclase
Subclase
TriBot
www.RobotSA.com 19
Programación de Robots Lego Mindstorms NXT con Java M.I.A. Julio César Sandria Reynoso
Clase BiBot1
• Compile la clase BiBot1
import lejos.nxt.*;
public class BiBot1 { Motor.B
public void avanza() {
Motor.B.forward();
Motor.C.backward();
}
}
Motor.C
www.RobotSA.com 20
Programación de Robots Lego Mindstorms NXT con Java M.I.A. Julio César Sandria Reynoso
Clase TriBot1
• Compile, cargue y ejecute la clase TriBot1
en el robot TriBot
import lejos.nxt.Button;
public class TriBot1 extends BiBot1 {
public static void main(String[] args) {
avanza();
do{}while(!Button.ESCAPE.isPressed());
}
}
www.RobotSA.com 21
Programación de Robots Lego Mindstorms NXT con Java M.I.A. Julio César Sandria Reynoso
Ejercicio
• Modifique la clase BiBot1 agregando el
método retrocede.
• Modifique la clase TriBot1 para que el
robot TriBot haga lo siguiente:
– Avanzar
– hasta oprimir ESCAPE
– Retroceder
– hasta oprimir ESCAPE
www.RobotSA.com 22
Programación de Robots Lego Mindstorms NXT con Java M.I.A. Julio César Sandria Reynoso
Interfaces
• Java no permite extender más de una
clase, pero a veces es necesario hacer
clases con múltiples comportamientos, lo
cual se puede hacer con interfaces
• Una interface puede definir métodos y
variables, pero los métodos no contienen
código funcional
• Los métodos tienen código funcional en la
Clase que implemente a una Interface
www.RobotSA.com 23
Programación de Robots Lego Mindstorms NXT con Java M.I.A. Julio César Sandria Reynoso
Interface ManioBot
• Compile la clase ManioBot (de Robot
Maniobrable)
interface ManioBot {
public void avanza();
public void derecha();
public void alto();
}
www.RobotSA.com 24
Programación de Robots Lego Mindstorms NXT con Java M.I.A. Julio César Sandria Reynoso
import lejos.nxt.*;
Clase CarBot
public class CarBot extends Thread implements ManioBot {
public void avanza() {
Motor.B.forward(); Motor.C.backward(); pausa(500);
}
public void derecha() {
Motor.B.backward(); Motor.C.backward(); pausa(500);
}
public void frena() {
Motor.B.stop(); Motor.C.stop();
}
private void pausa(int mSegundos) { NOTA: La
try { clase tiene una
Thread.sleep(mSegundos); omisión que
} catch(InterruptedException e) {} deben marcar
} el editor y el
} compilador
www.RobotSA.com 25
Programación de Robots Lego Mindstorms NXT con Java M.I.A. Julio César Sandria Reynoso
www.RobotSA.com 26
Programación de Robots Lego Mindstorms NXT con Java M.I.A. Julio César Sandria Reynoso
Clase CorreBot
• Ejecute CorreBot en el TriBot
public class CorreBot {
public static void main(String[] args) {
CarBot corredor = new CarBot();
corredor.avanza();
corredor.derecha();
corredor.avanza();
corredor.alto();
}
} corredor es un objeto
de la clase CarBot
www.RobotSA.com 27
Programación de Robots Lego Mindstorms NXT con Java M.I.A. Julio César Sandria Reynoso
Ejercicio
• Agregue a la Interface ManioBot las
declaraciones de métodos retrocede() e
izquierda()
• Agregue a la Clase CarBot las
definiciones de tales métodos
• Modifique la Clase CorreBot para hacer
que el TriBot trace un 8 en el suelo
www.RobotSA.com 28
Programación de Robots Lego Mindstorms NXT con Java M.I.A. Julio César Sandria Reynoso
Sentencia Import
• La sentencia import permite a una clase
acceder a todas las clases contenidas en
un paquete
import lejos.nxt.*;
• También permite importar solamente una
clase de un paquete
import lejos.nxt.Motor;
• También se puede acceder sin package
lejos.nxt.Motor.B.forward();
www.RobotSA.com 29
Programación de Robots Lego Mindstorms NXT con Java M.I.A. Julio César Sandria Reynoso
www.RobotSA.com 30
Programación de Robots Lego Mindstorms NXT con Java M.I.A. Julio César Sandria Reynoso
Sentencia package
• Organiza el código en paquetes
• Se debe crear una estructura de directorios que
coincida con el nombre de paquete, ejemplo:
C:\Java\robot\volador
• Incluir declaración package al inicio del código,
ejemplo:
1. package robot.volador;
2. import lejos.nxt.*;
3. class Despega {
4. // resto del código
5. }
www.RobotSA.com 31
Programación de Robots Lego Mindstorms NXT con Java M.I.A. Julio César Sandria Reynoso
Métodos
• Le dan a una clase su funcionalidad.
• Pueden regresar o no (void), un valor
• Se pueden definir sin parámetros
corredor.avanza();
valor = Sensor.S1.readValue();
• O con parámetros
try { Thread.sleep(mSegundos); }
…
pausa(500);
www.RobotSA.com 32
Programación de Robots Lego Mindstorms NXT con Java M.I.A. Julio César Sandria Reynoso
Método Constructor
• Es un método especial que se usa para
inicializar un objeto cuando es creado
class ConstruBot {
String nombre;
public ConstruBot(String n) {
nombre = n;
}
public void verNombre() {
System.out.println(nombre);
System.out.println("Presiona ENTER + ESCAPE");
}
public static void main(String[] args) {
ConstruBot cbot = new ConstruBot("Soy ConstruBot");
cbot.verNombre();
while(true) {}
}
}
www.RobotSA.com 33
Programación de Robots Lego Mindstorms NXT con Java M.I.A. Julio César Sandria Reynoso
Métodos estáticos
• Son métodos que se pueden llamar sin
crear una instancia de la clase. Ejemplo:
int resultado = Math.sin(0.5);
• En contaste, los métodos miembro
pueden ser llamados de un objeto:
CarBot corredor = new CarBot();
corredor.avanza();
www.RobotSA.com 34
Programación de Robots Lego Mindstorms NXT con Java M.I.A. Julio César Sandria Reynoso
www.RobotSA.com 35
Programación de Robots Lego Mindstorms NXT con Java M.I.A. Julio César Sandria Reynoso
Tipos de datos
Palabra clave Mínimo Máximo Default Bits
byte - 28 28 – 1 0 8
short - 216 216 – 1 0 16
int - 232 232 – 1 0 32
long - 232 232 – 1 0 64
float varía varía 0.0 32
double varía Varía 0.0 64
boolean ninguno ninguno false 2
char ‘\U00000’ ‘\U65535’ ‘\U00000’ 16
leJOS permite declarar 8 tipos de datos primitivos, pero solo 6 están
completamente implementados. Los números de 64 bits no están
completamente soportados ya que son truncados a sus similares de 32 bits
www.RobotSA.com 36
Programación de Robots Lego Mindstorms NXT con Java M.I.A. Julio César Sandria Reynoso
Arreglos
• Un arreglo es una colección de objetos o
primitivas que pueden ser accedidos
usando un número índice:
int[] x = new int[20];
x[5] = 200;
boolean [] boo = {true, false,
false true true };
www.RobotSA.com 37
Programación de Robots Lego Mindstorms NXT con Java M.I.A. Julio César Sandria Reynoso
Operadores
• Los operadores son fundamentales en la
programación porque permiten realizar los
cálculos, que son para lo que fueron
echas las máquinas.
• Los operadores esencialmente
desempeñan cálculos matemáticos de
bajo nivel involucrando bits.
www.RobotSA.com 38
Programación de Robots Lego Mindstorms NXT con Java M.I.A. Julio César Sandria Reynoso
Operadores (2)
• Operadores matemáticos
+, -, *, /, % residuo (módulo)
• Operadores de comparación
==, >=, <=, >, <, !=
• Operadores booleanos
&& (AND), || (OR), ^ (OR exclusiva, XOR)
!= (Diferente), == (Igual)
www.RobotSA.com 39
Programación de Robots Lego Mindstorms NXT con Java M.I.A. Julio César Sandria Reynoso
www.RobotSA.com 40
Programación de Robots Lego Mindstorms NXT con Java M.I.A. Julio César Sandria Reynoso
do { // algo } while(condición);
www.RobotSA.com 41
Programación de Robots Lego Mindstorms NXT con Java M.I.A. Julio César Sandria Reynoso
Manejo de excepciones
• El manejo de excepciones (errores) es
una característica muy importante en Java
• Con esto, el chequeo de errores de una
parte del código se puede segregar de el
resto del código funcional
• Java usa bloques try-catch para el manejo
de excepciones
www.RobotSA.com 42
Programación de Robots Lego Mindstorms NXT con Java M.I.A. Julio César Sandria Reynoso
www.RobotSA.com 43
Programación de Robots Lego Mindstorms NXT con Java M.I.A. Julio César Sandria Reynoso
www.RobotSA.com 44
Programación de Robots Lego Mindstorms NXT con Java M.I.A. Julio César Sandria Reynoso
El paquete java.lang
• Math
• Object
• Runtime
• String
• StringBuffer
• System
• Thread
www.RobotSA.com 45
Programación de Robots Lego Mindstorms NXT con Java M.I.A. Julio César Sandria Reynoso
java.lang.Math
• public static double void cos(double a)
• public static double void tan(double a)
• public static double void asin(double a)
• public static double void acos(double a)
• public static double void atan(double a)
• public static double void toRadians(double
a)
• …
www.RobotSA.com 46
Programación de Robots Lego Mindstorms NXT con Java M.I.A. Julio César Sandria Reynoso
java.lang.Object
• public boolean equals(Object aObject)
• public String toString()
www.RobotSA.com 47
Programación de Robots Lego Mindstorms NXT con Java M.I.A. Julio César Sandria Reynoso
java.lang.Runtime
• public static Runtime getRunTime()
• public long freeMemory()
• public long totalMemory()
www.RobotSA.com 48
Programación de Robots Lego Mindstorms NXT con Java M.I.A. Julio César Sandria Reynoso
java.lang.String
• public char[] toCharArray()
• public String toString()
• public static String valueOf(Object aObj)
www.RobotSA.com 49
Programación de Robots Lego Mindstorms NXT con Java M.I.A. Julio César Sandria Reynoso
java.lang.StringBuffer
• StringBuffer append(boolean aBoolean)
• StringBuffer append(char aChar)
• StringBuffer append(int aInt)
• StringBuffer append(long aLong)
• StringBuffer append(float aFloat)
• StringBuffer append(double aDouble)
• StringBuffer append(String aString)
• StringBuffer append(Object aObject)
www.RobotSA.com 50
Programación de Robots Lego Mindstorms NXT con Java M.I.A. Julio César Sandria Reynoso
java.lang.System
• Permite al programador interactuar con el
sistema operativo y recuperar información
de este. En leJOS lo único que se puede
recuperar es la hora del sistema:
www.RobotSA.com 51
Programación de Robots Lego Mindstorms NXT con Java M.I.A. Julio César Sandria Reynoso
Thread (Hilo)
• Los Thread (hilos) permiten a un
programa ejecutar varias piezas de código
simultáneamente
• Son muy útiles en la programación de
robots porque cada hilo puede ser usado
para controlar un comportamiento
separado
www.RobotSA.com 52
Programación de Robots Lego Mindstorms NXT con Java M.I.A. Julio César Sandria Reynoso
java.lang.Thread
• public static Thread currentThread()
• public int getPriority()
• public boolean isAlive()
• public boolean isDaemon()
• public boolean isInterrupted()
• public abstract void run()
• public static void sleep(long milliseconds)
• public void start()
• …
www.RobotSA.com 53
Programación de Robots Lego Mindstorms NXT con Java M.I.A. Julio César Sandria Reynoso
import lejos.nxt.*;
class MalaMusica extends Thread {
public static void main(String[] args) {
new MalaMusica().start();
}
new Contador().start();
Ejecute este
public void run() { programa en el
while(true) {
int frecuencia = (int) (Math.random()*1000); NXT
int duracion = (int)(Math.random()*40)+10;
Sound.playTone(frecuencia, duracion);
} ¿Qué hace el
}
} programa?
class Contador extends Thread {
public void run() {
for(int i=0;i<1000;i++) { ¿Por qué hay 2
LCD.drawInt(i,0,0);
LCD.refresh(); métodos run()?
try { Thread.sleep(1000); }
catch (Exception e) {}
}
}
}
www.RobotSA.com 54
Programación de Robots Lego Mindstorms NXT con Java M.I.A. Julio César Sandria Reynoso
Ejercicio
• Escriba un programa que se ejecute en 3
hilos haciendo lo siguiente:
• Hilo 1. Tocar música mala
• Hilo 2. Mostrar en la pantalla una cuenta
regresiva del 1000 al 1
• Hilo 3. Moverse en zigzag
www.RobotSA.com 55
Programación de Robots Lego Mindstorms NXT con Java M.I.A. Julio César Sandria Reynoso
www.RobotSA.com
View publication stats
56