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?
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.
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
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.