Mostrando postagens com marcador Desenvolvimento técnico. Mostrar todas as postagens
Mostrando postagens com marcador Desenvolvimento técnico. Mostrar todas as postagens

sexta-feira, 10 de setembro de 2010

Desenvolvimento técnico: Documentação

>Por Mariana

Hey

Resolvi trazer um pouco da documentação do projeto, a seguir uma breve explicação e uma ilustração.

O ambiente reproduz uma área plana, chamada de arena na qual atualmente é posicionado um robô e uma bola. Neste ambiente o robô executará os comportamentos para realizar uma tarefa.


Até mais e bons estudos
Mariana

sexta-feira, 3 de setembro de 2010

Desenvolvimento em JAVA - Conversor

>Por Mariana

Como dito anteriormente começamos desenvolver um jeito de controle remoto do simulador, por UDCP. Para isso ocorrer precisamos converter também float em bytes, a seguir a rotina que faz isso:

void comunicacaoRobo2() {
/** 6 floats * 4 bytes cada * 3 conjuntos de estado */
byte data[] = new byte[6 * 4 * 3];
byte cmd[] = new byte[1];

Estado estado[] = new Estado[3];
for (int i = 0; i <>
estado[i] = new Estado();

while (true) {
try {
estado[0].angulo = (float) (2 * Math.PI + robo2.angulo);
estado[0].x = tamXCm - (float) robo2.x;
estado[0].y = tamYCm - (float) robo2.y;
estado[0].dAngulo = (float) robo2.dAngulo;
estado[0].dx = -(float) robo2.dx;
estado[0].dy = -(float) robo2.dy;

estado[1].angulo = (float) bola.angulo;
estado[1].x = tamXCm - (float) bola.x;
estado[1].y = tamYCm - (float) bola.y;
estado[1].dAngulo = (float) 0;// bola.dAngulo;
estado[1].dx = -(float) bola.dx;
estado[1].dy = -(float) bola.dy;

estado[2].angulo = (float) (2 * Math.PI + robo1.angulo);
estado[2].x = tamXCm - (float) robo1.x;
estado[2].y = tamYCm - (float) robo1.y;
estado[2].dAngulo = (float) robo1.dAngulo;
estado[2].dx = -(float) robo1.dx;
estado[2].dy = -(float) robo1.dy;

leBytes(data, estado);

DatagramPacket packet = new DatagramPacket(cmd, 1);
socketRobo2.receive(packet);
if (cmd[0] == (byte) 0x88) {
packet.setData(data);
socketRobo2.send(packet);
// Thread.sleep(100);
} else {
System.out.format("%02x ", cmd[0]);
robo2.comando(cmd[0]);
Thread.sleep(20);
}
} catch (InterruptedException e) {
} catch (IOException e) {
e.printStackTrace();
}
}
}



Até mais e boas provas a todos.

Desenvolvimento técnico: Colisão

>Por Juliana

Olá,
Pensando em prováveis recursos futuros, foi desenvolvido o método verificaColisaoRoboRobo. Ele executa basicamente as mesmas funções que o método verificaColisaoBolaRobo. Para este ano, não pretendemos adicionar um segundo robô ao projeto. No entanto, estamos desde já preparando para que isso seja possível.
Veja o código:
void verificaColisaoRoboRobo(BufferedImage imageRobo1,
BufferedImage imageRobo2) {
Ponto p = verificaColisaoBolaRoboI(imageRobo1,
(int) (robo1.x * escalaCmPixel),
(int) (robo1.y * escalaCmPixel), robo2, imageRobo2,
(int) (robo2.x * escalaCmPixel),
(int) (robo2.y * escalaCmPixel));
if (p != null) {
getGraphics().drawOval((int) ((p.x * escalaCmPixel) - 20),
(int) (((-(p.y - tamYCm)) * escalaCmPixel) - 20), 40, 40);
afastaRoboDoPonto(robo1, p);
afastaRoboDoPonto(robo2, p);
}
}

Até a semana que vem,
Juliana

sexta-feira, 27 de agosto de 2010

Desenvolvimento em JAVA - Conversor

>Por Mariana

Hey
Após a apresentação para a banca começamos desenvolver um jeito de controle remoto do simulador, por UDCP. Para isso ocorrer precisamos converter bytes em reais, a seguir a rotina que faz isso:

public void atribuiBytesEstado(Estado estado[], byte[] b) {
int ind = 0, x;
for (int i = 0; i <>
x = ((int) b[ind] & 0x000000ff)
+ (((int) b[ind + 1] <<>
+ (((int) b[ind + 2] <<>
+ (((int) b[ind + 3] <<>
System.out.format("%x %x %x %x %x\n", (int) b[0],
((int) b[1] <<>
(((int) b[3] <<>
ind += 4;
estado[i].angulo = Float.intBitsToFloat(x);
x = ((int) b[ind] & 0x000000ff)
+ (((int) b[ind + 1] <<>
+ (((int) b[ind + 2] <<>
+ (((int) b[ind + 3] <<>
ind += 4;
estado[i].x = Float.intBitsToFloat(x);
x = ((int) b[ind] & 0x000000ff)
+ (((int) b[ind + 1] <<>
+ (((int) b[ind + 2] <<>
+ (((int) b[ind + 3] <<>
ind += 4;
estado[i].y = Float.intBitsToFloat(x);
x = ((int) b[ind] & 0x000000ff)
+ (((int) b[ind + 1] <<>
+ (((int) b[ind + 2] <<>
+ (((int) b[ind + 3] <<>
ind += 4;
estado[i].dAngulo = Float.intBitsToFloat(x);
x = ((int) b[ind] & 0x000000ff)
+ (((int) b[ind + 1] <<>
+ (((int) b[ind + 2] <<>
+ (((int) b[ind + 3] <<>
ind += 4;
estado[i].dx = Float.intBitsToFloat(x);
x = ((int) b[ind] & 0x000000ff)
+ (((int) b[ind + 1] <<>
+ (((int) b[ind + 2] <<>
+ (((int) b[ind + 3] <<>
ind += 4;
estado[i].dy = Float.intBitsToFloat(x);
}
}

Até mais

Desenvolvimento técnico: Cliente

>Por Juliana

Bom dia,
Como já foi dito pela Mariana, estivemos trabalhando com o controle remoto do Simulador. Por isso, hoje trouxe a vocês o método enviaComando. Nele, recebemos um comando da classe Simulador e o reenviamos ao Simulador que está em execução no computador cujo IP foi configurado. No caso estamos usando o localhost (127.0.0.1).
static void enviaComando(int cmd) {
try {
byte b[] = new byte[1];
b[0] = (byte) cmd;
DatagramPacket packet;
packet = new DatagramPacket(b, b.length, InetAddress
.getByName("127.0.0.1"), 7878);
socket.send(packet);
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

Até a semana que vem.
Juliana

sexta-feira, 20 de agosto de 2010

Desenvolvimento técnico: Salvar

>Por Juliana

Olá
Um detalhe que nós deixamos passar no desenvolvimento em Java foi relacionado a salvar os arquivos GGB. Os arquivos eram salvos, no entando, sem possibilidade de escolha do nome e caminho. Para isso, desenvolvemos o seguinte método:

public static File escolherCaminhoSalvar() {
String sNomeArq = null;
String pastaPadrao = MenuPrincipal.global.getProperty("PastaPadrao");
JFileChooser arquivo = new JFileChooser(pastaPadrao);
FileNameExtensionFilter filter = new FileNameExtensionFilter("Arquivo GoGoBots (.ggb)", "ggb");
arquivo.setFileFilter(filter);
arquivo.setFileSelectionMode(arquivo.FILES_ONLY);
int resultadoArq;
File arquivoNome;
while (true) {
resultadoArq = arquivo.showSaveDialog(null);
if (resultadoArq == arquivo.CANCEL_OPTION)
return null;
arquivoNome = arquivo.getSelectedFile();
if ((arquivoNome == null || arquivoNome.getName().equals("")))
javax.swing.JOptionPane.showMessageDialog(null, "Nome de Arquivo Inválido", "Nome de Arquivo Inválido", javax.swing.JOptionPane.ERROR_MESSAGE);
else if (arquivo.getSelectedFile().exists()) {
int certeza = JOptionPane.showConfirmDialog(null, "Tem certeza de que deseja substituir arquivo existente?", "Arquivo já existe", 0, 0);
if (certeza == 0)
break;
} else
break;
}
MenuPrincipal.global.setProperty("PastaPadrao", arquivo.getCurrentDirectory()
.toString());
MenuPrincipal.salvaConfiguracao();
try {
RandomAccessFile file = new RandomAccessFile(arquivoNome, "rw");
MenuPrincipal.salvaConfiguracao();
return arquivoNome;
} catch (Exception e) {
e.printStackTrace();
MenuPrincipal.salvaConfiguracao();
}
return null;
}

Até mais
Juliana

Menu em Java


>Por Mariana

Hey
Ultimos ajustes para a apresentação no sábado (21/08/2010) na sala 1. Temos trabalhado bastante em juntar os módulos que já estavam prontos, em java. Abaixo imagem do nosso menu, essa tela é provisória, sofrerá mudanças ainda.



Até mais

sexta-feira, 13 de agosto de 2010

Desenvolvimento em Java: Colisão

>Por Juliana

Bom dia,
Hoje vim mostrar a vocês o método verificaColisao() que está na classe Arena. Esse método scanneia as imagens e retorna os pontos na arena onde a bola e o robô etsão num mesmo instante. Saber o ponto exato de onde a colisão está ocorrendo é essencial para trabalharmos o choque entre os objetos.
void verificaColisao(BufferedImage image1,BufferedImage image2) {
int somaX = 0, somaY = 0;
int n=0;
int[] vImg1 = image1.getRGB(0, 0, tamX, tamY, null, 0, tamY);
int[] vImg2 = image2.getRGB(0, 0, tamX, tamY, null, 0, tamY);
for (int i = 0; i < x =" i" y =" i">0)
System.out.format("%d ", n);
}

Até semana que vem,
Juliana

sexta-feira, 6 de agosto de 2010

Um pouco de física...

>Por Juliana

Boa noite,
Nossos seguidores vem acompanhando, desde o início do mês de julho, o desenvolvimento de nosso Simulador 2D. Como a movimentação do Robô Virtual sobre a arena está quase finalizada, passamos a trabalhar também na bola. No entanto, a movimentação de bolas se dá de forma totalmente diferente a dos robôs. Uma bola não responde a comandos, ela age de acordo com impulsos e quantidades de movimento.

De acordo com a Wikipedia:
Impulso é a grandeza física que mede a variação da quantidade de movimento de um objeto. É causado pela atuação de uma força.
Em física, quantidade de movimento linear [...] é uma grandeza física dada pelo produto entre massa e velocidade de um corpo. O momento linear é uma grandeza vetorial, com direção e sentido, cujo módulo é o produto da massa pelo módulo da velocidade, e cuja direção e sentido são os mesmos da velocidade.
Além disso, precisaremos saber verificar os tipos de choque (elásticos e inelásticos) e suas consequências para que possamos criar uma representação mais próxima a realidade tanto quanto possível.
Portanto, antes de darmos continuidade à programação, será necessário estudarmos um pouco de física mecânica. Caso encontremos problemas, estamos certos de que poderemos contar com alguma ajuda de nossas professoras Flávia e Simone.
Deseje-nos sorte.
Boa semana a todos,

Juliana

sexta-feira, 30 de julho de 2010

Notificações e Advertências

>Por Paula

Olá ;D

Essa semana estou finalizando os Relatórios do sistema em PHP, os problemas que haviam surgido, consegui resolvê-los. Logo após essa finalização partiremos para a elaboração do envio de notificações e advertências, que será realizado através do envio de e-mails.

Para tal realização dispomos de uma função chamada mail() que permite configurar e enviar mensagens de correio. A função mail() recebe três parâmetros obrigatórios e dois opcionais. Retorna true se o mail se enviou com êxito e false em caso contrário.

Parâmetros necessários em todos os casos

Destinatário: o endereço de correio ou endereços de correio que vão receber a mensagem. Se incluirmos vários endereços devemos separa-las por uma virgula.

Assunto: para indicar uma cadeia de caracteres que queremos que seja o assunto do correio electrónico a enviar.

Corpo: o corpo da mensagem, o que queremos que tenha escrito o correio.

Exemplo de utilização da função mail para envío de um email simples :

" mail("ze@criarweb.com,maria@criarweb.com","assunto","Este
é o corpo da mensagem") "

Desenvolvimento técnico: Simulador

>Por Juliana

Boa tarde,
A classe que apresento a vocês hoje é a classe Arena. Ela faz parte do Simulador. Nela serão desenhados os objetos a cada execução de um novo comando. Por enquanto, os comandos que são executados no método run() são apenas para teste e logo serão substituídos por comandos recebidos do Tradutor.
class Arena extends JPanel implements Runnable {
/**
* pixels por cm.

* Use multiplicando o valor em cm para obter valor correspondente em pixels
*/
final double escalaCmPixel = 5;

Robo robo;

Arena() {
try {
robo = new Robo(this);
setPreferredSize(new Dimension(400, 400));
new Thread(this).start();
} catch (IOException e) {
e.printStackTrace();
}
}

public void paint(Graphics g) {
super.paint(g);
for (int i = 0; i < 40; i++) {
g.drawLine((int) (i * 8 * escalaCmPixel), 0,
(int) (i * 8 * escalaCmPixel), 400);
g.drawLine(0, (int) (i * 8 * escalaCmPixel), 400,
(int) (i * 8 * escalaCmPixel));
}
robo.desenha((Graphics2D) g);
}

void enviaComando(int cmd) {
try {
robo.comando(cmd);
Thread.sleep(33);
repaint();
} catch (InterruptedException e) {
}
}

public void run() {
while (true) {
for (int i = 0; i < 100; i++) {
enviaComando(0x11);
}
for (int i = 0; i < 100; i++) {
enviaComando(0x99);
}
for (int i = 0; i < 100; i++) {
enviaComando(0x19);
}
for (int i = 0; i < 100; i++) {
enviaComando(0x91);
}
for (int i = 0; i < 100; i++) {
enviaComando(0x10);
}
for (int i = 0; i < 100; i++) {
enviaComando(0x01);
}
for (int i = 0; i < 100; i++) {
enviaComando(0x90);
}
for (int i = 0; i < 100; i++) {
enviaComando(0x09);
}
}
}

Até a semana que vem,
Juliana

Desenvolvimento técnico: Tradutor

>Por Mariana

Hey,
Esta semana começamos o desenvolvimento da classe Tradutor. Essa classe deverá traduzir o arquivo da lógica e transformá-lo em comandos. Esses comandos serão enviados tanto para o simulador quanto para o robô real, de acordo com a escolha do usuário, gerando a movimentação sobre a arena. Aqui está o método encontrar(), o qual deverá achar a condição correspondente a situação daquele instante.
public void encontrar(String nomeArq, int x, int y) throws IOException {
Properties prop = new Properties();
FileInputStream pf = new FileInputStream(nomeArq);
prop.load(pf);
for (int i = 0; i < prop.size(); i++) {

String s = prop.getProperty("com" + i,
"O1(0,0);O2(1,1);O1(1,1);O2(0,0)");
String p[] = s.split(",|\\(|\\),|\\);|\\)");
for (int j = 0; j < p.length; j++)
System.out.println(p[j]);
/*
* Testar coordenadas dos objetos nesse momento com condições
* presentes no arquivo
*/
if ((Integer.parseInt(p[7]) == x) && (Integer.parseInt(p[8]) == y)
&& (Integer.parseInt(p[10]) == 1)
&& (Integer.parseInt(p[11]) == 1)) {
agir(Integer.parseInt(p[1]), Integer.parseInt(p[2]), Integer
.parseInt(p[4]), Integer.parseInt(p[5]));
return;
}
}

Isso é tudo por hoje. Até mais,
Mariana

Desenvolvimento técnico: Simulador

>Por Debora

Bom dia,
Durante esta semana, o desenvolvimento do simulador 2D continuou. No entanto, hoje trago pra vocês um método que já havia sido desenvolvido na semana passado. É aqui que o desenho do robô na arena ocorrerá de fato.
Veja:
void desenha(Graphics2D g) {
AffineTransform af = new AffineTransform();
af.translate(x * arena.escalaCmPixel, arena.getHeight() - y
* arena.escalaCmPixel);
af.translate(-tamX / 2, -tamY / 2);
af.rotate(-angulo + anguloImgOriginal, tamX / 2, tamY / 2);
af.scale(escalaImgX, escalaImgY);
g.drawImage(img, af, null);
}
É só isso, até semana que vem
Debora

sexta-feira, 23 de julho de 2010

Desenvolvimento em Java

>Por Juliana

Bom dia,
Uma semana depois, a função executaComando() do RoboVirtual mudou bastante. Após muita trigonometria, o resultado foi o código apresentado a seguir. Alguns princípios se mantiveram, outros mudaram completamente. O robô agora se movimenta como deveria. O próximo passo é pensar a respeito da representação do movimento de uma bola na arena, bem como a colisão entre os objetos.
Enfim, aqui está o trecho do código:
void executaComando() {
if (tempoCmd > 0) {
/** usado pois o giro acontece a 90 graus da direcao do robo */
final double noventa = Math.PI / 2;
double dxa;
double dya;
switch (comando) {
case 0x11:
x += dx = velCmTempo * Math.cos(angulo);
y += dy = velCmTempo * Math.sin(angulo);
break;
case 0x99:
x += dx = -velCmTempo * Math.cos(angulo);
y += dy = -velCmTempo * Math.sin(angulo);
break;
case 0x10:
dxa = distRodasCm * Math.cos(angulo - noventa);
dya = distRodasCm * Math.sin(angulo - noventa);
/**
* simplificando double perim = 2 * Math.PI * distRodasCm;
* angulo += dAngulo = -velCmTempo * 2 * Math.PI / perim; temos:
*/
angulo += dAngulo = -velCmTempo / distRodasCm;
x += dx = (dxa - distRodasCm * Math.cos(angulo - noventa)) / 2;
y += dy = (dya - distRodasCm * Math.sin(angulo - noventa)) / 2;
break;
case 0x90:
dxa = distRodasCm * Math.cos(angulo - noventa);
dya = distRodasCm * Math.sin(angulo - noventa);
/**
* simplificando double perim = 2 * Math.PI * distRodasCm;
* angulo += dAngulo = velCmTempo * 2 * Math.PI / perim; temos:
*/
angulo += dAngulo = velCmTempo / distRodasCm;
x += dx = (dxa - distRodasCm * Math.cos(angulo - noventa)) / 2;
y += dy = (dya - distRodasCm * Math.sin(angulo - noventa)) / 2;
break;
case 0x09:
/** usado pois o giro acontece a 90 graus da direcao do robo */
dxa = distRodasCm * Math.cos(angulo - noventa);
dya = distRodasCm * Math.sin(angulo - noventa);
/**
* simplificando double perim = 2 * Math.PI * distRodasCm;
* angulo += dAngulo = -velCmTempo * 2 * Math.PI / perim; temos:
*/
angulo += dAngulo = -velCmTempo / distRodasCm;
x += dx = -(dxa - distRodasCm * Math.cos(angulo - noventa)) / 2;
y += dy = -(dya - distRodasCm * Math.sin(angulo - noventa)) / 2;
break;
case 0x01:
dxa = distRodasCm * Math.cos(angulo - noventa);
dya = distRodasCm * Math.sin(angulo - noventa);
/**
* simplificando double perim = 2 * Math.PI * distRodasCm;
* angulo += dAngulo = velCmTempo * 2 * Math.PI / perim; temos:
*/
angulo += dAngulo = velCmTempo / distRodasCm;
x += dx = -(dxa - distRodasCm * Math.cos(angulo - noventa)) / 2;
y += dy = -(dya - distRodasCm * Math.sin(angulo - noventa)) / 2;
break;
case 0x19:
/**
* simplificando perim = Math.PI * distRodasCm; angulo +=
* dAngulo = velCmTempo * 2 * Math.PI / perim; temos:
*/
angulo += dAngulo = -velCmTempo * 2 / distRodasCm;
break;
case 0x91:
/**
* simplificando double perim = Math.PI * distRodasCm; angulo +=
* dAngulo = velCmTempo * 2 * Math.PI / perim; temos:
*/
angulo += dAngulo = velCmTempo * 2 / distRodasCm;
break;
}
tempoCmd--;
}
}

Até semana que vem
Juliana

sexta-feira, 9 de julho de 2010

Desenvolvimento em Java

>Por Juliana

Boa tarde,
Mais uma vez, venho lhes apresentar mais um trechinho de nosso código. Dessa vez trago uma primeira tentativa do que será a função executarComando() do RoboVirtual, ou seja, do simulador 2D. Para tanto, iremos utilizar bibliotecas tais como Graphics, Graphics2D e AffineTransform. É nesse trecho, que a interpretação do comando recebido será feita, atribuindo novos valores de posição e ângulo ao robo virtual.

public void executaComando(int i) {
if (i == 0x11) {
dX = Math.cos(angulo) * distancia;
dY = Math.sin(angulo) * distancia;
dAngulo = 0;
xRotacao=img.getWidth(null) / 2;
yRotacao=img.getHeight(null) / 2;
}
if (i == 0x99) {
dX = -Math.cos(angulo) * distancia;
dY = -Math.sin(angulo) * distancia;
dAngulo = 0;
xRotacao=img.getWidth(null) / 2;
yRotacao=img.getHeight(null) / 2;
}
if (i == 0x1) {
dAngulo = - distancia / entreRodas;
xRotacao=img.getWidth(null);
yRotacao=img.getHeight(null)/2;
}
if (i == 0x10) {
dAngulo = distancia / entreRodas;
xRotacao=0;
yRotacao=img.getHeight(null)/2;
}
if (i == 0x9) {
dAngulo = distancia / entreRodas;
xRotacao=img.getWidth(null);
yRotacao=img.getHeight(null)/2;
}
if (i == 0x90) {
dAngulo = - distancia / entreRodas;
xRotacao=0;
yRotacao=img.getHeight(null)/2;
}
if (i == 0x91) {
dX = 0;
dY = 0;
dAngulo = 2 * distancia / entreRodas;
xRotacao=img.getWidth(null) / 2;
yRotacao=img.getHeight(null) / 2;
}
if (i == 0x19) {
dX = 0;
dY = 0;
dAngulo = -2 * distancia / entreRodas;
xRotacao=img.getWidth(null) / 2;
yRotacao=img.getHeight(null) / 2;
}
x += dX;
y += dY;
angulo += dAngulo;
}
Até a semana que vem,
Juliana

sexta-feira, 2 de julho de 2010

Desenvolvimento em Java

>Por Juliana

Boa noite,
Na segunda-feira desta semana (27/jun), eu e a Mariana nos encontramos e desenvolvemos mais um pouco o projeto. No entanto, encontramos problemas, os quais só conseguimos resolver ontem (01/jul).
A seguir, lhes apresento o código, que a partir de um arquivo ggb, cria os diversos quadros de condição/ação correspondentes.
// Função que carrega o arquivo .ggb
public void Carregar(String caminho, Vector vetMinis) throws Exception {
Properties prop = new Properties();
FileInputStream pf = new FileInputStream(caminho);
prop.load(pf);
vetMinis.clear();
Prog1.pnArea.removeAll();
for (int i = 0; i < prop.size(); i++) {
String s = prop.getProperty("com" + i,"O1(0,0);O2(1,1);O1(1,1);O2(0,0)");
String p[] = s.split(",|\\(|\\),|\\);|\\)");
for (int j = 0; j < p.length; j++)
System.out.println(p[j]);
Mini mini = new Mini(Prog1.objs);
vetMinis.add(mini);
mini.acao.posObj[0]= Cardeais.calculaCardeal(Integer.parseInt(p[1]), Integer.parseInt(p[2]));
mini.acao.posObj[1]= Cardeais.calculaCardeal(Integer.parseInt(p[4]), Integer.parseInt(p[5]));
mini.condicao.posObj[0]= Cardeais.calculaCardeal(Integer.parseInt(p[7]), Integer.parseInt(p[8]));
mini.condicao.posObj[1]= Cardeais.calculaCardeal(Integer.parseInt(p[10]), Integer.parseInt(p[11]));
Prog1.pnArea.add(mini);
}
Prog1.pnArea.updateUI();
Prog1.pnArea.validate();
Dimension d = Prog1.pnArea.getPreferredSize();
}
Isso é tudo por hoje. Em breve traremos outros trechos de código, já que tal desenvolvimento deve se intensificar esse mês.
Juliana

JavaComm

>Por Mariana

Discutindo sobre o nosso projeto chegamos a conclusão que será usado JavaComm para comunicação serial com os robôs. Então resolvi trazer um pouco sobre essa ferramenta:

JavaComm
O Java Communications 3.0 API Java é uma extensão que facilita o desenvolvimento independente de plataforma para aplicações de comunicações tecnologias como cartões inteligentes, sistemas embarcados, e de dispositivos de ponto de venda, serviços financeiros dispositivos, fax, modems, terminais de vídeo e equipamentos robóticos.
O Java Communications API (também conhecido como javax.comm) prevê aplicações de acesso a RS-232 hardware (portas seriais) e acesso limitado a IEEE-1284 (portas paralelas) modo SPP.
Implementações da API estão atualmente disponíveis para Solaris SPARC, Solaris x86, x86 e Linux. Cada uma das implementações disponíveis Sun trabalha com o Sun Ray da linha de produtos thin client, e incluem portmapping extensões para permitir uma gestão para especificar a localização de portos, bem como a sua visibilidade, nomes, e em alguns casos anotados referência.

serial API características:
  • Enumeração de portas (administrador e usuário mapeamento de porta configurável)
  • Porto de configuração (taxa de transmissão, velocidade, bits de parada, paridade)
  • Acesso à EIA232 DTR padrão, CD, CTS, RTS e DSR sinais
  • Transferência de dados através de portas RS-232
  • opções de hardware e software de controlo do fluxo
  • Buffer de recepção de controle de limite
  • opção de evento assíncrono para a notificação de:
    • Os dados disponíveis sobre uma porta RS-232
    • hardware Port nível muda de linha
    • mudanças de propriedade do Porto, num único JVM

Até mais

sexta-feira, 25 de junho de 2010

Desenvolvimento em JAVA


>Por Mariana

Hey

Com o término da semana de provas, voltamos nosso foco para o projeto. Já faz algum tempo que mostrei a interface, decidi então trazer a atualização da nossa tela principal. A tela sofreu algumas modificações de layout, e ainda será muito mais modificada, a novidade é também que ao fechar a telá ela mostra um diálogo que irá salvar a lógica do usuário.



Até mais

sexta-feira, 18 de junho de 2010

Desenvolvimento JAVA

>Por Mariana

Hey
Já faz algum tempo que não posto nada relacionado com código, então trouxe um trecho interessante sobre a classe Arquivo, que cria e salva um arquivo .GGB onde será salvo o campo "com" que armazenará, as coordenadas dos objetos dispostos nas arenas, segundo o layout postado pela Juliana.

public class Arquivo {
public void Carregar() throws Exception {
Properties p = new Properties();
FileInputStream pf = new FileInputStream("aaa.dat");
p.load(pf);
System.out.println(p.getProperty("escola"));
System.out.println(p.getProperty("faculdade"));
System.out.println(p.getProperty("departamento", "computacao"));
}

public void Salvar(Vector mini) throws Exception {
Properties arqLogica = new Properties();
FileOutputStream pf = new FileOutputStream("teste.ggb");
for (int i = (mini.size()-1); i>=0; i--) {

arqLogica.put("com"+i, "O1("+mini.elementAt(i).acao.posObj[0].x+","+mini.elementAt(i).acao.posObj[0].y+
");O2("+mini.elementAt(i).acao.posObj[1].x+","+mini.elementAt(i).acao.posObj[1].y+")|"+
"O1("+mini.elementAt(i).condicao.posObj[0].x+","+mini.elementAt(i).condicao.posObj[0].y+
");O2("+mini.elementAt(i).condicao.posObj[1].x+","+mini.elementAt(i).condicao.posObj[1].y+")");

}
arqLogica.store(pf, "Coordenadas");

}
}
Obrigada à todos e boas provas!

Mariana

sexta-feira, 11 de junho de 2010

Telas Protótipo

>Por Mariana

Hey

Como foi solicitado pelo prof° Rodrigo para a apresentação de aplicativos, a se realizar amanhã (11/06/2010), trouxe as telas protópos do nosso sistema, a ser desenvolvido em Java. Confira as imagens abaixo:

Figura 1: Tela de login do sistema.


Figura 2: Tela do simulador 2D.


Figura 3: Tela da entrada da lógica do usuário.

Obs.: Todas as telas apresentadas são protótipos que podem ser alterados durante o desenvolvimento do projeto.

Boa sexta-feira à todos.