10

LEGO calls this communication protocol the "LEGO Wireless Protocol" (LWP). The documentation is publicly available at https://lego.github.io/lego-ble-wireless-protocol-docs/. There is also a GitHub repository that provides the source of this website at https://github.com/LEGO/lego-ble-wireless-protocol-docs. Because of this, it seems reasonable to expect ...


9

If you wish to program the EV3 with Scratch, then check out this project on github: https://github.com/koen-dejonghe/ev3-scratch-helper-app This software is a so-called helper app, that interfaces between the Scratch 2.0 offline editor and the Lego Mindstorms EV3. The EV3 must be booted from Lejos (http://sourceforge.net/p/lejos/wiki/Home/), requires a ...


8

Yes, it is possible to pass the port number as a parameter to a sensor or motor block via data wire. It's just that it's manually selected by default. To change this, go to the port of the sensor or motor block, and select the top-most option which has the plug icon on it: It will then create a data port for which motor port you want to use: The same ...


7

I could not find this in the help file, but according to this thread "Another little known characteristic of MyBlocks is that they aren't re-entrant. No two copies of the same MyBlock can be running at the same time." I tried a few simple programs in EV3-G and confirmed that this is true. The order in which they run appears to be random.


7

This is actually a surprisingly difficult task. If you search for similar questions over on the Robotics stack exchange, you will find very smart people who can't even get it right with thousand-dollar localization solutions and graduate-level control theory. If you have a Gyro sensor like Michael suggested, you're on the right track. You can probably get ...


6

Your code handling the behaviours like "Shoot 3 times if the touch sensor is triggered" or "Shoot if the light sensor is triggered" should use 'if' statements. Then, instead of always being called, the "shooting" code would append only on sensor events. After shooting, the robot would then go back to the "Driving around" part of the code. This page is a ...


6

It turns out that the issue is a faulty/weak motor connector socket. While randomly trying to troubleshoot, I found that if I did nothing more than press or move the cable, the motor would act bizarrely. Initially I thought it was a bad cable, but after trying additional cables it seems that it is more likely just a poor connection at the motor. I suppose ...


6

