Forum: PC-Programmierung RXTX Java AT89C5131


von Dennis H. (hoh)


Lesenswert?

Guten Abend,

für ein kleines Testprogramm für eine Selfmade-IO-Platine benötige ich 
etwas Hilfe!
Auf der Platine sitzt ein AT89C5131. Dieser sendet per RS232 
(9600,8,1,N) ein "Protokoll", das wie folgt aufgebaut ist:
Empfängt der Controller ein 's', so beginnt er dem Zustand der 32 Pin´s 
aller 4 PORT´s zusenden.
Z.B.:
"00101111011100000111110010101010" so zu lesen im Hyperterminal!
Die Kommunikation zwischen Hyperterminal und Controller funktioniert 
einwandfrei!

Diese Kette möchte ich nun mittels Java darstellen!
In einem JFrame habe ich 32 TextField`s

Ist ein String dieser Kette 0 so soll ein entsprechendes TextField rot, 
ist er 1 soll es grün hinterlegt sein.

Meine erster Ansatz ist:
Java sendet ein 's' zum Controller, dieser antwortet mit der erste '0' 
oder '1' und wartet!
Hat Java den ersten Wert verarbeitet ( eine Boolean wird gesetzt), so 
soll Java ein '#' senden, worauf der Controller den nächsten Zustand 
sendet.

Ist es Möglich, die empfangenen 0er und 1er erst mal irgendwo 
"abzulegen"?
Bzw. je 8 Strings (nur 0 oder 1) in ein Byte zuwandeln?

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Dennis Hoh schrieb:
> Ist es Möglich, die empfangenen 0er und 1er erst mal irgendwo
> "abzulegen"?
> Bzw. je 8 Strings (nur 0 oder 1) in ein Byte zuwandeln?

Ja.

von hoh (Gast)


Lesenswert?

Hat jemand evt. ein brauchbares Beispiel?

Meine Idee z.B., die auch schon fast geht ist, ein 32 Byte 
serial.buffer, welcher vorm überschreiben transferiert wird...

Ein 2ter Weg wäre, vom Controller, die 4 Portzustände als hex-Wert 
direkt zu empfangen, dann jeweils int to binaryString auf 8 Bits 
formatiert!

Jetzt meine Frage:
WIE (evt diesmal mit Sourcecode) kann ich das binaryString Muster auf 8 
Boolean aufteilen und zuordnen?
Komme ich da mit BitSet weiter? Wenn ja, WIE?

Gruß
hoh

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Zeig doch einfach mal wo in deinem Code du Probleme hast, oder sollen 
wir jetzt raten wie du es den am liebsten hättest?
Strings zu "bytes" kann man z.B. mit Integer.parseInt("0001110", 2) 
umwandeln... das hat aber erstmal nix mit RXTX zu tun.

von hoh (Gast)


Lesenswert?

Hallo,

Da ich seit gestern Mittag auf dem verzweifelten Weg von Dublin nach 
Mannheim bin, und nichtmal weiss, ob ich bis heute Abend zuhause bin, 
die letzte Nach grade mal 1h in nem Terminal geschlafen habe, mein Akku 
am Notebook leer is, meine Koffer seit 5h eingecheckt sind und sich 
darin das Netzteil befindet, muss ich von Telefon aus schreiben...

Und da habe ich leider kein Sourcecode zur Hand ;-)

Kann nur das bieten:
8 Boolean deklariert: pin00 bis pin07
String inBin = "00000000"
String inByte=""

mySerial.Read(inByte);      ;kommt zB ne "FF"

inByte = Byte.toStringBinary(inByte);

Syntaxfehler ausgeklammert steht dann in inBin "11111111"

Wie bekomme ich da dann je eine 1 auf pin00, pin01, pin02, usw.??

Gruß
hoh

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Also... erstmal brauchst du das Byte nicht nochmal als "String" 
konvertieren. Statdessen kannst du direkt Prüfen welche Bits gesetzt 
sind z.B. so:
1
        InputStream mySerial = ...;
2
        int b = mySerial.read();
3
        boolean[] bits = new boolean[8];
4
        for (int i = 0; i < bits.length; i++) {
5
            bits[i] = ((1 << i) & b) != 0;
6
        }
7
8
        for (int i = 0; i < bits.length; i++) {
9
            System.out.println("Bit " + i + " ist " + bits[i]);
10
        }

hoh schrieb:
> die letzte Nach grade mal 1h in nem Terminal geschlafen habe
Schlaf dich halt erstmal aus und las' die Elektronik ruhen, trotzdem ein 
frohes Fest.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.