2012-04-11 20 views
10

मैं अपने रोबोट के लिए 9 अलग-अलग सेंसर से डेटा पढ़ रहा हूं और मुझे उसी खिड़की में उन्हें लगातार प्रदर्शित करने की ज़रूरत है, इसलिए मैं मूल्यों की तुलना कर सकता हूं और देख सकता हूं कि कोई भी रीडिंग बंद है या नहीं।टर्मिनल स्क्रीन साफ़ करना?

सीरियल.प्रिंट और एलसीडी.प्रिंट दोनों के साथ मेरी समस्या यह है कि मूल्य लगातार चल रहे हैं और रोबोट को स्थानांतरित करते समय मैं वास्तव में उन्हें अच्छी तरह से देख नहीं सकता।

मैं कुछ और प्रदर्शित करने से पहले Serial.clear() जैसे कुछ कॉल करने के बारे में सोच रहा था और यह केवल चीजों को स्थिर रखेगा और एक ही स्थान पर, केवल मूल्यों को बदल देगा।

जो मैंने अभी तक पाया है, उदाहरण के लिए Serial.print (17, BYTE) अब समर्थित नहीं है (ईएससी कुंजी को कॉल करना)।

तो ... थोड़ा और Arduino अनुभव वाले लोगों के लिए ... ऐसा करने का सही तरीका क्या है?

उत्तर

25

Arduino सीरियल मॉनिटर नियमित टर्मिनल नहीं है इसलिए मानक टर्मिनल कमांड का उपयोग कर स्क्रीन को साफ़ करना संभव नहीं है। मैं एक वास्तविक टर्मिनल एमुलेटर का उपयोग करने का सुझाव देता हूं, जैसे Putty

