web-dev-qa-db-ja.com

端末画面をクリアしますか?

私はロボットの9つの異なるセンサーからデータを読み取り、それらをすべて同じウィンドウに着実に表示する必要があるため、値を比較して読み取り値のいずれかがオフになっているかどうかを確認できます。

Serial.printとlcd.printの両方で私が抱えている問題は、値が絶えず動いており、ロボットを動かしている間、それらをよく見ることができないということです。

私は、何かを表示する前にSerial.clear()のようなものを呼び出すことを考えていました。

私がこれまでに見つけたものから、たとえばSerial.print(17、BYTE)はサポートされなくなりました(ESCキーの呼び出し)。

だから...もう少しArduinoの経験がある人のために...これを行う適切な方法は何ですか?

16
Eugen

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 /

32
jjz

画面をクリアする方法はありませんが、それを偽造するための本当に簡単な方法は、すべての古いデータを画面外に保持するのに必要なSerial.println();を印刷することです。

7
uDalillu

ASCII 12がForm feedを作成します。これは新しいページです。ここにウィキペディアの定義があります。

「フォームフィードは改ページASCII制御文字です。これにより、プリンターは現在のページを排出し、別のページの先頭から印刷を続行します。 "

コードは

Serial.write(12);

Arduino Terminateはその文字をサポートしていませんが、 PuTTY ライトオープンソースのtelnetクライアントはそれを行うことができます

コードの例

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
    }

あなたが試すことができます:

Serial.write(13);

これはキャリッジリターンを提供し、反復ごとに行の先頭に戻ります-あなたが追いかけていることはどれですか? (特にすべてが固定幅の場合)。

3
Creasote

この問題を修正する愚かな簡単な方法を見つけました。端末ウィンドウのサイズを1行のみに変更すると、読みやすくなります!

2
Dok Collict

ESCは、_1 _ 7ではなく、_2 _ 7という文字です。 10進数の12(別名、FF、フォームフィード)を試すこともできます。

これらの特殊文字はすべて、Arduinoによってではなく、受信側のプログラムによって処理されることに注意してください。したがって、標準のUnixターミナル(xterm、gnome-terminal、kterm、...)は異なる制御シーケンスのセットを処理し、HTermのようなWindowsターミナルプログラムを言います。

したがって、表示に使用するプログラムを正確に指定する必要があります。その後、どの制御文字と制御シーケンスが使用可能かを伝えることができます。

1
A.H.

私が考えることができる最良の方法は、 processing を使用することです。 serial dataの表示arduino graph および arduinoレーダー
Arduinoは処理することに基づいているため、それほど難しくない

1
Sibster

受信したシリアルデータに基づいてシリアルモニターウィンドウをクリアすることはできません。

いくつかのオプションを考えることができますが、最も簡単な(そして最も簡単な)のは、センサーデータを含む生成した固定幅の文字列でprintln()を使用することです。

Arduino IDEのシリアルモニターのAutoscrollチェックボックスは、固定幅の文字列(おそらく500ミリ秒の遅延を含む)を永続的に送信する場合、最下部に到達してスクロールを開始すると更新されているような印象を与えます。ウィンドウの高さを縮小して、1行しかないように見せることもできます。

シリアルprintln()に適した固定幅の文字列を実現するには、センサー値を文字列に変換し、それらを永続的なサイズにパッド/トリミングする関数が必要です。次に、値を連結します(データを読みやすくする場合は区切り文字を含めます)

これに似たものの出力は、私が示唆しているものです:

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

すべてを考慮すると、これは素晴らしい解決策ではありませんが、結果が得られます。

よりスマートなアイデアは、Arduinoの外部に別のプログラムを構築することです。Arduinoから送信されるセンサー値をcomポートでリッスンするIDEです。Arduinoプログラムは外部プログラムにメッセージを送信する必要があります1=0.5;のような明確に解釈できます。1=センサーID、0.5 =センサー値。外部プログラムはこれらの値を保持します(センサーごとに1)。その後、外部プログラムはこの情報をどのような方法でも表示できます。 dのように、ニースのコンソール出力は比較的簡単に実現できます:-)

C#には.NETserialportクラスがあり、使用するのが楽しいです。 (ほとんどの時間!)

Pythonにはpyserialというモジュールがありますが、これも簡単です。

どちらの言語でも、この方法を選択した場合は、コンソール出力を大幅に制御できます。

1
jon

たとえば、ボーレートを前後に変更すると、Arduinoのバージョン1.5.3でシリアルモニターウィンドウがクリアされますIDE Intel Galileo開発用

1
Gökhan Kurt

缶の別のキック:

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(){}
1
rEKIMcarnate

決定論者、非決定者の列、ミスマ変数とセラスクラロの列

すべてのデータをインラインで印刷するので、必要なデータを含む行があります、私はこのような同じ問題を解決し、asignadに一定のデータサイズと間隔を置いてください、私はこれを作りました

Serial.print("cuenta q2: ");
Serial.print( cuenta_pulsos_encoder_1,3);
Serial.print("\t");
Serial.print(q2_real,4);
Serial.print("\t");
Serial.print("cuenta q3: ");
Serial.print( cuenta_pulsos_encoder_2,3);
Serial.print("\t");
Serial.print(q3_real,4);
Serial.print("\t");
Serial.print("cuenta q4: ");
Serial.print( cuenta_pulsos_encoder_3,3);
Serial.print("\t");
Serial.println(q4_real,4);

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\n");
    }
}

default terminal

0
Ravi Shekhar

プロテウスで仮想端末を使用していて、それをクリアしたい場合は、Serial.write(0x0C)を追加するだけです。そしてそれはうまくいくでしょう

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
theQuestionMan