I know that this question is old, but if someone else has this question, I have found that these error messages often appear when you are either trying to access a non existent array (i.e. you copied the block from another project and you did not change the name of the variable) OR when trying to access a value of an array with an index that does not exist (...


6

It is possible now (since version 1.3.0) by pressing the button at the upper left corner of the block:


6

One way of doing this is using a loop and interrupting it. How it works: The "Loop Interrupt" block stops all blocks running inside of the loop, so by interrupting the loop after either wait block, it will stop the other wait block. The type of loop doesn't actually matter because we never reach that point. I chose to wait for "Logic" with a value of "...


6

I think it would be more realistic to have the robot drive in a straight line but have a linkage to the foci of the ellipse that "pulls" the robot towards the center of the ellipse just as orbiting objects are pulled toward Earth by gravity. For example, you could use two nails in a board as the foci. Tie a string in a loop to use as the linkage. Place the ...


6

Update: There is a tool at http://ev3treevis.azurewebsites.net/ that can be use to create a new .ev3 file from a .rbf file recovered from an EV3 brick. Some information will be lost, but at least simple programs should be able to be recovered. Original answer: You can extract the compiled program from the EV3. Compiled programs have a .rbf file extension. ...


6

A sensor port can't directly output to a motor. The sensor drivers can't provide enough power to supply a motor. You have a couple options: Daisy-chain two EV3s together. The first can control the sensors and motors of the second. Use an electronic motor multiplexer. EDIT: It should be noted that this requires an external power supply, which will increase ...


5

The problem can be restated: 360 / 20 = 18 deg / sec = 1 deg / .056 sec One degree is the smallest increment provided by the rotation sensors. NXT-G has a timer sensor with 1/100th second resolution. In pseudo-code: Set a motorPower variable to 10 Start a timer Loop until rotationDegrees >= 360 If timeElapsed * 18 > rotationSensorDegrees ...


5

As was pointed out, this question is not specific in nature, so it's hard to give a definitive answer. If you haven't already done so, it would probably be helpful head over to Lego.com and grab get the NXT 2.0 User Guide and perhaps begin looking through the sample programs. This book may also be helpful to you: The LEGO MINDSTORMS NXT 2.0 Discovery Book: ...


5

The ultrasonic cannot detect the color of objects. It's just to detect the distance between the sensor and an object in it's line of sight. To find objects in the surrounding area of your robot you have to look all around. This is simply done by rotating your robot or your sensor. When you measure a distance in a certain range (best results between aprox. ...


5

This can usually be achieved on the EV3 with a bootable SD card - you would set that up with a new firmware image and a loader that copies it across to the brick. The leJOS team have ported their codebase to the EV3 - so with a bootable SD card you can indeed load a modified version of the firmware onto your EV3 brick. You can then use their WiFi stack to ...


5

There is a (new?) LEGO brand sound sensor (9845) for $35 on the LEGO store. I don't know if it's suitable for your particular application but sounds plausible. Using the NXT Brick (sold separately), the Sound Sensor allows your LEGO® MINDSTORMS® NXT robot to hear! The Sound Sensor is able to measure noise levels in both dB (decibels) and dBA (frequencies ...


5

To get the actual time of day, you can use the mindsensors.com Realtime Clock Sensor.


5

This is more of a LabView answer than a Mindstorms answer, but you should be able to create a SubVI that represents a task, and then you can place that in the main VI. This help document might be useful: http://zone.ni.com/reference/en-XX/help/372962A-01/lvnxt/creatingusingsubvi/


5

The possible solutions involve realizing that you can multiply the number of possible inputs by implementing long clicks, double clicks, click-and-holds, simultaneous clicks, etc. on the buttons. If I were you, I'd also include a Confirm and maybe a Cancel buttons, but the latter can be substituted by a timeout. You could ease your job if you don't handle ...


5

There are two options that I can think of. Do the "hardware" fix before every run of the robot to reboot the sensor along with the "software" fix to zero it. Don't use the Angle reading at all. To calibrate the sensor, sample the rate (d/s) 10 times or so and take the average to get the "at rest" rate offset and store it in a variable. Subtract this ...


5

My team put their software fix in a loop with a small wait that cycles until the d/s = 0, then reset it to 0. Here's a simplified version: It works like a charm. We don't mess with the hardware reset anymore. Combined with a heading variable, a turn my block, and a few drive my blocks they can program a maze run in minutes. FWIW: They output their angle ...


5

Boost and the other Powered Up components (the new City trains, the app-controlled batmobile, and WeDo 2.0) are controlled via Bluetooth. Any environment that can send bluetooth commands can be used to control these components. There is a github page which documents some of the reverse-engineering that has been done and it links to several third-party Boost/...


5

The EV3 brick runs a linux kernel so it is extremely compatible with many different programming languages. 3rd-party support packages for basically any language you can think of have been made, and most are very mature by this point. A quick google search can come up with some of these. This previous post, among many others on this site, can help point you ...


4

I think the simplest way is to use an NXT Converter Cable (Available from Bricklink). This has an NXT connector on one end and the standard 9v connector on the other. You can connect the 9v connector to any 9v battery box, (e.g. Battery Box with Switch (9V)) and, depending on the polarity, power the NXT motor forward or backward. Now, the issues: The ...


4

Yes, global. 5 variables may be 4 more than required. I think one is enough. Set intSensor = 0 Loop until intSensor > 0 If leftButton then intSensor = 1 If rightButton then intSensor = 2 If enterButton then intSensor = 3 If bumped1 then intSensor = 4 If soundVal > 50 then intSensor = 5 End Loop If intSensor = 1 then ...


4

As far as I remember there is no possibility within NXT-G to programmatically execute another program. Moreover, as I understand it the default firmware simply doesn't have that possibility (the command to start a program is a direct command which must be sent via bluetooth and can't be used in a program). Maybe other programming languages using other ...


4

You can turn parts of your program into custom blocks by selecting them and choosing Tools -> My Block Builder from the menu. See https://www.youtube.com/watch?v=CApCoGQJRcU for a tutorial on this feature.


4

I am working on a project called ev3dev that runs Debian on the EV3. We are not quite to the point that we support "all the Robot EV3 functionalities", but we are getting very close. We are also using a version 3.3.0 Linux kernel, which is more up to date than the other EV3 firmware projects that I know of (which use a 2.6.33 kernel). If you would like to ...


Only top voted, non community-wiki answers of a minimum length are eligible