Go Down

Topic: Serial Monitor - Can it continually print to top line? (Read 2050 times) previous topic - next topic

Newbe question.  I'm using the serial monitor to watch accelerometer readings on my computer- and it would be great if I could get the screen to refresh each time instead of scrolling endlessly (i.e. always show number in upper left corner)  Is there a way to do that?

thanks!

Nick Gammon

Look like not (using the inbuilt monitor), but there are ways:

http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1259020277
Please post technical questions on the forum, not by personal message. Thanks!

More info:
http://www.gammon.com.au/electronics

robtillaart


Did some VT100/VT52 testing a year ago, does not work with the built in serial monitor but some others like putty.exe can interpret them.
Only a few codes were tested but a quite complete list is included as comment.

Code: [Select]

//
//    FILE: VT100.pde
//  AUTHOR: Rob Tillaart
//    DATE: 2010-11-10
//
// PUPROSE: test VT100 codes
//

#define VT100_H

// http://ascii-table.com/ansi-escape-sequences-vt-100.php

#define OFF         "\033[0m"
#define BOLD        "\033[1m"
#define LOWINTENS   "\033[2m"
#define UNDERLINE   "\033[4m"
#define BLINK       "\033[5m"
#define REVERSE     "\033[7m"

#define GOTOXY( x,y) "\033[x;yH"   // Esc[Line;ColumnH

#define CLS          "\033[2J"     // Esc[2J Clear entire screen


void setup()
{
  Serial.begin(9600);
}

void loop()
{

  Serial.print(BOLD);
  Serial.println("bold - Hello World");
  Serial.print(OFF);
  Serial.println("Goodbye");
 
  Serial.print(LOWINTENS);
  Serial.println("lowintense - Hello World");
  Serial.print(OFF);
  Serial.println("Goodbye");
 
  Serial.print(UNDERLINE);
  Serial.println("underline - Hello World");
  Serial.print(OFF);
  Serial.println("Goodbye");
 
  Serial.print(BLINK);
  Serial.println("blink - Hello World");
  Serial.print(OFF);
  Serial.println("Goodbye");
 
  Serial.print(REVERSE);
  Serial.println("reverse - Hello World");
  Serial.print(OFF);
  Serial.println("Goodbye");
 
  Serial.print(GOTOXY(3,3));
  Serial.println("gotoxy 3,3 - Hello World");
  Serial.print(OFF);
  Serial.println("Goodbye"); 
 
  Serial.print(CLS);
  Serial.println("Hello World");
  Serial.print(OFF);
  Serial.println("Goodbye");
  while(1);
}