एक टर्मिनल स्क्रीन को साफ करने के लिए आदेश ESC है [2J

Arduino कोड में पूरा करने के लिए:

Serial.write(27);  // ESC command 
    Serial.print("[2J"); // clear screen command 
    Serial.write(27); 
    Serial.print("[H");  // cursor to home command 

स्रोत:
http://www.instructables.com/id/A-Wirelessly-Controlled-Arduino-Powered-Message-B/step6/Useful-Code-Explained-Clearing-a-Serial-Terminal/

1

सबसे अच्छा तरीका है मैं के बारे में सोच सकते हैं processing उपयोग कर रहा है displaying serial data, arduino graph और arduino radar की तरह नेट पर कुछ परिचय
Arduino के बाद से प्रसंस्करण पर आधारित है देखते हैं इसके कि

1

ESC जानने के लिए मुश्किल नहीं है चरित्र _ _7, _ _7 नहीं। आप दशमलव 12 (उर्फ एफएफ, फॉर्म फीड) भी आज़मा सकते हैं।

ध्यान दें कि इन सभी विशेष पात्रों को Arduino द्वारा संभाला नहीं जाता है लेकिन प्राप्त करने वाले पक्ष पर कार्यक्रम द्वारा। तो मानक यूनिक्स टर्मिनल (xterm, gnome-terminal, kterm, ...) नियंत्रण अनुक्रमों का एक अलग सेट संभालता है, फिर एक विंडोज टर्मिनल प्रोग्राम जैसे HTerm।

इसलिए आपको यह निर्दिष्ट करना चाहिए कि आप वास्तव में प्रदर्शन के लिए किस प्रोग्राम का उपयोग कर रहे हैं। इसके बाद आपको यह बताना संभव है कि नियंत्रण वर्ण और नियंत्रण अनुक्रम उपयोग योग्य हैं।

+0

में मेरे लिए अच्छी तरह से काम मैं सबसे बुनियादी, मानक Arduino आईडीई (भी नहीं ग्रहण सी ++ अभी तक) और एक विंडोज 7 64 बिट मशीन पर अपनी शामिल सीरियल टर्मिनल का उपयोग कर रहा: डी – Eugen

+0

'formfeed भेजने की कोशिश 0xC' और पट्टी को सीरियल टर्मिनल के रूप में उपयोग करें। – Sibster

1

आने वाले धारावाहिक डेटा के आधार पर सीरियल मॉनीटर विंडो को साफ़ करना संभव नहीं है।

मैं कुछ विकल्पों के बारे में सोच सकता हूं, सबसे सरल (और धोखाधड़ी) println() का उपयोग एक निश्चित चौड़ाई स्ट्रिंग के साथ करना है जिसे आपने उत्पन्न किया है जिसमें आपका सेंसर डेटा है।

Arduino IDE का सीरियल मॉनिटर Autoscroll चेकबॉक्स का अर्थ है कि यदि आप लगातार चौड़ाई वाली स्ट्रिंग (500 मिलीमीटर देरी के साथ) भेजते हैं तो यह इंप्रेशन देगा कि यह नीचे आने के बाद अपडेट हो रहा है और स्क्रॉलिंग शुरू हो जाता है। आप खिड़की की ऊंचाई को भी कम कर सकते हैं ताकि ऐसा लगता है कि इसमें केवल एक पंक्ति है।

सीरियल println() के लिए उपयुक्त एक निश्चित चौड़ाई वाली स्ट्रिंग को पूरा करने के लिए आपको स्ट्रिंग्स में अपने सेंसर मानों को बदलने के साथ-साथ पैड/लगातार आकार में ट्रिम करने के लिए फ़ंक्शंस की आवश्यकता होगी। तो मानों को एक साथ (विभाजक सहित अगर यह डेटा बनाता है पढ़ने में आसान)

यह करने के लिए कुछ इसी तरह की एक उत्पादन है श्रेणीबद्ध क्या मैं पर इशारा कर रहा हूँ:

| 1.0 | 1.1 | 1.2 | 1.3 | 1.4 | 1.5 | 1.6 | 1.7 | 1.8 | 

सभी चीजों को माना जाता है, इस isn ' एक अच्छा समाधान नहीं है लेकिन यह आपको परिणाम देगा।

Arduino के बाहर एक और प्रोग्राम बनाने का एक बहुत ही अच्छा विचार है और यह आईडीई है जो Arduino से भेजे गए सेंसर मूल्यों के लिए कॉम पोर्ट को सुनता है।आपके Arduino कार्यक्रम को एक संदेश भेजने की आवश्यकता होगी जो आपका बाहरी प्रोग्राम अनजाने में व्याख्या कर सकता है, 1=0.5; जैसे कुछ = जहां सेंसर आईडी और 0.5 = सेंसर मान। बाहरी कार्यक्रम तब इन मानों को रखेगा (प्रत्येक सेंसर के लिए 1)। बाह्य प्रोग्राम तो जो कुछ भी तरह से इस जानकारी को आप चाहें तो प्रदर्शित कर सकते हैं, एक अच्छा सांत्वना उत्पादन प्राप्त करने के लिए :-) अपेक्षाकृत आसान होगा

C# है .NET के serialport वर्ग जो उपयोग करने के लिए एक खुशी। (अधिकांश समय!)

पायथन में एक मॉड्यूल है जिसे pyserial कहा जाता है, जो भी आसान है।

या तो भाषा आपको कंसोल आउटपुट पर अधिक नियंत्रण प्रदान करेगी, क्या आपको इस तरह आगे बढ़ना चुनना चाहिए।

+0

डब्ल्यूडब्ल्यूडब्ल्यू ... ओडब्ल्यू! नहीं सोचा था कि स्क्रीन साफ़ करने का मतलब यह होगा कि बहुत अधिक काम। बहुत बहुत धन्यवाद, मैं कल उस कोशिश करूँगा और अगर मैं किसी भी समस्या में भाग लेता हूं तो आप पर वापस आऊंगा। – Eugen

7

स्क्रीन को साफ़ करने का कोई तरीका नहीं है, लेकिन नकली के लिए वास्तव में एक आसान तरीका यह Serial.println(); प्रिंट कर सकता है क्योंकि आपको स्क्रीन से सभी पुराने डेटा को रखने की आवश्यकता है।

3

आप की कोशिश कर सकते:

Serial.write(13); 

कौन सा एक गाड़ी वापसी प्रदान करेगा, लाइन हर यात्रा की शुरुआत करने के लिए लौट - जो तुम क्या पीछा कर रहे करना चाहिए? (विशेष रूप से अगर सब कुछ निश्चित चौड़ाई है)।

