CANCELLARE Monitor Seriale

Salve a tutti.
Per il mio programma mi serve un comando che mi faccia cancellare, tutto ciò che è presente nel monitor seriale, in pratica lo stesso funzionamento del system("cls") in C.
Questo comando esiste perche lo usavo 2 anni fa, ma aimè me lo lo sono dimenticato :slightly_frowning_face:.
Le ho provate tutte Serial.clear(); Serial.system("cls"), ... e niente !!!

Per precisazione, non mi interessa svuotare il buffer, quindi il comando Serial.flush() non mi serve
Qualcuno che sa questo misterioso comando, che su Internet dicono che sia legenda?

Grazie

Il monitor seriale è un semplice display a caratteri, non esiste un cls. hai due alternative:

  1. mandi una serie di Serial.println() per far "scrollare via" tutto quello che precede
  2. non usi il monitor seriale integrato nell'IDE ma un software di terminale in grado di aprire una seriale (la connessione di Arduino è per il sistema operativo una porta COM come tutte le altre), che, a seconda di quale terminale vai ad emulare, può supportare non solo il cls, ma anche il posizionamento del cursore, colori, eccetera, mandando da Arduino i relativi codici.

Il secondo è quindi preferibile se hai questa necessità. Ad esempio se prendi un programmino come "putty" lo imposti su "serial" puoi emulare un VT100 (il più comune), puoi usare le sequenze di controllo standard ANSI, chiamate "sequenze di escape" perché precedute dal carattere ESC.
Ad esempio quindi cancellare lo schermo del terminale si fa con "Esc[2J" (dove "Esc" è il carattere 27 o 0x1B).
Per riferimento degli altri codici di controllo ANSI li trovi qui:

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

docdoc:
Il monitor seriale è un semplice display a caratteri, non esiste un cls. hai due alternative:

Anche perchè Arduino IDE è multipiattaforma e cls è un comando Dos, hai voglia a farlo funzionare in Mac o Linux !! :grin: :wink:

Inoltre system("cls") è un modo estremamente "barbaro" di cancellare lo schermo :confused:.

Se vuoi fare una bella (ma luuuuunga e complicaaaaataaaa) cosa, invece del monitor seriale usi un emulatore di terminale ANSI (o altro) e da Arduino invii le relative sequenze di caratteri di controllo.

Nel caso in usassi PUTTY, che comandi devo inserire in arduino per pulire lo schermo?
ho provato con Serial.print("Esc[2J") ma non funziona

Devi mandare il codice ASCII di ESC (27, 1B in esadecimale), non la scritta "Esc" :). Prova questo:

// See http://ascii-table.com/ansi-escape-sequences.php
// for ANSI terminal escape sequences

enum Colors {
  COL_BLACK = 0,
  COL_RED,
  COL_GREEN,
  COL_YELLOW,
  COL_BLUE,
  COL_MAGENTA,
  COL_CYAN,
  COL_WHITE
};

#define ESC "\x1B"

void setFgColor (byte c) {
  Serial.print (ESC "[");
  Serial.print (c + 30);
  Serial.print ('m');
}

void setBgColor (byte c) {
  Serial.print (ESC "[");
  Serial.print (c + 40);
  Serial.print ('m');
}

void resetAttr () {
  Serial.print (ESC "[0m");    // Reset attributes
}

void cls () {
  Serial.print (ESC "[2J");
}
void setup () {
  Serial.begin (115200);
}

void loop () {
  for (byte b = 0; b < 64; b++) {
    byte fgCol = b % 8;
    byte bgCol = b / 8;

    Serial.print ("bg = ");
    Serial.print (b / 8);
    Serial.print (" fg = ");
    Serial.print (b % 8);
    Serial.print (' ');

    setFgColor (fgCol);
    setBgColor (bgCol);
    
    for (char c = 'A'; c <= 'Z'; c++)
      Serial.print (c);
    resetAttr ();
    Serial.println ();
  }

  delay (1000);
  cls ();
  delay (1000);
}

SukkoPera:
Se vuoi fare una bella (ma luuuuunga e complicaaaaataaaa) cosa, invece del monitor seriale usi un emulatore di terminale ANSI (o altro) e da Arduino invii le relative sequenze di caratteri di controllo.

Ehm, e io che ho detto nel post #1 scusa? :slight_smile:

Comunque non mi pare né lunga né complicata, non mi spaventare il ragazzo :smiley:

scozza98:
Nel caso in usassi PUTTY, che comandi devo inserire in arduino per pulire lo schermo?
ho provato con Serial.print("Esc[2J") ma non funziona

Ho l'impressione che nessuno legga i miei post... :zipper_mouth_face: :astonished:

Mi auto-quoto: "cancellare lo schermo del terminale si fa con "Esc[2J" (dove "Esc" è il carattere 27 o 0x1B)."
Quindi non è "Esc[2J" ma devi (ti basta) fare:

Serial.print("\x1B[2J");

dove \x1B è la sequenza per mandare il byte con codice esadecimale 1B (0x1B) che corrisponde al 27 ossia l'"Escape" che ti serve.
Da qui potresti anche fare una funzioncina "cls()" se ti piace di più, e usare quella:

void cls() {
Serial.print("\x1B[2J");
}

Erm, in effetti... Non so come ho fatto a non vederlo :S.