Sida 2 av 5

Re: konsolmeny till arduino

Postat: 16 januari 2012, 15:08:54
av lillmange
sodjan skrev:Jag tror att det bästa är om TS är lite med specific så att det
framgår lite bättre vad som är frågan/problemet.

Jag är verkligen tacksam för att du tar dig tid med att svara på frågor men jag tycker inte jag kan förklara tydligare att jag vill skapa ett cli eller menysystem som jag via tex putty kan styra arduino inställningar med.

/Magnus

Re: konsolmeny till arduino

Postat: 16 januari 2012, 15:23:47
av sodjan
Jo, det har du ju sagt. Men vad är problemet?
D.v.s varför gör du inte det du säger att du vill?
Det känns som att du inte ens har satt igång.
Det är mycket enklare att hjälpa när man har ett
första försök att utgå från.

Gav "Dimmer" exemplet några idéer?

> Hur får man arduino att rensa skärmen i putty?

Hur rensar PyTTY skärmen över huvudtaget ?
En brute-force lösning är 24 (eller hur många rader du nu
kör med) CR/LF så att allt "rullar av" skärmen.
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".

Re: konsolmeny till arduino

Postat: 16 januari 2012, 16:03:57
av jesse
Vi vet ju inte vilken nivå du befinner dig på för tillfället?

Kan du överhuvudtaget skicka tecken till Putty från Arduinon?
Du får ju börja där.

Re: konsolmeny till arduino

