Wissen van het Terminal-scherm?

Ik lees gegevens van 9 verschillende sensoren voor mijn robot en ik moet ze allemaal gestaag weergeven, in hetzelfde venster, zodat ik de waarden kan vergelijken en zie of een van de metingen is uitgeschakeld.

Het probleem dat ik met zowel serial.print en LCD.Print heb, is dat de waarden voortdurend bewegen en ik kan ze niet echt goed bekijken tijdens het verplaatsen van de robot.

Ik dacht erover om iets te noemen als Serial.Clear () voordat ik iets anders toont en dat zou gewoon de dingen stabiel en op één plek houden, alleen de waarden veranderen.

Van wat ik tot nu toe heb gevonden, Serial.Print (17, byte) bijvoorbeeld wordt niet langer ondersteund (belt u de ESC-toets).

Dus … voor mensen met een beetje meer Arduino-ervaring … Wat is de juiste manier om dit te doen?


1, Autoriteit 100%

De ARDUINO-seriële monitor is geen reguliere terminal, dus het is niet mogelijk om het scherm te wissen met behulp van standaard terminalopdrachten. Ik stel voor met het gebruik van een echte terminalemulator, zoals putty .

De opdracht voor het opruimen van een Terminal-scherm is ESC [2J

Om in Arduino-code te bereiken:

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

Bron:
http://www.instructables.com/id/a-wirelessly-controlled-arduino-powered-message-b/step6/USILE-CODE-EXPLAIND-CLEARING-A-SILE-TERMINIEL /


2, Autoriteit 21%

Er is geen manier om het scherm leeg te maken, maar een heel gemakkelijke manier om het te vervalsen, is door zoveel Serial.println();af te drukken als nodig is om alle oude gegevens uit de scherm.


Antwoord 3, autoriteit 16%

Ik heb ontdekt dat ASCII 12 een Form feedmaakt, dat is een nieuwe pagina. hier is een wikipedia-definitie

“Form feed is een pagina-brekend ASCII-besturingsteken. Het dwingt de
printer om de huidige pagina uit te werpen en bovenaan door te gaan met afdrukken
van een ander”

De code is

Serial.write(12);

Arduino Terminate ondersteunt het karakter nietmaar Puttyeen lichte open source telnet-client kan het

Een voorbeeld van de code

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
    }

Antwoord 4, autoriteit 8%

Je zou kunnen proberen:

Serial.write(13);

Wat zorgt voor een regelterugloop, die elke iteratie terugkeert naar het begin van de regel – wat zou moeten doen wat u nastreeft? (Vooral als alles een vaste breedte heeft).


Antwoord 5, autoriteit 3%

de beste manier die ik kan bedenken is het gebruik van processing. Er zijn een paar introducties op het net zoals seriële gegevens weergeven, arduino-grafieken arduino-radar
Aangezien Arduino gebaseerd is op verwerking, is het niet zo moeilijk om te leren


Antwoord 6, autoriteit 3%

ESC is het teken _2_7, niet _1_7. Je kunt ook decimaal 12 proberen (ook bekend als FF, formulierfeed).

Merk op dat al deze speciale tekens niet door de Arduino worden verwerkt, maar door het programma aan de ontvangende kant. Dus een standaard Unix-terminal (xterm, gnome-terminal, kterm, …) verwerkt een andere set besturingssequenties dan een Windows-terminalprogramma zoals HTerm.

Daarom moet je specificeren welk programma je precies gebruikt voor weergave. Daarna is het mogelijk om u te vertellen welke controletekens en controlereeksen bruikbaar zijn.


Antwoord 7, autoriteit 3%

Het is niet mogelijk om het venster Seriële monitor te wissen op basis van binnenkomende seriële gegevens.

Ik kan een aantal opties bedenken, de eenvoudigste (en meest bedrieglijke) is om println()te gebruiken met een string met een vaste breedte die je hebt gegenereerd en die je sensorgegevens bevat.

Het aankruisvak Autoscrollvan de seriële monitor van de Arduino IDE betekent dat als u de string met vaste breedte blijft verzenden (met een vertraging van 500 ms misschien), dit de indruk wekt dat deze wordt bijgewerkt zodra deze onderaan is en begint te scrollen. Je kunt ook de hoogte van het venster verkleinen, zodat het lijkt alsof het maar één regel heeft.

Om een string met een vaste breedte te verkrijgen die geschikt is voor seriële println(), heb je functies nodig om je sensorwaarden om te zetten in strings, en om ze op te vullen/te trimmen tot een blijvende grootte. Voeg vervolgens de waarden samen (inclusief scheidingstekens als dit de gegevens gemakkelijker leesbaar maakt)

Een uitvoer van iets dat lijkt op dit is waar ik naar verwijs:

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

Alles bij elkaar genomen is dit geen geweldige oplossing, maar het zou wel resultaat opleveren.

Een veel slimmer idee is om een ander programma buiten Arduino te bouwen en het is IDE die naar de com-poort luistert voor sensorwaarden die door de Arduino worden verzonden. Uw Arduino-programma moet een bericht verzenden dat uw externe programma ondubbelzinnig kan interpreteren, bijvoorbeeld 1=0.5;waarbij 1 = sensor-ID en 0,5 = sensorwaarde. Het externe programma zou dan deze waarden behouden (1 voor elke sensor). Het externe programma kan deze informatie vervolgens op elke gewenste manier weergeven, een mooie console-uitvoer zou relatief eenvoudig te bereiken zijn 🙂

C#heeft .NET‘s serialportklasse die een plezier is om te gebruiken. (meestal!)

Python heeft een module met de naam pyserial, wat ook heel eenvoudig is.

Beide talen geven je veel meer controle over de console-uitvoer, mocht je ervoor kiezen om op deze manier door te gaan.


Antwoord 8, autoriteit 3%

Als u de baudrate bijvoorbeeld heen en weer wijzigt, wordt het venster Serial Monitor in versie 1.5.3 van Arduino IDE voor Intel Galileo-ontwikkeling gewist


Antwoord 9, autoriteit 3%

Nog een schop tegen het blik:

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

Antwoord 10

Je zou gewoon kunnen doen:

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

of als je wilt:

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

Antwoord 11

Imprime en linea los data con un espaciado determinado, así tendrás columnas de data de la misma variable en será más claro

Druk alle gegevens in lijn af, zodat je rijen hebt met de gegevens die je nodig hebt, ik los hetzelfde probleem op deze manier op, zorg ervoor dat je een constante gegevensgrootte en afstand tussen de gegevens hebt toegewezen, ik heb dit gemaakt

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

Antwoord 12

Als een van jullie een virtuele terminal in proteus gebruikt en deze wil wissen, voeg dan gewoon Serial.write(0x0C) toe;
en het gaat goed


13

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

Other episodes