शायद मैं आपके सवाल का गलत समझ रही है, लेकिन के रूप में यह एक सीरियल लाइन है, तो आप Arduino क्रमिक रूप से से भेजे गए सब कुछ पढ़ने के लिए होगा - यह Arduino में बफ़र हो जाएगा जब तक आप पढ़ सकते हैं यह।
यदि आप एक स्टेटस डिस्प्ले रखना चाहते हैं जो नवीनतम चीज़ को भेजता है - एक थ्रेड का उपयोग करें जो आपके प्रश्न में कोड को शामिल करता है (नींद से कम), और अंतिम पूर्ण रेखा को Arduino से नवीनतम पंक्ति के रूप में पढ़ें।
अद्यतन:mtasic
के उदाहरण कोड काफी अच्छा है, लेकिन अगर Arduino जब inWaiting()
कहा जाता है एक आंशिक लाइन भेज दिया गया है, तो आप एक छोटा लाइन मिल जाएगा। इसके बजाय, आप क्या करना चाहते हैं अंतिम लाइन last_received
में डालना है, और आंशिक रेखा buffer
में रखें ताकि इसे लूप के चारों ओर अगली बार जोड़ा जा सके। कुछ इस तरह:
def receiving(ser):
global last_received
buffer_string = ''
while True:
buffer_string = buffer_string + ser.read(ser.inWaiting())
if '\n' in buffer_string:
lines = buffer_string.split('\n') # Guaranteed to have at least 2 entries
last_received = lines[-2]
#If the Arduino sends lots of empty lines, you'll lose the
#last filled line, so you could make the above statement conditional
#like so: if lines[-2]: last_received = lines[-2]
buffer_string = lines[-1]
readline()
के उपयोग के बारे में: यहाँ Pyserial प्रलेखन कहने के लिए (थोड़ा स्पष्टता के लिए और() readlines के एक उल्लेख के साथ संपादित) है है:
सावधान का उपयोग करते समय रहो " पढ़ने के लिए लाइन"। सीरियल पोर्ट खोलते समय एक टाइमआउट निर्दिष्ट करें, अन्यथा यह को हमेशा के लिए ब्लॉक कर सकता है यदि कोई न्यूलाइन वर्ण प्राप्त नहीं हुआ है। यह भी ध्यान रखें कि "रीडलाइन()" केवल टाइमआउट के साथ काम करता है। यह एक टाइमआउट होने पर निर्भर करता है और व्याख्या करता है कि ईओएफ (फ़ाइल का अंत) के रूप में।
जो मेरे लिए काफी उचित लगता है!
स्रोत
2009-07-07 17:28:01
खैर कि क्या प्राप्त बफर में है की कुल राशि में पढ़ता है। मेरी धारणा यह है कि पूछताछ यह है कि arduino न्यूलाइन द्वारा क्या भेज रहा है, यह संभवतः प्राप्त बफर आकार से मेल नहीं खाएगा। – JosefAssad
तो आखिरी_रेसेव के पास हमेशा मुझे क्या चाहिए? क्या रीडलाइन के साथ ऐसा करने का कोई तरीका है? – Greg
सही है, आपके प्रश्न के अनुसार – mtasic85