/*
Esc[20h Set new line mode LMN
Esc[?1h Set cursor key to application DECCKM
none Set ANSI (versus VT52) DECANM
Esc[?3h Set number of columns to 132 DECCOLM
Esc[?4h Set smooth scrolling DECSCLM
Esc[?5h Set reverse video on screen DECSCNM
Esc[?6h Set origin to relative DECOM
Esc[?7h Set auto-wrap mode DECAWM
Esc[?8h Set auto-repeat mode DECARM
Esc[?9h Set interlacing mode DECINLM

Esc[20l Set line feed mode LMN
Esc[?1l Set cursor key to cursor DECCKM
Esc[?2l Set VT52 (versus ANSI) DECANM
Esc[?3l Set number of columns to 80 DECCOLM
Esc[?4l Set jump scrolling DECSCLM
Esc[?5l Set normal video on screen DECSCNM
Esc[?6l Set origin to absolute DECOM
Esc[?7l Reset auto-wrap mode DECAWM
Esc[?8l Reset auto-repeat mode DECARM
Esc[?9l Reset interlacing mode DECINLM

Esc= Set alternate keypad mode DECKPAM
Esc> Set numeric keypad mode DECKPNM

Esc(A Set United Kingdom G0 character set setukg0
Esc)A Set United Kingdom G1 character set setukg1
Esc(B Set United States G0 character set setusg0
Esc)B Set United States G1 character set setusg1
Esc(0 Set G0 special chars. & line set setspecg0
Esc)0 Set G1 special chars. & line set setspecg1
Esc(1 Set G0 alternate character ROM setaltg0
Esc)1 Set G1 alternate character ROM setaltg1
Esc(2 Set G0 alt char ROM and spec. graphics setaltspecg0
Esc)2 Set G1 alt char ROM and spec. graphics setaltspecg1

EscN Set single shift 2 SS2
EscO Set single shift 3 SS3

Esc[m Turn off character attributes SGR0
Esc[0m Turn off character attributes SGR0
Esc[1m Turn bold mode on SGR1
Esc[2m Turn low intensity mode on SGR2
Esc[4m Turn underline mode on SGR4
Esc[5m Turn blinking mode on SGR5
Esc[7m Turn reverse video on SGR7
Esc[8m Turn invisible text mode on SGR8

Esc[Line;Liner Set top and bottom lines of a window DECSTBM

Esc[ValueA Move cursor up n lines CUU
Esc[ValueB Move cursor down n lines CUD
Esc[ValueC Move cursor right n lines CUF
Esc[ValueD Move cursor left n lines CUB
Esc[H Move cursor to upper left corner cursorhome
Esc[;H Move cursor to upper left corner cursorhome
Esc[Line;ColumnH Move cursor to screen location v,h CUP
Esc[f Move cursor to upper left corner hvhome
Esc[;f Move cursor to upper left corner hvhome
Esc[Line;Columnf Move cursor to screen location v,h CUP
EscD Move/scroll window up one line IND
EscM Move/scroll window down one line RI
EscE Move to next line NEL
Esc7 Save cursor position and attributes DECSC
Esc8 Restore cursor position and attributes DECSC

EscH Set a tab at the current column HTS
Esc[g Clear a tab at the current column TBC
Esc[0g Clear a tab at the current column TBC
Esc[3g Clear all tabs TBC

Esc#3 Double-height letters, top half DECDHL
Esc#4 Double-height letters, bottom half DECDHL
Esc#5 Single width, single height letters DECSWL
Esc#6 Double width, single height letters DECDWL

Esc[K Clear line from cursor right EL0
Esc[0K Clear line from cursor right EL0
Esc[1K Clear line from cursor left EL1
Esc[2K Clear entire line EL2

Esc[J Clear screen from cursor down ED0
Esc[0J Clear screen from cursor down ED0
Esc[1J Clear screen from cursor up ED1
Esc[2J Clear entire screen ED2

Esc5n Device status report DSR
Esc0n Response: terminal is OK DSR
Esc3n Response: terminal is not OK DSR

Esc6n Get cursor position DSR
EscLine;ColumnR Response: cursor is at v,h CPR

Esc[c Identify what terminal type DA
Esc[0c Identify what terminal type (another) DA
Esc[?1;Value0c Response: terminal type code n DA

Escc Reset terminal to initial state RIS

Esc#8 Screen alignment display DECALN
Esc[2;1y Confidence power up test DECTST
Esc[2;2y Confidence loopback test DECTST
Esc[2;9y Repeat power up test DECTST
Esc[2;10y Repeat loopback test DECTST

Esc[0q Turn off all four leds DECLL0
Esc[1q Turn on LED #1 DECLL1
Esc[2q Turn on LED #2 DECLL2
Esc[3q Turn on LED #3 DECLL3
Esc[4q Turn on LED #4 DECLL4


Codes for use in VT52 compatibility mode
Esc< Enter/exit ANSI mode (VT52) setansi

Esc= Enter alternate keypad mode altkeypad
Esc> Exit alternate keypad mode numkeypad

EscF Use special graphics character set setgr
EscG Use normal US/UK character set resetgr

EscA Move cursor up one line cursorup
EscB Move cursor down one line cursordn
EscC Move cursor right one char cursorrt
EscD Move cursor left one char cursorlf
EscH Move cursor to upper left corner cursorhome
EscLineColumn Move cursor to v,h location cursorpos(v,h)
EscI Generate a reverse line-feed revindex

EscK Erase to end of current line cleareol
EscJ Erase to end of screen cleareos

EscZ Identify what the terminal is ident
Esc/Z Correct response to ident identresp




VT100 Special Key Codes

These are sent from the terminal back to the computer when the particular key is pressed.
Note that the numeric keypad keys send different codes in numeric mode than in alternate mode.
See escape codes above to change keypad mode.



Function Keys:
EscOP PF1
EscOQ PF2
EscOR PF3
EscOS PF4



Arrow Keys:
  Reset Set
up EscA EscOA
down EscB EscOB
right EscC EscOC
left EscD EscOD



Numeric Keypad Keys:
EscOp 0
EscOq 1
EscOr 2
EscOs 3
EscOt 4
EscOu 5
EscOv 6
EscOw 7
EscOx 8
EscOy 9
EscOm -(minus)
EscOl ,(comma)
EscOn .(period)
EscOM ^M



Printing:
Esc[i Print Screen Print the current screen
Esc[1i Print Line Print the current line
Esc[4i Stop Print Log Disable log
Esc[5i Start Print Log Start log; all received text is echoed to a printer

*/

Rob Tillaart

Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -
(Please do not PM for private consultancy)

WizenedEE

I think this may work on windows (haven't tried it though).

\r is carriage return and moves the cursor to the beginning of the line without going to the next one. You'll probably have a problem if your second message is shorter than the first one.

Code: [Select]
void setup() {
  Serial.begin(9600);
}

void loop() {
  int rand = random(0, 10);
  Serial.print("\r");
  Serial.print(rand);
  delay(500);
}

Nick Gammon

However that does not work. Nor does printing \f  (form feed) which normally clears the screen.
Please post technical questions on the forum, not by personal message. Thanks!

More info:
http://www.gammon.com.au/electronics

Go Up