2

इस समस्या को हल करने के लिए एक मूर्खता से आसान तरीका मिले । बस टर्मिनल विंडो का आकार केवल 1 लाइन ऊंचा करें और इसे पढ़ने में बहुत आसान हो जाएगा!

+1

संभव नहीं है lol। खिड़की का न्यूनतम आकार मेरे लिए लगभग 10 लाइनों (विंडोज़) पर है। – C4u

1

तुम वापस उदाहरण के लिए baudrate बदल सकते हैं और आगे यह इंटेल गैलीलियो विकास के लिए Arduino आईडीई के संस्करण 1.5.3 में सीरियल मॉनिटर खिड़की साफ करता है, तो

-1
/* 
As close as I can get to Clear Screen 

*/ 


void setup() { 
// put your setup code here, to run once: 
Serial.begin(115200); 

} 

void loop() { 

Serial.println("This is Line ZERO "); 

// put your main code here, to run repeatedly: 

for (int i = 1; i < 37; i++) 
{ 

// Check and print Line 
    if (i == 15) 
    { 
    Serial.println("Line 15"); 
    } 

    else 
    Serial.println(i); //Prints line numbers Delete i for blank line 
    } 

    delay(5000); 

    } 
5

मैं ने पाया है कि ASCII 12 एक फार्म फ़ीड बनाने , यह एक नया पृष्ठ है। यहां एक विकिपीडिया परिभाषा

"फॉर्म फ़ीड एक पेज-ब्रेकिंग एएससीआईआई नियंत्रण चरित्र है।यह प्रिंटर बलों वर्तमान पृष्ठ बाहर फेंकने के लिए और एक अन्य "

कोड के शीर्ष पर मुद्रण जारी रखने के लिए

Serial.write(12); 

Arduino बर्खास्त चरित्र का समर्थन नहीं करता है लेकिन Putty एक लाइट ओपन सोर्स टेलनेट क्लाइंट इसे

कोड का एक उदाहरण

void setup() { 
    Serial.begin(9600);//Initializase the serial transmiter speed 

} 

void loop() { 
    //Code tested with Putty terminal 

    Serial.write(12);//ASCII for a Form feed 
    Serial.println("This is the title of a new page");// your code 

    delay(500);//delay for visual 
    } 
+0

टर्मिनल प्रिंटर नहीं हैं। यह पट्टी के साथ काम करने के लिए होता है, लेकिन [xterm अकसर किये गए सवाल] देखें (http://invisible-island.net/xterm/xterm.faq.html#xterm_form_feed)। –

1

कर सकते हैं पर एक और लात:

void setup(){  /*123456789 123456789 123456789 123456789 123*/ 
    String newRow="\n|________________________________________"; 
    String scrSiz="\n|\n|\n|\n|\n|\n|\n|\n|\n|\t"; 
    Serial.begin(115200); 
     // this baudrate should not have flicker but it does as seen when 
     // the persistence of vision threshold is insufficiently exceeded 
     // 115200 baud should display ~10000 cps or a char every 0.1 msec 
     // each 'for' loop iteration 'should' print 65 chars. in < 7 msec 
     // Serial.print() artifact inefficiencies are the flicker culprit 
     // unfortunately '\r' does not render in the IDE's Serial Monitor 

    Serial.print(scrSiz+"\n|_____ size screen vertically to fit _____" ); 
    for(int i=0;i<30;i++){ 
    delay(1000); 
    Serial.print((String)scrSiz +i +"\t" + (10*i) +newRow);} 
} 
void loop(){} 
0

तुम सिर्फ कर सकता है:

Serial.println("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); 

या अगर आप चाहते हैं:

for (int i=0; i<100; i++) { 
    Serial.print("\n"); 
} 
0

मैं इस लक्ष्य को हासिल करने के लिए इस simple function बनाया:

void clearscreen() { 
    for(int i=0;i<10;i++) { 
     Serial.println(\n\n\n\n\n\n\n\n\n\n\n\n\n); 
    } 
} 

यह default terminal