konsolmeny till arduino

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
lillmange
Inlägg: 129
Blev medlem: 30 januari 2007, 14:51:37
Ort: Upplands Väsby
Kontakt:

Re: konsolmeny till arduino

Inlägg av lillmange »

sodjan skrev:Eller så skriver du rätt ANSI ESC sekvens för att rensa skärmen.
Se t.ex : http://isthe.com/chongo/tech/comp/ansi_escapes.html.
Verkar vara "ESC[2J, Clear screen and home cursor".
Hej Igen,

Nu har jag kommit lite längre men för att få menyerna lite snyggare så behöver jag få skärmen rensad vid meny byte.

Hur använder jag "ESC[2J"?

Jag har provat med Serial.println(ESC[2J); och Serial.print(ESC[2J); men det fungerar inte...
Något förslag på hur man skickar koden ESC[2J via serieporten?

Tack!

/Magnus G
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: konsolmeny till arduino

Inlägg av sodjan »

Du ska inte skicka texten "ESC" !! :shock:
Du ska skicka ASCII-kontroll-tecknet ESC ("escape")...
Se vilken ASCII-tabell som helst, varför inte t.ex: http://www.asciitable.com/.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: konsolmeny till arduino

Inlägg av sodjan »

Enligt ett exempel i Bosen's länkar så borde det t.ex bli :

Kod: Markera allt

#define CLRSCR "\033[2J"

  ...
Serial.print(CLRSCR);
  ...
lillmange
Inlägg: 129
Blev medlem: 30 januari 2007, 14:51:37
Ort: Upplands Väsby
Kontakt:

Re: konsolmeny till arduino

Inlägg av lillmange »

Hej,

Tack för alla bra tips.

Det verkar som om det är lite olika hur programmen hanterar esc koderna.
I putty som jag använder verkar nedan fungera bäst när jag vill rensa skärmen och flytta markören till rad1 kolumn1.

Kod: Markera allt

  Serial.print("\033[2J");  //rensa skärmen
  Serial.print("\033[0;0f"); //flytta markör till rad 1 kolumn 1
Om jag vill slippa skriva flera rader med samma text gång på gång, hur gör man då?
tex om jag vill få till samma kod som i rutan men med nåt liknande Serial.print(CLR_HOME); ?

/Magnus G
Användarvisningsbild
tecno
Inlägg: 27254
Blev medlem: 6 september 2004, 17:34:45
Skype: tecnobs
Ort: Sparreholm, Södermanland N 59° 4.134', E 16° 49.743'
Kontakt:

Re: konsolmeny till arduino

Inlägg av tecno »

Är det inte CLS du söker?
lillmange
Inlägg: 129
Blev medlem: 30 januari 2007, 14:51:37
Ort: Upplands Väsby
Kontakt:

Re: konsolmeny till arduino

Inlägg av lillmange »

Nej, jag menar inte just den koden utan allmänt för att spara kodrader

/Magnus
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: konsolmeny till arduino

Inlägg av sodjan »

Funktioner?
Användarvisningsbild
Bosen
Inlägg: 1753
Blev medlem: 18 juli 2005, 10:56:31
Ort: Karl Gustav, Varberg
Kontakt:

Re: konsolmeny till arduino

Inlägg av Bosen »

Spara koden som en sträng!
Läs på om strings ;)
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: konsolmeny till arduino

Inlägg av sodjan »

> Om jag vill slippa skriva flera rader med samma text...

Vad är "samma text" ?
lillmange
Inlägg: 129
Blev medlem: 30 januari 2007, 14:51:37
Ort: Upplands Väsby
Kontakt:

Re: konsolmeny till arduino

Inlägg av lillmange »

> Om jag vill slippa skriva flera rader med samma text...

Vad är "samma text" ?
Läste du inte frågan?
tex om jag vill få till samma kod som i rutan men med nåt liknande Serial.print(CLR_HOME); ?
/Magnus
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: konsolmeny till arduino

Inlägg av sodjan »

Jo, men jag vet inte vad du menar med "samma text".

Menar du alltså t.ex :

Serial.print(CLR_HOME);
Serial.print(CLR_HOME);
Serial.print(CLR_HOME);

eller menar du t.ex.

Serial.print(CLR_HOME);
Serial.print(ABC);
Serial.print(XYZ);

Antingen förtydligar du frågan eller så var det väl inte så viktigt.

> tex om jag vill få till samma kod som i rutan men med nåt liknande Serial.print(CLR_HOME); ?

Vad menar du med "samma kod", vad är "rutan" och vad menas egentligen med "nåt liknande" ?
Är "rutan" din terminalemulator på PC'n?

Om du bara menar att ersätta "\033[2J" med en symbol så fanns det tidigare i tråden, så det
borde ju inte vara det du frågar om.

Notera att du även kan göra :

Kod: Markera allt

#define CLRHOME "\033[2J\033[0;0f"
  ...
Serial.print(CLRHOME);
för att slippa två kommandon varje gång du vill göra just detta.

Aja, det blir mest gissningar eftersom jag inte är helt klar över vad det gällde.
lillmange
Inlägg: 129
Blev medlem: 30 januari 2007, 14:51:37
Ort: Upplands Väsby
Kontakt:

Re: konsolmeny till arduino

Inlägg av lillmange »

Vad menar du med "samma kod", vad är "rutan" och vad menas egentligen med "nåt liknande" ?
Är "rutan" din terminalemulator på PC'n?
Om jag skriver #define RED "\033[0;31m" så räcker det med att jag senare i koden skriver Serial.print(RED); för att skicka kommandot Serial.print("\033[0;31m");

Finns det något sätt att göra en liknande "genväg" som ovan fast för att skicka flera rader text till serieporten eller ännu bättre: finns det något sätt att skicka flera olika kommandon genom att använda bara ett kommando?
Förutsatt att man har definierat detta i förväg på något sätt.

Med "rutan" menar jag just rutan i mitt inlägg.
Det kanske kallas för kodruta, kodfällt eller något annat påhittigt men jag vet inget annat än att det är just en ruta där min tex/kod syns.

När jag inte vet hur det ska set ut, om det finns eller vad det kallas blev "nåt liknande" (alltså en jämförelse) det bästa jag hade att tillgå.
Notera att du även kan göra :

Kod: Markera allt

#define CLRHOME "\033[2J\033[0;0f"
  ...
Serial.print(CLRHOME);
Det där var ju en bra grejj, den kommer jag använda.

Tack!

/Magnus
lillmange
Inlägg: 129
Blev medlem: 30 januari 2007, 14:51:37
Ort: Upplands Väsby
Kontakt:

Re: konsolmeny till arduino

Inlägg av lillmange »

Bosen skrev:Spara koden som en sträng!
Läs på om strings ;)
OK, tack!
SKa kolla på Strings.

/Magnus
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: konsolmeny till arduino

Inlägg av sodjan »

Notera att för *PyTTY* så spelar det ingen som helst roll om du skickar "clear screen"
och "cursor home" som två separata anrop till Serial.Print eller kombinerat som jag visade.
PyTTY kan inte så något skillnad alls. Det om det...

> finns det något sätt att skicka flera olika kommandon genom att använda bara ett kommando?

Lite oklart vad som avses med "kommando", men jag antar att det är ett kommando till PyTTY.
Ja, du kan skicka hur mycket du vill upp till den maxlängd som är definierad för Serial.Print().
Jag har inte en aning om vad den är, mer än att det måste finnas en gräns, det gör det alltid. :-)
Men hela denna diskussion har mer med applikationsarkitektur att göra. Hur man vill att de
olika delarna i applikationen ska hänga ihop logiskt.

Om "kommando" avser något annat än ett kommando till PyTTY, så får du förtydliga.

Jag tror även att man kan göra så här:

Kod: Markera allt

#define CLRSCR      "\033[2J"
#define CURSHOME    "\033[0;0f"
  ...
Serial.print(CLRSCR)            // Enbart rensa skärmen
Serial.print(CURSHOME)          // Enbart "cursor home"
Serial.print(CLRSCRCURSHOME)    // Både och...
beroende på vad du vill göra på olika ställen i koden.

> SKa kolla på Strings.

Var medveten om att det är väldigt stor skillnad på "#defines" och Strings !
En #define tar i sig ingen plats i processorn, det är en en assembly-time sak.
En String däremot behöver lokal lagring i processorns minne...
Skriv svar