NQC – pbrick.info https://pbrick.info Random information about all discontinued LEGO pbricks (programmable bricks) Fri, 24 Oct 2014 18:28:49 +0000 en-US hourly 1 https://wordpress.org/?v=4.9.5 Controlling a Spybotics pbrick using an RCX https://pbrick.info/2013/10/controlling-a-spybotics-pbrick-using-an-rcx/ https://pbrick.info/2013/10/controlling-a-spybotics-pbrick-using-an-rcx/#respond Thu, 03 Oct 2013 17:43:23 +0000 http://pbrick.info/?p=35 The LEGO MindStorms RCX is capable of sending remote control IR signals to a LEGO Spybotics brick. This opens up a ton of new possibilities, essentially giving the RCX access to two more motors (theoretically even six as you can control up to three Spybotics over different channels).

The RCX has been set up real simply with three touch sensors, one for left, one forward and one right. The programming is made pretty easy using NQC:

task main()
{
  /* Set all three Sensor types to Touch sensors */
  SetSensorType(SENSOR_1, SENSOR_TYPE_TOUCH);
  SetSensorType(SENSOR_2, SENSOR_TYPE_TOUCH);
  SetSensorType(SENSOR_3, SENSOR_TYPE_TOUCH);

  /* Set infrared power to High, so we can cover longer distance. */
  SetTxPower(TX_POWER_HI);

  while(true) // Loop forever
  {
    if (SensorValue(0)==1) //button 1 pressed
    {
      SendRCMessage(RC_CHANNEL_1, RC_CMD_REV, RC_CMD_FWD);
    }
    if (SensorValue(1)==1) //button2 pressed
    {
      SendRCMessage(RC_CHANNEL_1, RC_CMD_FWD, RC_CMD_FWD);
    }
    if (SensorValue(2)==1) //button3 pressed
    {
      SendRCMessage(RC_CHANNEL_1, RC_CMD_FWD, RC_CMD_REV);
    }
    Wait(5);
  }
}

This of course assumes your Spybotics brick has been configured to RC channel 1. Download the program: rcx2spy_remote.nqc

Share

]]>
https://pbrick.info/2013/10/controlling-a-spybotics-pbrick-using-an-rcx/feed/ 0
Configuring the LEGO USB Tower on Linux https://pbrick.info/2013/10/configuring-the-lego-usb-tower-on-linux/ https://pbrick.info/2013/10/configuring-the-lego-usb-tower-on-linux/#comments Wed, 02 Oct 2013 20:20:32 +0000 http://pbrick.info/?p=8 If you are a Linux user and have a Robotics Invention System (RIS) version 1.0 or 1.5, you have a serial infrared (IR) tower, which is fairly easy to set up. RIS version 2.0 came with a USB tower however, and getting that to work isn’t as straightforward. Some of these steps might seem daunting to a novice, but if you follow them correctly you should be OK.

LEGO USB IR Tower

Current versions of the Linux kernel (2.6.*) include support for the LEGO USB Tower by default. There are many Linux distributions, and they’re not all configured the same way. Below instructions were created for Ubuntu version 12.04 TLS 32-bit, one of the most popular distributions at this time.

Step 1 – enable the LEGO USB IR Tower module (¨driver¨)

First make sure the USB IR Tower is connected to your computer. Now open a terminal window to determine if the module actually exists on your system, by running this command:

find /lib/modules -name *lego*

The output will show you one or more file names with long paths in front of them. Just as long as at least one of them ends with legousbtower.ko, you’re OK to continue. If not, this means your distribution doesn’t have this driver available as a module and you may need to actually recompile your kernel. This article does not cover that.

Now we need to make sure the module gets loaded at boot time. Open the file /etc/modules in an editor, for example with the command:

sudo gedit /etc/modules

Add a new line to the end of this file with just the name of the module: legousbtower (without the .ko suffix). My /etc/modules file looks like this.

# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.

lp
legousbtower

Save the file and exit the editor. Now reboot the system.
After the reboot, open a terminal window again, and run the command:

ls -l /dev/usb

You should see output similar to this:

total 0
crw------- 1 root root 180, 0 Oct  2 18:39 hiddev0
crw------- 1 root root 180, 1 Oct  2 18:39 legousbtower1

It came up with number 1 for mine, it could have a different number for you, usually legousbtower0. We need to change the permissions on it, run this command:

sudo chmod 666 /dev/usb/legousbtower1
EDIT: the chmod command only changes the permissions temporarily. I found a more permanent solution.

All done! The USB Tower is ready to be used… But now what?

Step 2 – adding USB support to NQC.

The LEGO brick programming language of choice on Linux is NQC (at least with the standard LEGO firmware). It has support for the RCX, Scout and Spybotics pbricks. The latest official release doesn’t have USB support for Linux, but thankfully somebody has already made a patch for this, so we can simply get the source code, patch it and then compile it ourselves. This sounds harder then it is, really. I didn’t run into any errors at all (not even on the first attempt!), which probably says a lot about the quality of the code (kudos to David Baum and John Hansen).

Go back to the terminal and create a directory in which you’ll build NQC. For example, I named mine /develop/nqc.  Make sure this is your current directory and it is empty. Then run the below commands, in that order. They will download and extract the sources and patch:

mkdir nqc-3.1.r6 && cd nqc-3.1.r6
wget http://bricxcc.sourceforge.net/nqc/release/nqc-3.1.r6.tgz
tar xfz nqc-3.1.r6.tgz
cd ..
wget http://sourceforge.net/p/bricxcc/patches/_discuss/thread/00b427dc/b84b/attachment/nqc-01-Linux_usb_and_tcp.diff
ls -l

The output of that last command should look like:

-rw-rw-r-- 1 michiel michiel 13912 Jan  2  2013 nqc-01-Linux_usb_and_tcp.diff
drwxrwxr-x 9 michiel michiel  4096 Oct  2 21:52 nqc-3.1.r6

So now you have a directory containing the source code of NQC, and the patch to enable USB support on Linux. Now apply the patch like this:

patch -p0 < nqc-01-Linux_usb_and_tcp.diff

This should tell you it patched 9 files. Now on to compile NQC!

cd nqc-3.1.r6
make

This will start scrolling a huge list of scary-looking output. Just sit back and relax. When it’s all done, check if the binary files have been produced.
Run “ls -l bin/” as shown below, and the output should look  very similar:

michiel@Ubuntu13:~/develop/nqc/nqc-3.1.r6$ ls -l bin
total 636
-rwxrwxr-x 1 michiel michiel  12812 Oct  2 21:57 mkdata
-rwxrwxr-x 1 michiel michiel 618233 Oct  2 21:58 nqc

Now to install NQC, simply run:

sudo make install

This will install NQC, so afterwards you will be able to run the command “nqc” from any directory.

All done!

To compile and download an nqc program you wrote yourself and send it to the RCX using the USB tower, run:

nqc -Susb:/dev/usb/legousbtower1 -d helloworld.nqc

 

Share

]]>
https://pbrick.info/2013/10/configuring-the-lego-usb-tower-on-linux/feed/ 10