Archiv verlassen und diese Seite im Standarddesign anzeigen : Steuersoftware programieren, aber womit?
Hallo Leute,
ich hoffe ich bin mit meinen Fragen hier richtig!
ich würde meinen Roboter gerne vom PC aus fernsteuern, Sensoren abfragen, Kamera schwenken, Funktionen umschalten usw.....
Ich habe mir auch schon den RN-Funk Bausatz von Roboterhardware.de bestellt und möchte das damit realisieren.
Jetzt zu meinen Fragen:
1. Mit was für einem Programm realisiere ich das am besten? (VB?)
2. Kann ich für die Kommunikation zwischen der Software und dem Bot die
selbe Schnittstelle benutzen mit der ich den Bot programiert habe?
Was sind eure Erfahrungen, Meinungen? Hat das einer schon gemacht?
Dieses Bild habe ich irgend wann mal im Web gefunden und würde meine Oberfläche gerne ähnlich gestallten.
Goldenflash
22.09.2005, 20:32
Hallo,
Also ich habe mal ein kleines Programm mit VB geschrieben welches die Blöcke à 8 Zeichen die ein AVR an meinen PC sendet wieder zu einem String zusammensetzt und dann die Sensordaten ausliest.
Mit VB lässt sich sowas sehr leicht realisieren!
Allerdings war das bei mir mit Kabel, aber soweit ich weiß sollen die Funkboards wie ein serielles Kabel funktionieren.
Das Senden habe ich noch nicht getestet, aber ich denke mir dass das auch nicht wirklich ein so großes Problem darstellt. (Vor allem nicht in VB und Bascom. :wink:
2. Kann ich für die Kommunikation zwischen der Software und dem Bot die
selbe Schnittstelle benutzen mit der ich den Bot programiert habe?
Also ich programmiere meinen AVR über Com-Port und über den gleichen Port läuft auch die Kommunikation.
NULL PROBLEME
Gruß Florian
Also für grafische Anwendungen, die nicht unbedingt auf Leistung getrimmt werden müssen, würde ich Delphi empfehlen. Die Sprache ist zwar etwas gewöhnungsbedürftig, aber man kann alles sehr schnell und leicht erstellen.
Ansonsten ist mein absoluter Favorit Java. Wenn man sich ein bißchen in AWT, Swing oder SWT einarbeitet, hat man sehr schnell eine sehr hübsche grafische Oberfläche, dazu ist das Programm sehr schnell und man kann mit Java auch leicht z.B. auf die Ports zugreifen.
Vielen Dank für die raschen Antworten, den Controller habe ich auch erfolgreich mit Bascom AVR programiert.
Für die Steuersoftware wird hier öfter VB verwendet wie es auch Goldenflash macht.
Mir würde aber Java mehr zusagen. Vor allem, weil ich das in der Schule lerne. Wäre ne gut lernergänzung (Zwei Fliegen mit einer Klatsche...)
@maze2k: könntest du mir freundlicher weise einen Codeschnipsel posten, auf dem zu sehen ist wie du auf die Ports zugreifst? Wäre echt nett.
Schau mal in meinem Beitrag in diesem Thread: Link (https://www.roboternetz.de/phpBB2/viewtopic.php?p=116309#116309)
Dort habe ich die Links angegeben, wo man die Java Bibliotheken downloaden kann, um auf die Schnittstellen zuzugreifen.
(hier (http://java.sun.com/products/javacomm/index.jsp))
Unter dem Link Beispiele (http://java.sun.com/products/javacomm/javadocs/API_users_guide.html) findest du zwei kleine Beispiele zum Zugriff auf die Ports.
pebisoft
23.09.2005, 09:08
"und man kann mit Java auch leicht z.B. auf die Ports zugreifen."
hallo, könntest du mir mal ein beispiel senden mit den zugriff auf die serielle schnittstelle. würde mich sehr freuen. weil ich es noch nicht geschafft habe.
danke.
mail: pebisoft@arcor.de
mfg pebisoft
Wenn du's unter Windows machst, probier einfach mal das, dann brauchst du nicht mal zusätzliche Bibliotheken:
File serial = new File("com1:4800,n,8,1");
Das öffnet den Seriellen Port 1 mit 4800 bps, keine Parität, 8 bits, 1 stop bit.
Wenn du mein Beispiel von oben benutzen möchtest, beachte die Installationsanweisungen.
Wichtig ist:
win32com.dll ins <JDK>/bin Verzeichnis kopieren
javax.comm.properties ins <JDK>/lib Verzeichnis kopieren
und natürlich die comm.jar in den classpath :)
Hier das Beispiel, das ich oben gepostet habe, zusätzlich für Windows (das Beispiel war nur für Linux):
package de.robot.communication;
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.TooManyListenersException;
import javax.comm.CommPortIdentifier;
import javax.comm.PortInUseException;
import javax.comm.SerialPort;
import javax.comm.SerialPortEvent;
import javax.comm.SerialPortEventListener;
import javax.comm.UnsupportedCommOperationException;
public class Simple implements Runnable, SerialPortEventListener {
static CommPortIdentifier portId;
static Enumeration portList;
InputStream inputStream;
SerialPort serialPort;
Thread readThread;
public Simple() {
try {
serialPort = (SerialPort) portId.open("SimpleReadApp", 2000);
} catch (PortInUseException e) {
}
try {
inputStream = serialPort.getInputStream();
} catch (IOException e) {
}
try {
serialPort.addEventListener(this);
} catch (TooManyListenersException e) {
}
serialPort.notifyOnDataAvailable(true);
try {
serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8,
SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
} catch (UnsupportedCommOperationException e) {
}
readThread = new Thread(this);
readThread.start();
}
public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
}
public void serialEvent(SerialPortEvent event) {
switch (event.getEventType()) {
case SerialPortEvent.BI:
case SerialPortEvent.OE:
case SerialPortEvent.FE:
case SerialPortEvent.PE:
case SerialPortEvent.CD:
case SerialPortEvent.CTS:
case SerialPortEvent.DSR:
case SerialPortEvent.RI:
case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
break;
case SerialPortEvent.DATA_AVAILABLE:
byte[] readBuffer = new byte[20];
try {
while (inputStream.available() > 0) {
int numBytes = inputStream.read(readBuffer);
}
System.out.println(new String(readBuffer));
} catch (IOException e) {
}
break;
}
}
public static void main(String[] args) {
System.out.println("listing ports...");
boolean portFound = false;
portList = CommPortIdentifier.getPortIdentifiers();
while (portList.hasMoreElements()) {
portFound = true;
portId = (CommPortIdentifier) portList.nextElement();
if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
System.out.println("\tfound port: " + portId.getName());
Simple reader = new Simple();
}
}
if (!portFound) {
System.out.println("no port found!");
}
}
}
Das Programm gibt dann die Bytes aus, die ein Gerät am seriellen Port sendet.....
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.