Dies ist eine alte Version des Dokuments!
Inhaltsverzeichnis
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
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.
Details
Software
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); } }