Postat: 16 januari 2012, 16:10:52
av jesse
Bosen skrev:just detta jesse är jag nog ganska säker på att TS har koll på, då detta är färdiga rutiner i Arduino. (länk till arduino rutiner)
Det TS är ute efter vad jag tror, är att läsa av olika kommandon på ett enkelt sätt. Att lägga dom i en buffer och jämföra strängar ungefär.... det är här man kör fast...
speciellt dessa då: serial
Dessa funktioner implementerar ju redan en buffert, så den är ju bara att läsa av...
Sedan kan du ju applicera mitt förslag med switch-sats, så har du ju din första enteckens-meny.
(problemet med denna jämfört med min hemmagjorda är kanske att du inte kan se om ett 'enter' har kommit in utan att läsa av alla tecken som kommer in först. Och då måste du ju lägga dem i en andra buffert för att minnas innehållet. Om det inte finns nån funktion som liknar "line input" (som det hette i ABC80 basic !)

Jo, den funktionen går att få med SerialEvent:
can be set with Serial.bufferUntil() to only trigger after a specific character is read.
(hmm... vad sjutton är Serial.bufferUntil() och varför har dom ingen normal dokumentation? :doubt: )

Re: konsolmeny till arduino

Postat: 16 januari 2012, 17:13:35
av sodjan
Måste hålla med...
BufferUntil() verkar vara något som finns som standard i "språket",
men det är komplett omöjligt att hitta något referensmaterial som
entydigt beskriver vad den gör. Lite Googlande ger kodexempel som
använder funktionen, men det är ju inte samma sak...
T.ex: http://arduino.cc/en/Tutorial/SerialCallResponseASCII,
men koden där BufferUntil() är med är bortkommenterad...

Re: konsolmeny till arduino

Postat: 16 januari 2012, 17:42:29
av ToPNoTCH
Det kan vara lite knepigt att hålla isär pickar och morötter i Arduino världen.

Det finns ett opensource språk som heter processing (se här).
Arduino har "tillämpat" det språket för programmering mot Arduino korten.

Då den kompilerade koden från processing används mot "vanliga datorer", så finns inte alla kommandon med i den tillämpade varianten mot Arduino korten.

För att göra det hela om än mer komplicerat så är det processings IDE som nyttjas för Arduino och du kan göra även göra processing program mot helt vanliga datorer i samma gränssnittet.

I de bortkommenterade stycken du talar om Sodjan så är det just ett processing program som koden utgör, och det kompilerar alltså till det program man skall köra på sin PC som "motpart" till sitt Arduino kort och den koden.

Det är rätt vanligt i Arduino sammanhang att om man behöver ett programm i "PC ändan" så gör man det i processing, då språket i mångt och mycket är lika, samma IDE osv.

För övrigt hade detta framgått om du scrollat liiiite till på sidan :wink:

Re: konsolmeny till arduino

Postat: 16 januari 2012, 17:56:08
av sodjan
Två saker...

Av andra källor så verkar det som att även BufferUntil() är OK att köra på Arduino.
Är det inte så ? Gäller inte det som står på denna sida Arduino ?
http://arduino.cc/en/Reference/SerialEvent

Och ovsett om det är så eller inte, var är dokumentationen för BufferUntil() ?

Re: konsolmeny till arduino

Postat: 16 januari 2012, 19:34:57
av jesse
sodjan skrev:T.ex: http://arduino.cc/en/Tutorial/SerialCallResponseASCII,
men koden där BufferUntil() är med är bortkommenterad...
Även om de intressanta raderna är bortkommenterade, så används de exakt så som jag tänkt - den fyller på bufferten tills önskat tecken kommer in, och då signalerar den att data kommit in:
// read bytes into a buffer until you get a linefeed (ASCII 10):
myPort.bufferUntil('\n');
Förklaring fås i programkommentarerna:
// serialEvent method is run automatically by the Processing applet
// whenever the buffer reaches the byte value set in the bufferUntil()
// method in the setup():
Och serialEvent är visst ingen funktion som 'finns' - den verkar man få skriva själv:

Kod: Markera allt

void serialEvent(Serial myPort) { 
  // read the serial buffer:
  String myString = myPort.readStringUntil('\n');
  // if you got any bytes other than the linefeed:
    myString = trim(myString);
 
    // split the string at the commas
    // and convert the sections into integers:
    int sensors[] = int(split(myString, ','));

    // print out the values you got:
    for (int sensorNum = 0; sensorNum < sensors.length; sensorNum++) {
      print("Sensor " + sensorNum + ": " + sensors[sensorNum] + "\t"); 
    }
    // add a linefeed after all the sensor values are printed:
    println();
    if (sensors.length > 1) {
      xpos = map(sensors[0], 0,1023,0,width);
      ypos = map(sensors[1], 0,1023,0,height);
      fgcolor = sensors[2];
    }
    // send a byte to ask for more data:
    myPort.write("A");
  }

Re: konsolmeny till arduino

Postat: 16 januari 2012, 20:45:49
av sodjan
> Och serialEvent är visst ingen funktion som 'finns'...

Låter märkligt, den finns listad under "Library" under Serial->functions
tillsammans med read(), writre() och andra funktioner. Låter konstigt
om man ändå skulle behöva skriva den själv...

Re: konsolmeny till arduino

Postat: 16 januari 2012, 21:04:29
av ToPNoTCH
Jag håller med.

Det känns som om något "slunkit med" från processing vad gäller dokumentationen.

På skoj försökte jag kompilera en sådan rad (Serial.bufferUntil(0x1);) och fick då:

Kod: Markera allt

error: 'class HardwareSerial' has no member named 'bufferUntil'

Re: konsolmeny till arduino

Postat: 16 januari 2012, 21:10:34
av ToPNoTCH
Jag tror att för Arduino kanske readBytesUntil() i Stream klassen kan vara rätt metod.

Re: konsolmeny till arduino

Postat: 16 januari 2012, 21:23:35
av nifelheim
Som jag uppfattar det söker TS något lib typ ncurses fast för Arduino (för att slippa googla fram alla ANSI escape koder själv)

Kallas TUI (Text-based user interface) så lite googlande kanske kan ge någon färdig kod.

http://en.wikipedia.org/wiki/Text-based_user_interface

Re: konsolmeny till arduino

Postat: 16 januari 2012, 21:26:07
av ToPNoTCH
Håller med.

Vi krånglar till det i onödan för TS.

Även Bosen's tips (post 6 någonting) om "CmdMessenger" verkar smidigt.

Re: konsolmeny till arduino

Postat: 16 januari 2012, 23:01:21
av lillmange
Hej,

Min frågeställning verkar ha varit lite otydlig och det beror troligen mest på min avsaknad av kunskap i ämnet.

Jag har nu fått många tips på exempelkoder och specifika kommandon jag kanske kan använda.
Ett lib för TUI är en väldigt bra beskrivning av det jag söker men det kan jag googla fram själv nu när jag vet vad det kallas.

Så tillsammans med seriport exempelkoder ska det nog lösa sig fin fint.

Tack!

/Magnus

Re: konsolmeny till arduino

Postat: 17 januari 2012, 11:37:14
av jesse
Berätta gärna vilken lösning du hittade (eller behöver hjälp med).