rxtx OutputStream sendet falsche werte

maximilian1

Mitglied
Hallo ich habe meinen Arduino MC über USB mit meinem PC verbunden. Ich nutze Eclipse und die rxtx erweiterungen. Die kommunikation mit dem MC funktioniert auch, wenn ich kleine Werte "schicke" 0-255. Sobald ich größere Werte schicke kommen am MC nicht mehr die richtigen zahlen heraus.
hier nochmal mein code:

Java:
package eventbased;

import java.io.IOException;
import java.io.OutputStream;

import javax.swing.JSlider;

/** */
public class SerialWriter implements Runnable 
{
	OutputStream out;
	private JSlider silder;
	private JSlider silder2;
	private JSlider silder3;

	public SerialWriter ( OutputStream out, JSlider silder, JSlider silder2, JSlider silder3 )
	{
		this.out = out;
		this.silder = silder;
		this.silder2 = silder2;
		this.silder3 = silder3;
	}

	public void run ()
	{   
		int value = 0;
		int value2 = 0;
		int value3 = 0;
		while ( true )
		{
			try {

				if( value != silder.getValue() ){
					this.out.write(value+1000 );
//					System.out.println(value+1000);
					value = silder.getValue();
				}
				
				
				if( value2 != silder2.getValue() ){
					this.out.write(value2+2000);
//					System.out.println(value2+2000);
					value2 = silder2.getValue();
				}
				
				
//				if( value3 != silder3.getValue() ){
//					this.out.write(value3+3000);
//					System.out.println(value3+3000);
//					
//				value3 = silder3.getValue();
//				}
				Thread.sleep(100);
				
				
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}                
	}
}

danke führ eure hilfe
 

HoaX

Top Contributor
Du darfst einfach nicht write(int) mit Werten >255 aufrufen, sondern musst den Wert vorher selbst in eine entprechende Repräsentation aus mehreren Bytes zerlegen und dann diese senden. Sonst gibts schnell wirrwarr wenn du z.B. in Big Endian sendest aber Little Endian liest.
 

maximilian1

Mitglied
Java:
public static byte[] intToByteArray(int value) {
        byte[] b = new byte[4];
        for (int i = 0; i < 4; i++) {
            int offset = (b.length - 1 - i) * 8;
            b[i] = (byte) ((value >>> offset) & 0xFF);
        }
        return b;
    }

Java:
this.out.write( intToByteArray( 1000 ),0,4 );

kommt aber trotzdem nur falsche zahlen an.

vom MC zum PC läuft das mit größeren zahlen aber problemlos. Was mach ich da falsch?
 

HoaX

Top Contributor
Schreib dir doch einen Test für die Methode, dann siehst du, dass sie korrekt funktioniert:
Code:
// Groovy
groovy:000> a = intToByteArray(0xffaabbcc as Integer)
===> [B@28996b65
groovy:000> a.collect { Integer.toHexString(it & 0xff) }.join(', ')
===> ff, aa, bb, cc

Evtl. liegt dein Fehler nicht im Javacode sondern in deinem C-Code auf dem Controller? Kannst ja mal den Code von dort mal posten.

Und was meinst du mit PC? Das Javaprogramm läuft doch auch auf dem PC, also müsste das nach der Aussage ja auch gehn?!

Nachtrag:
Im DataOutputStream gibt es eine Methode writeInt(int) die das Selbe macht wie dein Code, kannst die ja auch mal probieren.

Nachtrag2:
Besser lesbar und auch nicht länger wäre deine Methode so:
Java:
public static byte[] intToByteArray(int value) {
    byte[] b = new byte[] {
        (value >>> 24) && 0xff,
        (value >>> 16) && 0xff,
        (value >>> 8) && 0xff,
        (value) && 0xff };
    return b;
}
So kannst du auf einen Blick Rechenfehler ausschließen
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Outputstream write() gets blocked using RXTX to communicate with HC-05 BT Module Allgemeine Java-Themen 10
M RXTX Details auslesen Allgemeine Java-Themen 6
F rxtx library mit virtuellem Comport Allgemeine Java-Themen 2
H RXTX String verarbeiten Allgemeine Java-Themen 1
S RxTx - langsame Port suche Allgemeine Java-Themen 3
L Software-Design: Kommunikation mit SerialPort (RXTX) Allgemeine Java-Themen 2
R Virtuelle Serielle Schnittstellen mit RXTX Allgemeine Java-Themen 2
G RXTX native library unter Linux in jar build angeben Allgemeine Java-Themen 4
M problem mit rxtx Allgemeine Java-Themen 9
G RXTX in proprietärer Software nutzen?! Allgemeine Java-Themen 10
S RXTX library in Jar einbinden Allgemeine Java-Themen 5
T [RXTX] GPS-Maus (Comport) effizient auslesen Allgemeine Java-Themen 6
T RXTX und 64bit Allgemeine Java-Themen 1
R RXTX Versions Info abschalten Allgemeine Java-Themen 6
T Frage zu Schönheitsfehler bei RXTX Allgemeine Java-Themen 2
C RXTX Treiber einbinden für Linux Allgemeine Java-Themen 6
G RXTX library braucht sehr lange zum laden. Ist das normal? Allgemeine Java-Themen 8
B RXTX sendet immer mit 9600Baud Allgemeine Java-Themen 4
E Erfahrung mit RXTX sowie Windows und Linux Allgemeine Java-Themen 9
G RXTX verschicken einzelener Bytes Allgemeine Java-Themen 8
E javax.comm: Suche eine open source Alternative zu rxtx Allgemeine Java-Themen 8
O RXTX Geschwindigkeit? Codebeispiel dabei. Allgemeine Java-Themen 21
B RXTX und close Allgemeine Java-Themen 12
L Exception auslösen, um while Schlaufe zu verlassen(rxtx.org) Allgemeine Java-Themen 6
M Geschwindigkeit RXTX JAVA Allgemeine Java-Themen 3
foobar Rxtx vs javax.comm Allgemeine Java-Themen 2
W Mal ein paar generelle Fragen zu InputStream und OutputStream Allgemeine Java-Themen 4
T Input und Outputstream , serielle Schnittstelle Allgemeine Java-Themen 1
Meeresgott Input/Output OutputStream löscht Datei Allgemeine Java-Themen 7
F Jar OutputStream Allgemeine Java-Themen 4
D Java Process OutputStream ist null Allgemeine Java-Themen 4
P Input/Output Process.getErrorStream = OutputStream Allgemeine Java-Themen 11
G Auf Kommandozeile über Processobjekt mit Outputstream Allgemeine Java-Themen 3
L Abspeichern von OutputStream Allgemeine Java-Themen 6
E Outputstream an verschiedenen Positionen beschreiben Allgemeine Java-Themen 4
A Eigenen OutputStream schreiben und verwenden Allgemeine Java-Themen 9
D zip Dateien schreiben mit in/outputstream Allgemeine Java-Themen 10
S OutputStream via POST senden Allgemeine Java-Themen 4
T OutputStream to InputStream Allgemeine Java-Themen 8
W StringBuilder effektiv auf OutputStream schreiben Allgemeine Java-Themen 3
Landei CipherInput/OutputStream-Problem Allgemeine Java-Themen 2
S von OutputStream in InputStream schreiben ohne das es blockiert..? Allgemeine Java-Themen 2
G Double Wert über OutputStream verschicken Allgemeine Java-Themen 2
S outputstream über fileUrl Allgemeine Java-Themen 15
L Problem mit dem OutputStream eines Prozesses Allgemeine Java-Themen 9
G OutputStream to System.out Allgemeine Java-Themen 35
I input-/outputstream Allgemeine Java-Themen 6
Junktyz In Writer und Outputstream wird teilweise nicht geschrieben Allgemeine Java-Themen 3
reibi FileOutputStream aus OutputStream erstellen Allgemeine Java-Themen 7
H Problem mit OutputStream Allgemeine Java-Themen 5
T OutputStream - Prozente ermitteln Allgemeine Java-Themen 3
T OutputStream - Event bei Byte-Fluss Allgemeine Java-Themen 5
A Inputstream in Outputstream umleiten Allgemeine Java-Themen 7
D Cipher(In)OutputStream Allgemeine Java-Themen 3
R Ladebalken für einen Outputstream. Allgemeine Java-Themen 10
J Binärdateien mit Input/Outputstream lesen und schreiben Allgemeine Java-Themen 3
m@nu Schreibschutz entfernen und OutputStream öffnen Allgemeine Java-Themen 6
T Problem mit Outputstream? Allgemeine Java-Themen 2
J Kommunikation mit USB Gerät, das Midi-Signale sendet Allgemeine Java-Themen 4
W PrintWriter (PrintStream) sendet falsche Werte Allgemeine Java-Themen 18

Ähnliche Java Themen

Neue Themen


Oben