RXTX Java AT89C5131

OP #1988495
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?
Gast #1988695
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
Gast #1988720
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
Persönliche Seite #1988773
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren