Sida 3 av 5
Re: konsolmeny till arduino
Postat: 21 januari 2012, 13:46:05
av lillmange
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
Re: konsolmeny till arduino
Postat: 21 januari 2012, 14:01:40
av sodjan
Du ska inte skicka texten "ESC" !!
Du ska skicka ASCII-kontroll-tecknet ESC ("escape")...
Se vilken ASCII-tabell som helst, varför inte t.ex:
http://www.asciitable.com/.
Re: konsolmeny till arduino
Postat: 21 januari 2012, 14:03:15
av Bosen
Re: konsolmeny till arduino
Postat: 21 januari 2012, 14:10:53
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);
...
Re: konsolmeny till arduino
Postat: 22 januari 2012, 00:14:05
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
Re: konsolmeny till arduino
Postat: 22 januari 2012, 00:30:47
av tecno
Är det inte CLS du söker?
Re: konsolmeny till arduino
Postat: 22 januari 2012, 00:35:25
av lillmange
Nej, jag menar inte just den koden utan allmänt för att spara kodrader
/Magnus
Re: konsolmeny till arduino
Postat: 22 januari 2012, 01:42:09
av sodjan
Funktioner?
Re: konsolmeny till arduino
Postat: 22 januari 2012, 04:13:35
av Bosen
Spara koden som en sträng!
Läs på om strings

Re: konsolmeny till arduino
Postat: 22 januari 2012, 11:08:11
av sodjan
> Om jag vill slippa skriva flera rader med samma text...
Vad är "samma text" ?
Re: konsolmeny till arduino
Postat: 22 januari 2012, 15:38:20
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
Re: konsolmeny till arduino
Postat: 22 januari 2012, 16:01:08
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.
Re: konsolmeny till arduino
Postat: 22 januari 2012, 21:06:00
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
Re: konsolmeny till arduino
Postat: 22 januari 2012, 21:06:42
av lillmange
Bosen skrev:Spara koden som en sträng!
Läs på om strings

OK, tack!
SKa kolla på Strings.
/Magnus
Re: konsolmeny till arduino
Postat: 22 januari 2012, 23:23:33
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...