Benutzer-Werkzeuge

Webseiten-Werkzeuge


virtuelles_java-teleskop

Dies ist eine alte Version des Dokuments!


virtelles Java-Teleskop

Übersicht

Die grundsätzliche Arbeitsweise zwischen Linux und dem Teleskop (Steuerung) kann man auch ohne Elektronik (& Teleskop) studieren. Die drei großen Clients (KStart, Skychart und Stellarium) können mit der Indi-Schnittstelle kommunizieren und virtuelle Teleskopmontierungen einbinden. Diese Teleskopsimulatoren sind technisch gesehen INDI-C-Treiber. Ich erzeuge hier z.B. mit Java eine virtuelle serielle Schnittstelle und benutze "täusche" eine rudimentäre LX200 Montierung vor, die mit Stellarium verwendet werden kann. == Software == <WRAP center round info 95%> Um mit Java auf den Arduino über die serielle Schnittstelle zugreifen zu können, verwenden wir die jSSC (Java Simple Serial Connector) API. Sie besteht aus nur einer jar-Datei und wird auch von der Arduino-IDE selbst verwendet. In Eclipse wird sie über Eigenschaften (Java Build Path - Add External JAR's...) dem Projekt hinzugefügt. https://code.google.com/archive/p/java-simple-serial-connector/ oder (jar-Datei bitte auspacken ^_^) {{ :serial.zip

socat - universelles Linux Netwerk Tool

==== Installation und Inbetriebnahme ==== 1. Virtuelle serielle Schnittstelle erzeugen

socat -d -d PTY,link=/dev/ttyUSB60 PTY,link=/dev/ttyUSB61

2.Rechte setzen

# chmod 777 /dev/ttyUSB6*

3. Testen i) Konsole

echo ":GD#" > /dev/ttyUSB60

Simulator.java sollte Nachricht anzeigen! ii) Stellarium lx200 Teleskop einrichten mit /dev/ttyUSB60 als Device Die auf diese Weise angelegte Schnittstelle muss häufig neu eingerichtet werden (Schritte 1 und 2). Es soll zum eigenen Experimentieren anregen und lediglich die grundlegende Kommunikation aufzeigen.

package test;
 
import com.fazecast.jSerialComm.SerialPort;
 
public class Test01 {
 
	public static void main(String[] args) {
		SerialPort comPort = SerialPort.getCommPorts()[2];
		comPort.openPort();
		comPort.setComPortTimeouts(SerialPort.TIMEOUT_READ_SEMI_BLOCKING, 100, 0);
		try {
			while (true) {
				byte[] readBuffer = new byte[1024];
				int numRead = comPort.readBytes(readBuffer, readBuffer.length);
 
				if (numRead > 0) {
					plot(numRead, readBuffer);
 
					if(getRADEC(numRead,readBuffer)){
						System.out.println("received radec messgage");
						writeRADEC(comPort);
					}
					if (isGetRA(numRead, readBuffer)) {
						System.out.println("received ra messgage");
						writeRa(comPort);
					}
					if (isGetDec(numRead, readBuffer)) {
						System.out.println("received dec messgage");
						writeDec(comPort);
					}
					//
				}
				Thread.sleep(100);
 
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		comPort.closePort();
 
	}
 
	static void plot(int numRead, byte[] readBuffer) {
		System.out.println("Read " + numRead + " bytes.");
 
		for (int i = 0; i < numRead; i++) {
			char c = (char) readBuffer[i];
			System.out.print(c);
		}
		System.out.println("");
	}
	static boolean getRADEC(int num, byte[] readBuffer) {
		char c[] = new char[num];
		if (readBuffer.length < 1)
			return false;
 
		for (int i = 0; i < num; i++) {
			c[i] = (char) readBuffer[i];
 
		}
 
		if (c[0] == 'e' ) {
			return true;
		}
 
		return false;
	}
 
	static void writeRADEC(SerialPort p) {
 
		String str = "34AB0500,12CE0500#";
		byte[] buffer = new byte[18];
		byte[] byte_str = str.getBytes();
		for (int i = 0; i < 18; i++)
			buffer[i] = byte_str[i];
 
//		buffer[9] = 0x0D;
//		buffer[10] = 0x0A;
 
		p.writeBytes(buffer, (long) buffer.length);
	}
 
 
 
 
 
 
 
 
	static boolean isGetRA(int num, byte[] readBuffer) {
		char c[] = new char[num];
		if (readBuffer.length < 4)
			return false;
 
		for (int i = 0; i < num; i++) {
			c[i] = (char) readBuffer[i];
 
		}
 
		if (c[0] == '#' && c[1] == ':' && c[2] == 'G' && c[3] == 'R' && c[4] == '#') {
			return true;
		}
 
		return false;
	}
 
	static boolean isGetDec(int num, byte[] readBuffer) {
		char c[] = new char[num];
		if (readBuffer.length < 4)
			return false;
 
		for (int i = 0; i < num; i++) {
			c[i] = (char) readBuffer[i];
 
		}
 
		if (c[0] == '#' && c[1] == ':' && c[2] == 'G' && c[3] == 'D' && c[4] == '#') {
			return true;
		}
 
		return false;
	}
 
	static void writeRa(SerialPort p) {
 
		String str = "14:15:00#";
		byte[] buffer = new byte[9];
		byte[] byte_str = str.getBytes();
		for (int i = 0; i < 9; i++)
			buffer[i] = byte_str[i];
 
//		buffer[9] = 0x0D;
//		buffer[10] = 0x0A;
 
		p.writeBytes(buffer, (long) buffer.length);
	}
 
	static void writeDec(SerialPort p) {
		String str = "+19*10#";
		//"%c%02d%c%02d:%02d#"
		byte[] buffer = new byte[7];
		byte[] byte_str = str.getBytes();
		for (int i = 0; i < 7; i++)
			buffer[i] = byte_str[i];
//
//		buffer[7] = 0x0D;
//		buffer[8] = 0x0A;
 
		p.writeBytes(buffer, (long) buffer.length);
	}
 
}
virtuelles_java-teleskop.1561376947.txt.gz · Zuletzt geändert: 2020/11/22 16:52 (Externe Bearbeitung)