Очистка экрана терминала?

я считываю данные с 9 различных датчиков для моего робота, и мне нужно отображать их все стабильно, в одном окне, чтобы я мог сравнить значения и посмотреть, выключен ли какой-либо из показаний.

проблема у меня с обоими серийными.печать и lcd.печать заключается в том, что значения постоянно перемещаются, и я не могу хорошо рассмотреть их при перемещении робота.

Я думал назвать что-то вроде серийного номера.clear () перед отображением чего-либо еще, и это будет просто держите вещи устойчивыми и в одном месте, изменяя только ценности.

из того, что я нашел до сих пор, серийный.печать (17, байт), например, больше не поддерживается (вызов ключа ESC).

Так...для тех, у кого немного больше опыта Arduino...как правильно это сделать?

13 ответов


последовательный монитор Arduino не является обычным терминалом, поэтому его невозможно очистить экран с помощью стандартных команд терминала. Я предлагаю использовать фактический эмулятор терминала, например шпаклевка.

команда для очистки экрана терминала-ESC[2J

для выполнения в Arduino код:

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

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


нет способа очистить экран, но, действительно простой способ подделать его может печатать столько Serial.println(); Как вам нужно, чтобы сохранить все старые данные из экрана.


я обнаружил, что ASCII 12 делает формы, это новая страница. вот определение Википедии

" лента форм-это символ управления ASCII, нарушающий страницы. Оно принуждает принтер для извлечения текущей страницы и продолжения печати вверху другого"

код

Serial.write(12);

Arduino Terminate не поддерживает символ но шпаклевка светлый клиент 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);

который обеспечит возврат каретки, возврат к началу строки каждой итерации, которая должна делать то, что ты ищешь? (Особенно, если все фиксировано по ширине).


нашел тупо простой способ исправить эту проблему. Просто измените размер окна терминала только на 1 строку, и это будет намного проще читать!


лучший способ, который я могу придумать, это использовать обработка есть несколько представлений в сети, как отображение последовательных данных, Ардуино графе и Ардуино радара
Поскольку Arduino основан на обработке его не так сложно узнать


ESC-это символ _2_7, не _1_7. Вы также можете попробовать decimal 12 (он же. ФФ, форма подачи).

обратите внимание, что все эти специальные символы обрабатываются не Arduino, а программой на принимающей стороне. Так что стандартного терминала Unix (в xterm, гном-терминал, kterm, ...) обрабатывает другой набор управляющих последовательностей, а затем говорит терминальную программу Windows, такую как HTerm.

поэтому вы должны указать, какую именно программу вы используете для отображения. После этого можно рассказать, какие управляющие символы и управляющие последовательности можно использовать.


невозможно очистить окно последовательного монитора на основе входящих последовательных данных.

Я могу придумать несколько вариантов, самый простой (и самый дешевый) - использовать println() со строкой фиксированной ширины, сгенерированной вами и содержащей данные датчика.

последовательный монитор Arduino IDE Autoscroll флажок означает, что если вы постоянно отправляете строку фиксированной ширины (с задержкой 500 мс, возможно) , это создаст впечатление, что она обновляется, как только она попадает в внизу и начинает прокрутку. Вы также можете уменьшить высоту окна, чтобы оно выглядело так, как будто у него только одна строка.

для выполнения строки фиксированной ширины, которая подходит для serial println() вам понадобятся функции для преобразования значений датчиков в строки, а также pad/trim их до постоянного размера. Затем объедините значения вместе (включая разделители, если это упрощает чтение данных)

вывод чего-то похожего на это-то, на что я намекаю:

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

учитывая все обстоятельства, это не отличное решение, но оно даст вам результат.

гораздо умнее идея заключается в создании другой программы за пределами Arduino, и это IDE, который слушает com-порт для значений датчиков, отправленных из Arduino. Ваша программа Arduino должна будет отправить сообщение, которое ваша внешняя программа может однозначно интерпретировать, что-то вроде 1=0.5; где 1 = идентификатор датчика и 0,5 = значение датчика. Затем внешняя программа сохранит эти значения (1 для каждого датчика). Внешняя программа может отображать эту информацию любым способом, который вы хотели бы, хороший выход консоли будет относительно легко достичь : -)

C# и .NET ' s serialport класс, который приятно использовать. (большую часть времени!)

Python имеет модуль под названием pyserial, что также легко отлично.

любой язык даст вам гораздо больший контроль над выходом консоли, если вы решите продолжить этот путь.


Если вы измените baudrate, например, взад и вперед, он очищает окно последовательного монитора в версии 1.5.3 Arduino IDE для разработки Intel Galileo


еще один удар по можете:

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

вы могли бы просто сделать:

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

Я сделал это 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


/*
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);  

  }