Ir ao conteúdo
  • Cadastre-se

Programa que controla Projetores


Posts recomendados

Boa Tarde galera, estou tentando fazer um programa em JAVA que facilite a utilização dos projetores, no local onde trabalho é utilizado o programa Hercules, mais não é muito viável, pois a todo momento tenho que estar pegando o código de cada função que quero que ele faça e passar para o programa. Bom consegui fazer a comunicação com as portas seriais que é onde ligo o projetor, mais não tenho ideia de como dar continuidade preciso de ajuda.

 

O código que tenho que abre e conversa com as portas é este logo abaixo:

 

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import gnu.io.CommPortIdentifier; 
import gnu.io.SerialPort;
import gnu.io.SerialPortEvent; 
import gnu.io.SerialPortEventListener; 
import java.util.Enumeration;


public class SerialTest implements SerialPortEventListener {
    SerialPort serialPort;
        
    private static final String PORT_NAMES[] = { 
            //"/dev/tty.usbserial-A9007UX1", // Mac OS X
                       // "/dev/ttyACM0", // Raspberry Pi
            //"/dev/ttyUSB0", // Linux
            "COM1", // Windows
    };
    
    private BufferedReader input;
    
    private OutputStream output;
    
    private static final int TIME_OUT = 2000;
    
    private static final int DATA_RATE = 9600;

    public void initialize() {
               
                

        CommPortIdentifier portId = null;
        Enumeration portEnum = CommPortIdentifier.getPortIdentifiers();

        
        while (portEnum.hasMoreElements()) {
            CommPortIdentifier currPortId = (CommPortIdentifier) portEnum.nextElement();
            for (String portName : PORT_NAMES) {
                if (currPortId.getName().equals(portName)) {
                    portId = currPortId;
                    break;
                }
            }
        }
        if (portId == null) {
            System.out.println("Could not find COM port.");
            return;
        }

        try {
            
            serialPort = (SerialPort) portId.open(this.getClass().getName(),
                    TIME_OUT);

            //set port parameters
            serialPort.setSerialPortParams(DATA_RATE,
                    SerialPort.DATABITS_8,
                    SerialPort.STOPBITS_1,
                    SerialPort.PARITY_NONE);

            //open the steams
            input = new BufferedReader(new InputStreamReader(serialPort.getInputStream()));
            output = serialPort.getOutputStream();

            //add event listenrs
            serialPort.addEventListener(this);
            serialPort.notifyOnDataAvailable(true);
        } catch (Exception e) {
            System.err.println(e.toString());
        }
    }

    
    public synchronized void close() {
        if (serialPort != null) {
            serialPort.removeEventListener();
            serialPort.close();
        }
    }

    
    public synchronized void serialEvent(SerialPortEvent oEvent) {
        if (oEvent.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
            try {
                String inputLine=input.readLine();
                System.out.println(inputLine);
            } catch (Exception e) {
                System.err.println(e.toString());
            }
        }
        
    }

    public static void main(String[] args) throws Exception {
        SerialTest main = new SerialTest();
        main.initialize();
        Thread t=new Thread() {
            public void run() {
                
                try {Thread.sleep(1000000);} catch (InterruptedException ie) {}
            }
        };
        t.start();
        System.out.println("Started");
    }
}
 

 

OBS: Estou utilizando a biblioteca rxtx para fazer funcionar.

 

Agora queria saber como faço para implementar os comando que tenho que mandar para o projetor. Quem puder me ajudar agradeço.

Link para o comentário
Compartilhar em outros sites

Andressa, esse seu problema é bem complicado. Primeiro porque é necessário saber se o respectivo projetor aceita comandos direto via porta serial e quais seriam esses comandos. Sem um manual de desenvolvimento para o projetor fica impossível saber os comandos que ele necessita.

 

Outra coisa é que talvez seja necessário utilizar alguma .dll (no Windows) ou algum .so (no Linux) para fazer a comunicação. Nesse caso, porém, também precisa da documentação do fabricante do projetor. 

 

Se descobrir como esse Hercules executa os envios das requisições com os respectivos códigos, será mais simples de fazer, mas com certeza não é algo trivial. 

 

Fazer Java conversar com hardware não é simples, ainda mais quando queremos operar periféricos.

 

Qual marca e modelo do projetor?

Link para o comentário
Compartilhar em outros sites

Então eu tenho ja as dll que é essa rxtx eu até consigo escutar já a porta, os comandos que são mandados para o projetor são feitos através de hexadecimal, vou experimentar fazer uma engenharia reversa no Hercules porque nele sempre tem que colocar o código ou em forma binaria ou hexadecimal eu queria só facilitar, onde no programa você clicaria na função e ela mandaria o código você não teria que estar passando sempre a mensagem pelo código. O projetor que é usado é o Optoma mais não sei exatamente qual modelo.

Link para o comentário
Compartilhar em outros sites

Já tentou usar um sniffer de porta serial para capturar o que o Hercules envia ao projetor?

 

Eu imagino que ele deva repassar diretamente o valor que você digitou em caso de Hexa e, em casos onde ele possui uma pre-definição onde você apenas envia um código, ele manda o comando correto para a porta.

 

É uma alternativa mais simples. Claro, eu posso estar completamente equivocado como o Hercules funciona, mas não custa tentar.

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

Pessoal ainda não consegui fazer o programa, para quem não entendeu porque não consigo me expressar as vezes, eu quero fazer um programa em JAVA que vai controlar as funções do projetor, funções como cor, contraste, etc.

Consegui na internet um código que conversa com a porta serial do projetor, mas agora não sei como dar continuidade, agradeço desde ja quem puder me dar uma ajuda. O projetor recebe essas funções/informações através de códigos binários e hexadecimal.

Obrigada Galera.

Link para o comentário
Compartilhar em outros sites

@andressa.funes Os comandos então você sabe eles todos já que fazia funcionar pelo Hercules, correto? 

 

Se você consegue usar a biblioteca rxtx para conversar com a porta, deve ter alguma função específica para enviar comandos RAW nele e daí repassar esses códigos hexadecimais.

 

Tem como colocar pra gente aqui um trecho do código e o local de download dessa dll?

Link para o comentário
Compartilhar em outros sites

Em 12/04/2017 às 14:33, TwistedSoul disse:

@andressa.funes Os comandos então você sabe eles todos já que fazia funcionar pelo Hercules, correto? 

 

Se você consegue usar a biblioteca rxtx para conversar com a porta, deve ter alguma função específica para enviar comandos RAW nele e daí repassar esses códigos hexadecimais.

 

Tem como colocar pra gente aqui um trecho do código e o local de download dessa dll?

o código que tenho é somente este no inicio do tópico onde ele abre a porta e fica ouvido.

Essas são as dll uma pra 64 bits outra pra 32 bits

mfz-rxtx-2.2-20081207-win-x64.zip

rxtx-2.1-7-bins-r2.zip

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...