CAPA PARA OS CABOS DA CABEÇA



Documentos relacionados
A TAMPA DO COMANDO À DISTÂNCIA

A BANDEJA PORTA-OBJECTOS

A PLACA DO COMANDO À DISTÂNCIA

Java : Comunicação Cliente-Servidor.

Programação Gráfica em Java.

Programação Concorrente em java - Exercícios Práticos Abril 2004

Java. Marcio de Carvalho Victorino

Para desenvolver a atividade a atividade desta aula utilizaremos o ambiente de desenvolvimento integrado NetBeans.

Analisar os sistemas operacionais apresentados na figura e responder as questões abaixo: Identificar

Multithreading. Programação Orientada por Objectos com Java. Ademar Aguiar. MRSC - Programação em Comunicações

Exercício 1 : As classes abaixo serão utilizadas neste exercício: public class Ponto { int x; int y; public Ponto(int x, int y){ this.

Programação de Computadores - I. Profª Beatriz Profº Israel

Universidade da Beira Interior. Sistemas Distribuídos

Técnicas de Programação II

Java 2 Standard Edition Como criar classes e objetos

Curso Adonai QUESTÕES Disciplina Linguagem JAVA

THREADS EM JAVA. George Gomes Cabral

Aula 30 - Sockets em Java

JAVA APLICAÇÕES GRÁFICAS Propriedade Utilizada: FontSizeAnimation

Sistemas Paralelos e Distribuídos /2004 Curso: Matemática /Informática Sistemas Distribuídos /2004 Curso: Ensino da Informática

Is Event Dispatcher Threade (Animation)

Java Básico. Classes Abstratas, Exceções e Interfaces Prof. Fernando Vanini Ic-Unicamp

Programação Orientada a Objetos em Java. Threads Threads Threads. Threads

Tratamento de Eventos

8 Classes Internas. Desenvolvimento OO com Java. Vítor E. Silva Souza

Introdução a Java. Hélder Nunes

Threads e Concorrência em Java (Material de Apoio)

CURSO DE PROGRAMAÇÃO EM JAVA

Threads e Sockets em Java. Threads em Java. Programas e Processos

Especialização em desenvolvimento para web com interfaces ricas. Tratamento de exceções em Java Prof. Fabrízzio A. A. M. N. Soares

Prototype, um Design Patterns de Criação

Num sistema de objectos distribuídos, dois conceitos são fundamentais.

public Agenda() { compromissos = null; } public int getnumerodecompromissos() { if (compromissos==null) return 0; else return compromissos.

Programação Orientada a Objetos e Java - Introdução. Carlos Lopes

Natureza do Software e dos Sistemas

Guia de Fatores de Qualidade de OO e Java

PROGRAMAÇÃO ORIENTADA A OBJETOS -TRATAMENTO DE EXCEÇÕES. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

3 Classes e instanciação de objectos (em Java)

Objectivos:. Construir programas com interfaces gráficas Graphical User Interface (GUI) application programs

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery

Exercícios de Revisão Java Básico

Exemplo 1. Um programa que cria uma instância de uma classe que herda da classe Frame

Para criar uma animação precisamos de uma imagem e que ela contenha alguns frames. O número de frames é uma escolha sua.

Unidade IV: Ponteiros, Referências e Arrays

POO Programação Orientada a Objetos. Classes em Java

Orientação a Objetos

Como foi exposto anteriormente, os processos podem ter mais de um fluxo de execução. Cada fluxo de execução é chamado de thread.

Noções sobre Objetos e Classes

Java Threads. Introdução

Membros de classe e de instância. PARTE III: Java e OO - detalhes. Exemplo 1: método. Exercício. Exemplo 1 corrigido

Programação Orientada a Objetos em Java

insfcanceof new public switch transient while byte continue extends for int null

O programa abaixo exemplifica o uso da classe Image para carregar e mostrar uma imagem localizada em um arquivo.

Universidade da Beira Interior Cursos: Matemática /Informática e Ensino da Informática

(Aula 17) Threads em Java

A Introdução à Programação Orientada a Objetos. Programação e Sistemas de Informação

Keeper of Knowledge. Capítulo 2 Classes em Java

JAVA APLICAÇÕES GRÁFICAS Propriedades Utilizadas: Resize Shape Basic Shape FACULDADE DE TECNOLOGIA SENAC PELOTAS

Prova de Java. 1) Copie o programa abaixo no eclipse e complete-o, utilizando os conceitos aprendidos durante o curso. (4 pontos)

2 Orientação a objetos na prática

Sistemas Distribuídos

A ) O cliente terá que implementar uma interface remota. . Definir a interface remota com os métodos que poderão ser acedidos remotamente

Interfaces Gráficas: Interações Complexas

Chamadas Remotas de Procedimentos (RPC) O Conceito de Procedimentos. RPC: Programa Distribuído. RPC: Modelo de Execução

Aula 2. Objetivos. Encapsulamento na linguagem Java; Utilizando a referência this.

SAMUO APP: MANUAL DO ADMINISTRADOR

Leitor MaxProx-Lista-PC

Programação Concorrente em Java. Profa Andréa Schwertner Charão DLSC/CT/UFSM

A Linguagem Java. Alberto Costa Neto DComp - UFS

Sintaxe Geral Tipos de Dados. Prof. Angelo Augusto Frozza, M.Sc.

ESQUEMA AULA PRÁTICA 1 Familiarização com o Ambiente de Desenvolvimento Eclipse Introdução à Linguagem de Programação JAVA

Algoritmos I Aula 13 Java: Tipos básicos, variáveis, atribuições e expressões

CONCEITOS DE LINGUAGEM DE PROGRAMAÇÃO CARACTERÍSTICAS. João Gabriel Ganem Barbosa

Módulo 07 Características Avançadas de Classes

SISTEMAS DISTRIBUÍDOS

Programação de Computadores - I. Profª Beatriz Profº Israel

Comandos de repetição For (inicialização; condição de execução; incremento/decremento) { //Código }

Como construir um compilador utilizando ferramentas Java

Linguagem de Programação III

Unidade Acadêmica: Faculdade de Computação FACOM Disciplina: Programação Orientada a Objetos I Professor: Fabiano Azevedo Dorça Prática 01

Laboratório de Computação VI JAVA IDL. Fabricio Aparecido Breve

Um pouco do Java. Prof. Eduardo

GeoMafra Portal Geográfico

Display de 7. PdP. Autor: Tiago Lone Nível: Básico Criação: 16/12/2005 Última versão: 18/12/2006. Pesquisa e Desenvolvimento de Produtos

Implementando uma Classe e Criando Objetos a partir dela

1.6. Tratamento de Exceções

Lista de Contas: Assinatura. Lista de Contas. Listas de Contas: Descrição. Listas de Contas: Descrição. Listas de Contas: Descrição

Tutorial de Computação Introdução a Programação Gráfica em Java para MEC1100 v

Conceitos importantes

Implementação de Classe e Auto-Relacionamento em Java

Padrões de Projeto. Singleton

Internet Update de PaintManager TM. Manual de instalação e utilização do programa de actualização

Orientação a Objetos com Java

Sistemas Operacionais

Configurar o Furbot no Eclipse

MÓDULO 4 SWING Parte 3

Transcrição:

CAPA PARA OS CABOS DA CABEÇA COMPONENTES Entre as peças entregues com este fascículo encontra-se uma espécie de tubo preto para reunir e proteger os cabos que saem da cabeça e vão ao tronco de O SEU ROBOT. Com este fascículo começam-se a reunir as peças que vão formar o comando à distância de O SEU ROBOT. Concretamente, entrega-se a primeira metade da caixa. Contudo, além desta última, também são fornecidos outros dois elementos. O primeiro é um tubo de fios entrançados que vai servir de capa protectora dos cabos que saem da cabeça do robot, passam pelo pescoço e ligam a placa do detector de som à câmara CMOS das placas internas do tronco. A última peça é uma tira de velcro que permitirá fixar a capa à volta dos cabos. As instruções fornecidas seguidamente mostram como se deve colocar a tira protectora. BRAÇOS E MÃO, 17 2. 1. A tira de velcro pode utilizar-se para unir os fios que vão da cabeça ao tronco (imagem inferior) e, assim, protegê-los. 3. 1. Primeira metade da caixa do comando à distância 2. Tira protectora 3. Tira de velcro para prender A CAPA 1Antes de se colocar a capa protectora dos fios retira-se o suporte passa-cabos em forma de U que está no orifício da abertura da cabeça (à direita). MONTAGEM 1339

84-paso a paso (1) 9/22/08 9:18 AM Page 12 PASSO A PASSO A CAPA (CONTINUAÇÃO) MONTAGEM Agora pega-se na capa e começa-se a envolver com ela os cabos da cabeça. Começa-se pela parte inferior atrás do pescoço e prossegue-se para a cabeça do robot (imagem da esquerda). 2 Agora há que manter os cabos dentro e continuar a colocar a capa. Também se envolve a parte dos cabos que está mais perto do orifício da abertura da cabeça (imagem inferior). 3 Mantém-se a capa fechada à volta dos fios na parte inferior, perto do tronco, e insere-se no orifício que está na abertura da cabeça, de maneira a ficar a envolver os cabos (imagem inferior). 4 Conclui-se a fixação da capa protectora fechando pela sua parte inferior com a tira de velcro, que também é entregue com este fascículo. Aperta-se bem, de maneira a manter bem presa a capa que envolve os cabos (imagem da direita). 5 1340

UN UM DETECTOR DE SONS EN EM JAVA Nestas páginas mostra-se um novo exemplo de código Java para O SEU ROBOT. Desta vez trata-se de um display gráfico que permite visualizar a direcção de procedência de sons secos que o robot capta graças ao detector de som. Em fascículos anteriores foram apresentados diferentes exemplos de código Java de programas de interacção com O SEU ROBOT. Até agora foram mostrados vários controladores com o seu interface gráfico, que permitem gerir o funcionamento de alguns sistemas do robot que actuam sobre os objectos mostrados em vídeo a partir do PC. Com o exemplo descrito nestas páginas cria-se um interface gráfico que, neste caso, não corresponde a um controlador mas sim a um monitor. Esta aplicação poderá monitorizar a direcção de procedência dos sons secos percebidos pelo robot. Este consegue captar esses «ruídos» mesmo quando o comportamento «Seguir som» (que faz com que o robot se vire na direcção de procedência desse som) não está activo. O display que se verá no ecrã do PC mostrará o resultado dos processamentos realizados constantemente pela placa detector de som quando o robot «ouve» sons como palmas ou estalar de dedos. Tal como acontecia nos exemplos anteriores, também neste caso o programa está formado por duas classes, DisplayPanel e SoundDirection, que se armazenam respectivamente nos arquivos DisplayPanel.java e SoundDirection.java. Em cima, um screenshot do promt das ordens que mostra o início da execução do programa SoundDirection, com indicação da porta de série virtual de ligação entre o PC e O SEU ROBOT, neste caso COM3. Mais em cima, à direita, o painel que se vê no monitor. Os círculos (em repouso e cor verde) indicam as seis possíveis direcções que o robot identifica como procedência dos sons secos percebidos. Para a compilação e a execução há que ter em conta as considerações que já foram tecidas em ocasiões anteriores. A CLASSE DISPLAY PANEL A primeira classe, DisplayPanel, gere as mudanças que se produzem no display gráfico. Na prática, esta classe descreve as acções que é preciso levar a cabo quando se detecta uma determinada direcção de procedência do som. Comparado com o das classes de controlo que desenvolvemos em fascículos anteriores, o código da classe DisplayPanel é bastante simples. Como de costume, começa com as declarações package e import. Estas últimas dizem respeito a algumas classes de suporte Java para elementos gráficos. Aquilo que DisplayPanel faz é «estender» uma classe Java previamente elaborada, JPanel, que modela os painéis gráficos standard. Isto significa que um objecto DisplayPanel conta com todos os métodos e atributos da classe standard JPanel mais aqueles que são definidos definidos dentro do código da mesma classe DisplayPanel. O único atributo «específico» desta última é um número inteiro, chamado sensor, que assume um valor total entre 0 e 6, consoante a direcção de procedência do som (a atribuição realiza-se com um método da classe PROGRAMAÇÃO 1341

Em cima, as diferentes configurações possíveis do painel, baseando-se na direcção dos sons percebidos em relação à cabeça do robot. No sentido dos ponteiros do relógio, a começar em cima, à esquerda: o som percebido posteriormente, o som percebido lateralmente à esquerda, o som percebido de frente à esquerda, o som percebido de frente, o som percebido de frente à direita, o som percebido lateralmente à direita. SoundDirection). Baseando-se no valor de sensor, modifica os círculos do display mostrado em vídeo, dando a um deles uma cor vermelha, que indicará a direcção detectada. Em concreto, o método paintcomponent é formado basicamente por um bloco switch, que discrimina o valor assumido por sensor e chama às acções mais correctas, mostrando círculos da cor oportuna. O segundo, e último, método introduzido no código da classe DisplayPanel (draw) proporciona o suporte necessário para o correcto funcionamento do programa, «copiando» o valor de sensor e deixando o método repaint pré-definido na classe JPanel. A CLASSE SOUNDDIRECTION Se DisplayPanel gere as modificações na cor dos círculos dentro do painel gráfico, SoundDirection ocupa-se do controlo geral do programa e da leitura dos correspondentes registos de O SEU ROBOT dos sons percebidos. Depois da declaração de pacote, o código SoundDirection mostra as importações necessárias. Trata-se das classes de suporte para O SEU ROBOT relacionadas com a comunicação no PC e com a leitura de registos da placa detector de som, além de com outras classes específicas de suporte Java, que incluem algumas das que servem para a gestão do interface gráfico e dos eventos que se geram no seu interior. Tal como no caso de DisplayPanel, SoundDirection também estende uma classe standard, JFrame, que modela um frame genérico. No «jargão» Java, quando se fala de um frame faz-se referência a uma janela que se mostra em vídeo (que neste exemplo se trata da janela na qual se mostra o display de monitorização da direcção dos sons). Os atributos específicos da classe SoundDirection compreendem os «habituais» portname, protocol e internal, correspondentes à comunicação entre robot e PC. A estes três juntam-se displaypanel (objecto da classe homónima), t (de tipo Thread) e um atributo verdadeiro/falso, de nome active. Estes dois últimos atributos têm uma grande importância no funcionamento do programa porque permitem ao display monitorizar de maneira constante o estado dos registos de direcção do som. O primeiro dos métodos mostrados no código da classe SoundDirection é o método principal. Como de costume, este verifica a presença de um parâmetro que indique a porta de ligação que se vai utilizar e, a seguir, lança a execução do construtor SoundDirection, que se ocupa de gerir o encerramento da janela do programa (com o consequente desligar do robot e a finalização do próprio programa). Depois disso cria uma instância de DisplayPanel, mostrando finalmente o display em vídeo com todos os círculos de cor verde (displaypanel.draw, com um parâmetro equivalente a 0). Uma vez lançada a ligação, o método construtor SoundDirection cria o atributo t de tipo Thread, associando-o a um novo objecto pertencente à nova classe RefreshDisplay. Esta última define-se no interior de SoundDirection e implementa o interface Java standard de nome Runnable. Esta classe permite gerir um determinado tipo de objectos Java, dos quais fazem parte os fios, ou seja, «processos» que continuam a executar-se paralelamente aos outros programas. Uma vez lançado um fio, este executa-se até que se lhe indica que deve parar. Regressando à miniclasse RefreshDisplay, esta descreve o método run, característico de cada classe que implementa Runnable e que especifica as operações que se têm que executar no «processo paralelo». No nosso caso, quando está activo (ciclo while com variável de controlo active), o fio tem que ler os registos do detector de sons, memorizar em sensor a direcção medida, chamar o método draw de DisplayPanel e esperar dez milissegundos 1342

UM DETECTOR DE SONS EM JAVA antes de repetir tudo (Thread.sleep com parâmetro equivalente a 10). Desta maneira, enquanto o programa «principal» controla o display mostrado por vídeo (caso o utilizado feche a janela correspondente, interrompe tudo), o fio continua a controlar os registos do detector, verificando se um som é detectado e a direcção de procedência. Finalmente, o código da classe fecha-se com os habituais métodos ligar e desligar. EXEMPLOS DE PROGRAMAÇÃO Exemplo de código Java para a implementação de uma classe de gestão para um painel gráfico que monitorize a direcção dos sons secos percebidos por O SEU ROBOT graças à placa detector de sons. Concretamente, a classe mostrada, que amplia JPanel, ocupa-se de mostrar em vídeo alguns círculos de cor segundo o valor do atributo numérico do sensor. CLASSE DISPLAYPANEL package communication.examples; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class DisplayPanel extends JPanel { private int sensor = 0; public void paintcomponent(graphics g) { super.paintcomponent(g); switch(sensor) { case 0: { case 1: { case 2: { case 3: { case 4: { case 5: { case 6: { // switch // paintcomponent public void draw(int sensor) { // draw this.sensor = sensor; repaint(); // class DisplayPanel 1343

EXEMPLOS DE PROGRAMAÇÃO Exemplo de código Java para a implementação de uma classe de controlo dos registos correspondentes à direcção de procedência dos sons secos percebidos por O SEU ROBOT. A classe, que amplia JFrame, contém o método principal do programa (main). Dentro da classe também fica definida uma miniclasse (RefreshDisplay) que implementa Runnable. Esta miniclasse define a execução do atributo t de tipo Thread. Este ocupa-se de interrogar os registos correspondentes à direcção de procedência dos sons e de invocar o método draw da classe DisplayPanel. CLASSE SOUNDDIRECTION package communication.examples; import communication.handler.protocolhandler; import communication.handler.internal.internalhandler; import communication.transport.connectionprovider; import communication.handler.internal.internalmodule; import communication.handler.internal.headdata; import communication.handler.internal.headregister; import java.io.ioexception; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class SoundDirection extends JFrame { private static String portname; private ProtocolHandler protocol; private InternalHandler internal; DisplayPanel displaypanel; Thread t; boolean active = false; public static void main(string[] args) { if (args.length < 1) { System.err.println(«Especifica a porta que tem que se utilizar para a ligação (ex: COM5)»); return; portname = args[0]; SoundDirection gui = new SoundDirection(); public SoundDirection () { super(«sounddirection»); addwindowlistener( new WindowAdapter() { public void windowclosing(windowevent e) { active = false; desligar(); System.exit(0); ); setbounds(0,0,350,250); displaypanel = new DisplayPanel(); displaypanel.draw(0); getcontentpane().add(displaypanel); if (!ligar()) System.exit(0); t = new Thread(new RefreshDisplay()); active = true; t.start(); setvisible(true); // class constructor private class RefreshDisplay implements Runnable { int[] buf = new int[1]; int sensor = 0; public void run() { while(active) { try { internal.readregister(internalmodule.head, HeadRegister.SOUND_AND_TOUCH, buf); sensor = buf[0] >> 1; displaypanel.draw(sensor); Thread.sleep(10); catch (Exception e) { e.printstacktrace(); // class RefreshDisplay(); private boolean ligar() { ConnectionProvider provider = new SerialJavaxCommProvider(portName,9600); protocol = new ProtocolHandler(provider, 9600); internal = new InternalHandler(); protocol.addcapabilityhandler(internal); System.out.println(«Ligando...»); try { if (!protocol.connect()) { System.err.println(«impossível ligar!»); return false; if (!protocol.setup(5000)) { System.err.println(«Falhou o estabelecimento da ligação!»); protocol.disconnect(true); return false; catch (Exception e) { e.printstacktrace(); return false; System.out.println(«Cliente ligado»); return true; // ligar private void desconectar() { System.out.println(«Desligando...»); try { protocol.disconnect(false); catch (Exception e) { e.printstacktrace(); return; System.out.println(«Cliente desligado»); // desligar // class SoundDirection 1344