| 
				   | 
				
| Line 1: | 
Line 1: | 
|   | == Welcome to Logo for NXT ==  |   | == Welcome to Logo for NXT ==  | 
|   | + |  | 
|   | + | [[Image:nxtlogo.gif]]  | 
|   |  |   |  | 
|   | * [[NXT Logo Overview|Overview]]  |   | * [[NXT Logo Overview|Overview]]  | 
| Line 5: | 
Line 7: | 
|   | * [[NXT Logo User Guide]]  |   | * [[NXT Logo User Guide]]  | 
|   |  |   |  | 
| − | 
  |   | 
| − | [[Eurologo2007 Workshop]]
  |   | 
| − | 
  |   | 
| − | This page contains information about the project of programming NXT in Logo language.
  |   | 
| − | 
  |   | 
| − | The project is under intensive development, and there are no releases yet. '''the first preview will come in the very start of September'''
  |   | 
| − | However, the projet is open-source and the latest development version is available in the [http://webcvs.robotika.sk/cgi-bin/cvsweb/robotika/src/imagine/nxt/logo/current/ CVS].
  |   | 
| − | 
  |   | 
| − | [[Image:nxtlogo.gif]]
  |   | 
| − | 
  |   | 
| − | == Features ==
  |   | 
| − | 
  |   | 
| − | * Implemented in Imagine and [[NBC|Next Byte Codes]] (NBC)
  |   | 
| − | * Three levels of use:
  |   | 
| − | # Interactive Imagine project with direct GUI controls that allow interfacing with NXT robot over Bluetooth
  |   | 
| − | # Loadable imagine library (nxt.imt) that contains set of procedures for direct control of NXT robot over Bluetooth from your Imagine projects
  |   | 
| − | # Interpreter of Logo running on the NXT that can run logo programs (with restricted syntax), which can communicate with Imagine projects and control the robots motors and sensors. 
  |   | 
| − | 
  |   | 
| − | == Motor & Sensor procedures ==
  |   | 
| − | 
  |   | 
| − |  (motor m cmd arg)
  |   | 
| − |  
  |   | 
| − |    where m is the number of motor(s) as in NBC:
  |   | 
| − |     0 - motor A
  |   | 
| − |     1 - motor B
  |   | 
| − |     2 - motor C 
  |   | 
| − |     3 - motors AB
  |   | 
| − |     4 - motors AC
  |   | 
| − |     5 - motors BC
  |   | 
| − |     6 - motors ABC
  |   | 
| − |     
  |   | 
| − |    and cmd is one of (with the corresponding argument, similar to NBC):  
  |   | 
| − |      onfwd       power
  |   | 
| − |      onrev       power   
  |   | 
| − |      off         (ignored)
  |   | 
| − |      float       (ignored) 
  |   | 
| − |      fwdr        [power regmode]
  |   | 
| − |      revr        [power regmode]
  |   | 
| − |      fwds        [power turnpct]
  |   | 
| − |      revs        [power turnpct]
  |   | 
| − |      onrot       [power angle]
  |   | 
| − |      rst         kind  (1-4)     
  |   | 
| − |  
  |   | 
| − |  (readmotor m cmd)
  |   | 
| − |  
  |   | 
| − |    where cmd is one of:
  |   | 
| − |      rotations
  |   | 
| − |      tacho
  |   | 
| − |      blocktacho
  |   | 
| − |  
  |   | 
| − |  (sensor N)
  |   | 
| − |  
  |   | 
| − |  (setsensor N type)
  |   | 
| − |  
  |   | 
| − |     where type is number according to NBC:
  |   | 
| − |       0 - raw
  |   | 
| − |       1 - switch
  |   | 
| − |       2 - temperature
  |   | 
| − |       3 - refl
  |   | 
| − |       4 - angle
  |   | 
| − |       5 - light active
  |   | 
| − |       6 - light inactive
  |   | 
| − |       7 - sound db
  |   | 
| − |       8 - sound dba
  |   | 
| − |       9 - custom
  |   | 
| − |       10 - lowspeed
  |   | 
| − |       11 - lowspeed with 9V
  |   | 
| − |       12 - high speed
  |   | 
| − |     add the following constants for adjusting the output:
  |   | 
| − |       32 - boolean output (0/1)
  |   | 
| − |       64 - transition count
  |   | 
| − |       96 - period counter
  |   | 
| − |       128 - percentage (0-1023 value normalized to 0-100)
  |   | 
| − |       160 - temperature in C
  |   | 
| − |       192 - temperature in F
  |   | 
| − |       224 - angle steps
  |   | 
| − |       31 - slope mask
  |   | 
| − |       224 - mode mask
  |   | 
| − | 
  |   | 
| − | == Supported primitives ==
  |   | 
| − | 
  |   | 
| − | NXT Logo supports the following primitive procedures and operations:
  |   | 
| − | 
  |   | 
| − | # Arithmetic:  ''<tt>add, sub, mul, div, mod, neg</tt>''
  |   | 
| − | # Logic: ''<tt>and, or, xor, not</tt>''
  |   | 
| − | # Bitwise: ''<tt>bitand, bitor, bitxor, bitnot</tt>''
  |   | 
| − | # Lists and words: ''<tt>first, bf, last, bl, item, se, list, word</tt>''
  |   | 
| − | # Maps & co.: ''<tt>map, apply, foreach, run, remote</tt>''
  |   | 
| − | # Loops and conditions: ''<tt>repeat, while, foreach, if, ifelse</tt>''
  |   | 
| − | # Predicates: ''<tt>empty? number? list? word? equal? gt? lt? ge? le? member?</tt>''
  |   | 
| − | # Variables and procedures: ''<tt>make, let, to, op, stop, erase, launch</tt>''
  |   | 
| − | # NXT file handling: ''<tt>load, printto, fopen, fwrite, fread, fclose, fremove</tt>''
  |   | 
| − | # Sounds: ''<tt>tone, sound</tt>''
  |   | 
| − | # Motors, sensors: ''<tt>motor, readmotor, sensor, setsensor, battery</tt>''
  |   | 
| − | # Other: ''<tt>wait, random, print, draw, ascii, char, boot, gc, fm</tt>''
  |   | 
| − | 
  |   | 
| − | The expressions must be in prefix notation. Variables are used the same way as in Logo - as "name when referring to variable name, and as :name when referring to its value. There are global variables as well as local variables, lexical scoping as usual in Logo.
  |   | 
| − | 
  |   | 
| − | The <tt>(remote "expression)</tt> operations allow to start evaluating an expression on NXT when started from PC, and vice-versa. This can be used for communication. Of course, one could then easily say, for example:
  |   | 
| − | 
  |   | 
| − |  remote "|[print "hello]|
  |   | 
| − | 
  |   | 
| − | or
  |   | 
| − | 
  |   | 
| − |  remote "|[my_program 123]|
  |   | 
| − | 
  |   | 
| − | or read value of remote variable:
  |   | 
| − | 
  |   | 
| − |  remote "|:var|
  |   | 
| − | 
  |   | 
| − | However, one has to keep in mind that BlueTooth communication is slow due to switching of the direction of the transceiver and receiver. Therefore, it is preferable to implement higher-level functions and procedures that can run on NXT brick autonomously. Logo programs have about 30kb of memory available - for storing both the logo programs and data, however, programs can load/erase data and code from NXT files that are stored in the large flash.
  |   | 
| − | 
  |   | 
| − | == Examples ==
  |   | 
| − | 
  |   | 
| − | Some sample code for Logo for NXT is in the [http://webcvs.robotika.sk/cgi-bin/cvsweb/robotika/src/imagine/nxt/logo/current/examples Examples folder].
  |   | 
| − | 
  |   | 
| − | == Syntax ==
  |   | 
| − | 
  |   | 
| − | Detailed syntax is shown in the file [http://webcvs.robotika.sk/cgi-bin/cvsweb/~checkout~/robotika/src/imagine/nxt/logo/current/syntax.txt?content-type=text%2Fplain syntax.txt].
  |   | 
| − | 
  |   | 
| − | == Reference Guide ==
  |   | 
| − | 
  |   | 
| − | More detailed description of all commands and the system are located here:
  |   | 
| − | [http://webcvs.robotika.sk/cgi-bin/cvsweb/~checkout~/robotika/src/imagine/nxt/logo/current/reference_guide.html Logo for NXT Reference Guide].
  |   | 
| − | 
  |   | 
| − | == Internals ==
  |   | 
| − | 
  |   | 
| − | Short specification of the Logo for NXT internals is in the file
  |   | 
| − | [http://webcvs.robotika.sk/cgi-bin/cvsweb/~checkout~/robotika/src/imagine/nxt/logo/current/specification.txt?content-type=text%2Fplain specification.txt].
  |   | 
| − | 
  |   | 
| − | == Publications ==
  |   | 
| − | 
  |   | 
| − | * [[Media:eurologo2007_nxtlogo.pdf|Eurologo 2007 paper]] and [http://webcvs.robotika.sk/cgi-bin/cvsweb/~checkout~/robotika/src/imagine/nxt/logo/doc/nxtlogo.ppt presentation]
  |   | 
|   |  |   |  | 
|   | __notoc__  |   | __notoc__  |