के बीच सीरियल संचार सीरियल पोर्ट का उपयोग करके, मैं अपने पीसी (नेटबीन्स और आरXTएक्स का उपयोग कर विंडोज 7) के बीच संवाद करने की कोशिश कर रहा हूं। Arduino वास्तव में एक एफटीडीआई केबल का उपयोग कर पीसी से जुड़ा हुआ है।जावा RXTX और Arduino
कोड जावा SimpleRead.Java पर आधारित है पाया here.
वर्तमान में Arduino बस एक स्ट्रिंग बाहर प्रिंट जब यह शुरू होता है। मेरे जावा प्रोग्राम को पढ़ा गया बाइट्स की संख्या मुद्रित करनी चाहिए और फिर सामग्री को मुद्रित करना चाहिए। जावा प्रोग्राम काम करता है, प्रकार ...
यदि स्ट्रिंग लंबी है (> 10 बाइट्स या तो) आउटपुट टूट जाएगा।
तो अगर Arduino पर मैं प्रिंट
Serial.println("123456789123456789"); //20 bytes including '\r' and '\n'
मेरी जावा प्रोग्राम की तरह कुछ लग सकता है के उत्पादन:
Number of Bytes: 15
1234567891234
Number of Bytes: 5
56789
या
Number of Bytes: 12
1234567891
Number of Bytes: 8
23456789
मैं सोच रहा हूँ कि यह एक है समय की समस्या, क्योंकि जब मैं मैन्युअल रूप से डीबगर का उपयोग कर कोड से गुजरता हूं, तो परिणाम स्ट्रिंग हमेशा यह होती है कि यह होना चाहिए: चालू ई 20 बाइट स्ट्रिंग।
मैं विभिन्न चीजों से गड़बड़ कर रहा हूं लेकिन मैं समस्या को ठीक करने में सक्षम नहीं हूं।
यहाँ कोड है कि मुझे समस्याओं दे रही है का हिस्सा है:
static int baudrate = 9600,
dataBits = SerialPort.DATABITS_8,
stopBits = SerialPort.STOPBITS_1,
parity = SerialPort.PARITY_NONE;
byte[] readBuffer = new byte[128];
...
...
public void serialEvent(SerialPortEvent event)
{
if (event.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
try {
if (input.available() > 0) {
//Read the InputStream and return the number of bytes read
numBytes = input.read(readBuffer);
String result = new String(readBuffer,0,numBytes);
System.out.println("Number of Bytes: " + numBytes);
System.out.println(result);
}
} catch (IOException e) {
System.out.println("Data Available Exception");
}
}
किसी कारण से मुझे लगता है कि डेटा एक ही स्ट्रीम में संगत रूप से भेजा जाएगा।पीसी के अंत में, मुझे केवल सीरियल आउटपुट देखने की ज़रूरत है, इसलिए मुझे नहीं लगता कि मैं पूरी आने वाली लाइन को स्टोर करने की कोशिश कर दूंगा और फिर इसे प्रदर्शित करूंगा। मुझे लगता है कि यह केवल डेटा बाइट-बाय-बाइट प्रदर्शित करेगा जैसा कि इसमें आता है। इसलिए मैं ayyte = input.read() का उपयोग करूंगा; input.read के बजाय (readBuffer); धन्यवाद – SharpBarb
@SharpBarb - एक समय में एक बाइट पढ़ने के लिए स्विच करने की आवश्यकता नहीं है। यदि आप वास्तव में ऐसा करना चाहते हैं, तो मैं एक बफर पढ़ने की सिफारिश करता हूं और फिर अपने ऐप के भीतर बस प्रत्येक बाइट को अलग से संसाधित करता हूं। –