You are on page 1of 57

See discussions, stats, and author profiles for this publication at: https://www.researchgate.

net/publication/317302716

Programación de Robots Lego Mindstorms NXT con Java - Tema 3 Java para
NXT

Presentation · February 2010


DOI: 10.13140/RG.2.2.24016.30721

CITATIONS READS

0 83

1 author:

Julio Cesar Sandria Reynoso


Institute of Ecology INECOL
27 PUBLICATIONS   2 CITATIONS   

SEE PROFILE

Some of the authors of this publication are also working on these related projects:

Repositorio Institucional INECOL View project

Robótica para niños y jóvenes View project

All content following this page was uploaded by Julio Cesar Sandria Reynoso on 02 June 2017.

The user has requested enhancement of the downloaded file.


Tecnológico de Monterrey
Campus Zacatecas

Curso:
Programación de Robots
Lego Mindstorms NXT con Java
Tema 3. Java para NXT

M.I.A. Julio César Sandria Reynoso


Julio.Sandria@RobotSA.com
Febrero 2010
RobotSA
Programación de Robots Lego Mindstorms NXT con Java M.I.A. Julio César Sandria Reynoso

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

Introducción a Java usando el


NXT
• Programación • Métodos
orientada a objetos • Tipos de datos
con Java • Arreglos
• Archivos fuente • Operadores
• Clases • Control de flujo de
• Objetos programas
• Interfaces • Manejo de
• Sentencias Import y excepciones
Package

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

POO: El lenguaje Java


• Java es un lenguaje de programación
orientada a objetos
• Deriva su sintaxis del lenguaje C
• Influenciado por el lenguaje C++
• La creación de java está profundamente
enraizada en el proceso de refinamiento y
adaptación de lenguajes de programación
durante las tres décadas pasadas

www.RobotSA.com 8
Programación de Robots Lego Mindstorms NXT con Java M.I.A. Julio César Sandria Reynoso

POO: Java e Internet


• Internet a ayudado a Java a situarse como
líder de los lenguajes de programación
• Java amplía el universo de objetos que
pueden moverse por el ciberespacio:
– Objetos pasivos (correo electrónico)
– Objetos dinámicos (programas)
• Aplicaciones y Applets
• Seguridad y Portabilidad

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

POO: Características de Java


• Simple • Arquitectura neutral
• Seguro • Interpretado
• Portable • Alto rendimiento
• Orientado a objetos • Distribuido
• Robusto • Dinámico
• Multihilo

www.RobotSA.com 11
Programación de Robots Lego Mindstorms NXT con Java M.I.A. Julio César Sandria Reynoso

POO: Código y datos


• Un programa consiste de
– Código
– Datos
• Un programa puede estar
conceptualmente organizado en torno a
– Su código (lo que está ocurriendo)
– Sus datos (quien está siendo afectado)

www.RobotSA.com 12
Programación de Robots Lego Mindstorms NXT con Java M.I.A. Julio César Sandria Reynoso

POO: Dos paradigmas


• Modelo orientado al proceso
– Describe un programa como una serie de
pasos lineales (su código)
– Lenguajes basados en procedimientos (C,
Pascal, etc.)
– Problemas con programas largos y complejos
• Programación orientada a objetos
– Organiza un programa alrededor de sus datos
(objetos) y de un conjunto de interfaces bien
definidas con esos datos.

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

Estructura de un programa Java


miClase.java

public class miClase {

public static void main (String[] args)


{
// Declaramos variables y objetos
int a = 2;
int b = 4;
int c;

// Ejecutamos instrucciones y métodos requeridos


c = a * b;
}
}

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

El objeto VW Sedan es un ejemplar de la clase automóvil


VW Sedan es una instancia de automóvil
www.RobotSA.com 17
Programación de Robots Lego Mindstorms NXT con Java M.I.A. Julio César Sandria Reynoso

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

Corregir clase CarBot


• El editor indica que CarBot debe
implementar ManioBot.alto()
• Renombre el
método frena()
como alto()
• Compile
CarBot

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

Sentencia Import (2)


• NOTA: Java siempre importa
automáticamente el paquete java.lang
• Esto es porque las clases usadas en dicho
paquete son básicas para el uso del
lenguaje Java
• Tal paquete contiene clases importantes
como Thread, System, String y Math que
se usan frecuentemente

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

Métodos estáticos (2)


• Es fácil escribir métodos estáticos, pero
hay 2 reglas para escribirlos
apropiadamente:
1. Un método estático no puede llamar
directamente a un método de instancia (no
estático)
2. Un método estático no puede usar
directamente una variable de instancia (no
estático)

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

Control de flujo de programas


• Sentencia if
if(x==10) {
Sound.beep();
} else { … }
• Ciclo for
for(int f=500;f<1000;f+=50) {
Sound.playTone(f,30);
}

www.RobotSA.com 40
Programación de Robots Lego Mindstorms NXT con Java M.I.A. Julio César Sandria Reynoso

Control de flujo de programas


• Ciclos while y do-while
Motor.A.forward();
While(Sensor.S1.readValue() > 55) {
// Mientras la lectura del sensor
// conectado al puerto S1 sea mayor
// que 55 el motor A sigue girando
}
Motor.A.stop();

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

Manejo de excepciones (2)


• Ejemplo de uso:
Try {
// Métodos que pueden producir un error
} catch( Exception Tipo ) {
// Código que trata el error
}
• Cuando un método es propenso a
producir un error se debe llamar el bloque
try.

www.RobotSA.com 43
Programación de Robots Lego Mindstorms NXT con Java M.I.A. Julio César Sandria Reynoso

Manejo de excepciones (3)


• try-catch-finally
Try {
// Métodos que pueden producir un error
} catch( Exception Tipo ) {
// Código que trata el error
} finally {
// Código que se ejecuta siempre, no
// importa si hay o no error
}

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:

• Public static long currentTimeMillis()

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

¡Gracias por su participación!

M.I.A. Julio César Sandria Reynoso


Julio.Sandria@RobotSA.com

RobotSA – Robótica, Sistemas y Automatización


http://www.RobotSA.com

www.RobotSA.com
View publication stats
56

You might also like