Quantcast
Channel: Learn with BlocklyProp — Parallax Forums
Viewing all 293 articles
Browse latest View live

List of materials in Spanish?

$
0
0
I'm trying to organize a robotics or microcontroller workshop for our students that speak Spanish better than English. Is there a list of all the materials from Parallax that are in Spanish? I'd like to use the ActivityBot or Shield Bot, but could drop back to What's a Micro.

Even drafts or rough translates would be useful.

Thanks, John

Question to Parallax Regarding the Gyroscope Module

$
0
0
Hello,

I was wondering if Parallax could develop a Learn tutorial on the Gyroscope Module 3-Axis L3G4200D in Propeller C. I am primarily interested in a tutorial in which SPI is used, similar to what was published for the MMA7455 Three-Axis Accelerometer. Others might be interested in seeing a tutorial for the Gyroscope Module with the I2C interface. Would it be possible to put together a tutorial for us?

Respectfully,
David

Parallax Webinars

What wireless combinations do we have now for device / robot / protocol / language

$
0
0
I'd like to add a unit for wireless control to our class that uses our Parallax 'bots (we use all models but Arlo). I'm not sure what to buy.

Does anyone have a list of what combinations work? I've gotten lost on what is available for:
iPads, Chromebooks, Android, iPhones, Win and Mac.
xBee, BlueTooth module and the new Parallax WiFi module.
BoeBot, ActivityBot, ActivityBot WX, ShieldBot and Scribbler3?
SPIN, PropC and Blockly (code examples or tutorials)
I think that is 6*3*5*3 = 270 combos.

n.b. for future forum searchers: info below is mock-up, not truth

First, it would be good to have some basic advice like:
If you have ActivityBots then a good route is to buy part # and download the xxx app for Android phones. Then go through the tutorial at www...
If you have S3s then a good option is ...
If your student devices are iPads then your best option is S3s and the WiFi module part #123, coded by BlocklyProp on the iPads.


Then follow with more details and options like the following, probably laid out in a table on a web page.

ActivityBot WX:
Bluetooth -- Use Parallax part #. These can be controlled by Android or iPhone (but not iPad or Chromebook). Code samples available for SPIN and ASM. Reference www.learn.parallax.com/pagexxx.
WiFi -- Use Parallax part #. These can be controlled by iPad. Code for this combination is available in ASM and SPIN but not C (www.obex...). Reference www.learn.parallax.com/pagexxx. Alternate: xBee modules will also work if you use part #x or #y (not #z) plus the footprint adapter part #a (See www.blah).


Scribbler S3...
S3 best option is the xxx controlled by yyy device. Keep your eyes open for a zzz option expected in 2017.


In the meantime, what is good option of hardware to buy for Android control of ActivityBot WX for students using PropC and BlocklyProp (not SPIN).

Thanks, John

SimpleIDE Terminal won't display test message

$
0
0
I've set up a Propeller DIP40 on a breadboard, along with an ft232rl circuit based on the Prop Plug for communication. I've connected 100nF bypass capacitors on all VCC sources, as well as 10uF caps on the source regulator. There is also an EEPROM for storing the program, along with a 20pF, 5MHz crystal oscillator as an external clock.

Everything seems to be working fine; the Propeller is successfully detected by Propeller Tool and I can upload programs compiled using both it and SimpleIDE. When I upload the downloadable blinking light Spin program using Propeller Tool, the light blinks as expected, so I don't believe there is an issue with the crystal or the Propeller. However, when I attempt to run the SimpleIDE test program which displays "Hello!!!" in the terminal, nothing will display. I've even tried adding a pause of 2 seconds to wait for the terminal display to load, as well as compiling and running other terminal I/O programs, with no success.

So far, I've tried changing the board type to Generic and changing the baud rate, but those don't work either. For some reason the terminal doesn't seem to respond to anything. I'm using Windows 10, if that changes anything.

ultra sound distance undefined

$
0
0
We are trying to get the echo time display in the simple ide terminal - This is what we keep getting for an error.

We are very new to this... hope this is a simple fix!

Thanks to anyone willing to help!


Project Directory: C:/Users/ajansen3/Documents/SimpleIDE/My Projects/

SimpleIDE Version 1.0.2
C:/Users/ajansen3/Documents/SimpleIDE/Learn/Simple Libraries/
C:/Users/ajansen3/Documents/SimpleIDE/ Updated on: 2016-12-16

propeller-elf-gcc.exe -v GCC 4.6.1 (propellergcc_v1_0_0_2408)
propeller-elf-gcc.exe -I . -L . -I C:/Users/ajansen3/Documents/SimpleIDE/Learn/Simple Libraries/Utility/libsimpletools -L C:/Users/ajansen3/Documents/SimpleIDE/Learn/Simple Libraries/Utility/libsimpletools/cmm/ -I C:/Users/ajansen3/Documents/SimpleIDE/Learn/Simple Libraries/TextDevices/libsimpletext -L C:/Users/ajansen3/Documents/SimpleIDE/Learn/Simple Libraries/TextDevices/libsimpletext/cmm/ -I C:/Users/ajansen3/Documents/SimpleIDE/Learn/Simple Libraries/Protocol/libsimplei2c -L C:/Users/ajansen3/Documents/SimpleIDE/Learn/Simple Libraries/Protocol/libsimplei2c/cmm/ -I C:/Users/ajansen3/Documents/SimpleIDE/Learn/Simple Libraries/Sensor/libping -L C:/Users/ajansen3/Documents/SimpleIDE/Learn/Simple Libraries/Sensor/libping/cmm/ -o cmm/echo.elf -Os -mcmm -m32bit-doubles -fno-exceptions -std=c99 echo.c -lm -lsimpletools -lsimpletext -lsimplei2c -lping -lm -lsimpletools -lsimpletext -lsimplei2c -lm -lsimpletools -lsimpletext -lm -lsimpletools -lm
echo.c: In function 'main':
echo.c:8:5: error: 'distance' undeclared (first use in this function)
echo.c:8:5: note: each undeclared identifier is reported only once for each function it appears in
Done. Build Failed!

Propeller C double pulses

$
0
0
Hi everyone,
I am trying to use the propeller to generate two very short pulses using C language for research purposes. I want to control each pulse timing and the time between them. The time has to be in nanoseconds (i.e. 100 ns).
Using pulse_out I was able to get a pulse width of 12.5 ns which is very good. The problem is with the 2nd pulse. writing two pulse_out commands won't do the job. I can control the timing of the first and 2nd pulses, but I am not able to control the time in between the two. Writing:
set_io_dt(1);
pulse_out(0,1);
pulse_out(0,1);

would give me two pulses of 12.5 ns with a huge 100 us in between.
is there another way to implement this? I can do this in PASM, but I want to use C language.

Thanks

Please help with optimizing function and identifying strange issue

$
0
0
Hi guys,
First post :) I'm currently enrolled in a Intro. Robotics class as part of my degree program and this was last week's homework assignment. I've already submitted it to make sure I'd be in the clear, and it does everything that my teacher wanted it to do, but I'm not happy with how un-optimized that the blink function works. This is an entry level class with no coding experience required, but I do have some C/C++ and robotics experience from CS/Elec. Engi classes I've worked on in the past.
http://pastebin.com/EecQhT3V

So basically, LED 27 is supposed to continuously blink while the servo rotates to it's 90 degree position, and then stop blinking when the servo blinks. The way that it should work in my mind is much different than the way that I was able to get it working. I THINK there should be a way to tell it to blink while that servo is in motion to the 90 degree position, rather than how I did it, which was trial and error with delay values and high/lows till I was able to match it almost perfectly. The problem with the way I did it is a few things, the function is long, for just a blinking light for less than a second. Then, if the servo was ramped down or up, the blinking wouldn't match up. It's just bugging me that I'm sure it could've been written better. The assignment has already been submitted and I'm sure since it does what it was supposed to do, I'll get full credit...but I'm not one for "good enough".

edit:Forgot the strange issue, on that servo to 0 degrees on line 8, I was trying to get a 1 second pause right after it hit 0 degrees, well even when I add a pause(1000); on line 9, it would immediately proceed to the next servo movement with no pause. The workaround that I was able to get working was adding a second pause(1000); right underneath the first. That does in fact pause for the 1 second that I was going for but only if there's a second pause command. The only thing I could think of was maybe the first pause was being used up during line 8's rotation?

Routines

$
0
0
I thought it would go unnoticed, and tried to gloss over it, but there's always one student....

In the boe-bot book we used subroutines. I understand those.

Now we are modifying the sumobot book for the boe-bot. In this book, it has what seems like subroutines, but they are never defined as such, and they aren't called with GOSUB but GOTO. Also, they don't end in RETURN. Are these main routines? And why would there be more than one main routine? Why would you use this rather than subroutines?

Please help me answer my student.

Thanks,
Diane

Robot Magazine is Gone

$
0
0
I spoke with Jeffery Warner this morning (editor-in-chief) and learned that Maplegate Media has closed its doors and is out of business.
There were some rumors out there a couple of days ago but this is from the horse's mouth. Too bad, I will miss them both for the RC magazines
and for Robot. I enjoyed writing for them. Good news came later as Servo Magazine accepted my next article! Whoopee! I still get to write.

Unable to build C wifi examples

$
0
0
I'm using the SIP wi-fi module with the Propeller Professional Dev Board. I've just installed SimpleIDE 1.1.0.

When I try to build one of the example programs like "Leave a Network", I'm getting build errors. Here is a screen shot of the Build Status Window:

Does anyone have an idea what I'm doing wrong?

Thanks

ActivityBot -- SIRC control + whiskers

$
0
0
There are sometimes questions about how to combine different lessons in the C-Learning Tutorials. The program below combines ActivityBot using the Sony IR remote control with Navigating by touch.

The hardware setup is the same as in the 2 tutorials. My wiring using the overlay board is here:
http://forums.parallax.com/discussion/comment/1337873/#Comment_1337873

There are 2 potentially tricky changes.
1. Since there is up to 1 second delay if no remote control button is pushed, and we want the response to hitting an object to be immediate, I run the whisker function in its own cog.

.
2. The SIRC command codes are based on my remote control (Sony RMT-DSLR1). If you are using a different remote, use the program in the SIRC tutorial
http://learn.parallax.com/propeller-c-simple-devices/ir-receiver-and-remote
to determine the codes your remote uses for the keys you want to use for each command. Then change the number in the remote control aliases define statements.

Note: that I've added a new version a few posts down that changes the codes to those used in a standard Sony TV remote.

Here's the code:

/*
SIRC Remote control new a.c  for overlay board

This worked - There is no delay between whisker touching and bot stopping.
Before using separate cog for whiskers, there was a noticible delay, and whisker fully
compressed before bot would stop.
This version stops, backs up, turns 90 deg from obstacle and stops.
Must press remote key to restart motion.  Consider changes to allow continuing motion wo
need to press remote key.

Use multiple cogs - new cog to handle whiskers

Connect 38 kHz IR receiver to Propeller P10
Decodes button presses on Sony-compatible IR remote
Commands Activitybot to move straight, pivot 45 deg, move in a curve,
increase or decrease speed and curve radius, and stop.
Also has whisker code for obstacle avoidance.
This has ramping to speed.  Increment = 4 ticks per 1/50 sec (4/0.020 sec).
To get from 0 to 100 takes 25 increments = 0.5 sec
Future: add code for autonomous movement selectable from remote,

Load EEProm and Run
*/

#include "simpletools.h"                      // Libraries included
#include "sirc.h"
#include "abdrive.h"                          // abdrive library

// ***** Remote control aliases -- uses Sony camera remote RMT-DSLR1 *****

#define fwd 58       //  up arrow  -- forward
#define stp 57       //  center -- stop
#define rvs 59       //  down arrow -- reverse
#define pl 62        //  left arrow -- pivot left
#define pr 63        //  right arrow -- pivot right
#define cvl 56       //  menu -- curve left
#define cvr 61       //  trash can -- curve right
#define ispd 74      //  plus rocker -- increase speed
#define dspd 75      //  minus rocker -- decrease speed

// ***** Pin Defines *****
#define spkrpin 3       // speaker pin for overlay board
#define SIRCpin 10      // SIRC input pin
#define Rwpin 8         // Right whisker pin
#define Lwpin 7         // Left whisker pin

int *cogwhisker;      // pointers to cog IDs

void whisker();       // monitors whiskers, if hit: stops, backs away, turns away, runs in separate cog

volatile int bumpflg;
int Lspd, Rspd = 0;   // Left and Right command wheel speeds

int main()                // **** main function ****
{
int spd = 50;           //  initial speed once fwd command given
int dflg = 0;         // flag: -1=fwd or rev, 0=stopped, 1=curve left, 2=curve right, 3=pivot L or R
drive_speed(0, 0);
sirc_setTimeout(1000);                  // -1 if no remote code in 1 sec
bumpflg = 0;                            // Gives control to remote
cogwhisker = cog_run(whisker, 100);     // start monitoring whiskers
freqout(spkrpin,1000, 3000);            // Speaker tone: 1 s, 3 kHz

while(1)                                // Repeat indefinitely
{

int button = sirc_button(SIRCpin);    //  get code from SIRC remote


switch(button)                        //  decode signal from SIRC and calc drive command
{
case stp :      //  Center button - Q
Lspd = 0;     //  stop
Rspd = 0;
dflg = 0;
break;

case fwd :        //  Top Arrow - M
Lspd = spd;     //  forward
Rspd = spd;
dflg = -1;
break;

case rvs :        //  Down Arrow
Lspd = -spd;    //  reverse
Rspd = -spd;
dflg = -1;
break;

case pr :          //    Right Arrow - N
Lspd = 13;
Rspd = -13;     //  Pivot Right 45 deg & stop
dflg = 3;
break;

case pl :         //  Left Arrow - P
Lspd = -13;
Rspd = 13;      //  Pivot Left 45 deg & stop
dflg = 3;
break;

case cvr :              //  Curve Right - L
if (spd < 25) spd=25;
Lspd = spd;
Rspd = spd-20;
dflg = 2;
break;

case cvl :               //  Curve Left  - K
if (spd < 25) spd=25;
Lspd = spd-20;
Rspd = spd;
dflg = 1;
break;

case ispd :              //  Up-Rocker - H -- Increase speed
if (dflg == 1)          // curving left - increase spd and move in curve at new spd
{
spd=spd+5;
if (spd > 100) spd = 100;
Lspd = spd-20;
Rspd = spd;
}
else if (dflg == 2)     // curving right - increase spd and move in curve at new spd
{
spd=spd+5;
if (spd > 100) spd = 100;
Lspd = spd;
Rspd = spd-20;
}
else if (dflg == -1)      // straight ahead - increase spd and move at new spd
{
spd=spd+5;
if (spd > 100) spd = 100;
Lspd = spd;
Rspd = spd;
}
else
{
spd=spd+5;
if (spd > 100) spd = 100;
}
break;                // Finish Up-Rocker

case dspd :          //  Down-Rocker -- decrease spd
if (dflg == 1)      // curving left - decrease spd and move at new spd
{
spd=spd-5;
if (spd < 25) spd = 25;
Lspd = spd-20;
Rspd = spd;
}
else if (dflg == 2)      // curving right - decrease spd and move at new spd
{
spd=spd-5;
if (spd < 25) spd = 25;
Lspd = spd;
Rspd = spd-20;
}
else if (dflg == -1)      // straight ahead - decrease spd and move at new spd
{
spd=spd-5;
if (spd < 0) spd = 0;
Lspd = spd;
Rspd = spd;
}
else                       //  stopped
{
spd=spd-5;
if (spd < 0) spd = 0;
}
break;                   // Finish Down-Rocker
default :
break;
}       // end switch

if(dflg == 3)           // execute pivot
{
if( ! bumpflg) drive_ramp(0,0);         // stop for pivot, whiskers not controlling movement
if( ! bumpflg)                          // whiskers not controlling movement
{
drive_ramp(Lspd, Rspd);     // now pivot 45 deg
pause(1000);
Lspd = 0;                   // and stop, executed with other drive cmds below
Rspd = 0;
dflg = 0;
}
}
if( ! bumpflg) drive_ramp(Lspd, Rspd);  // execute drive comnd, whiskers not cntrling movement
}     // end while
}       // end main


void whisker()       // If whisker pressed, stop & move away from obstacle:
// 1. disable SIRC control, 2. stop bot, 3. back up, 4. turn away from obstacle,
// 5. stop, 6. restore SIRC control
{
while(1)
{
// If whisker pressed, avoid obstacle.
// First just right whisker - input(8) is 0 if whisker is pressed

if(! input(Rwpin))
{
bumpflg = 1;                               // Set flag so main will not give conflicting drive commands
drive_speed(0,0);
drive_ramp(-60, -60);                  // Back up 0.5 seconds
pause(500);
drive_ramp(0,0);
drive_speed(-26, 26);                   // Turn left 1 seconds -- 90 deg
pause(1000);
drive_ramp(0, 0);                             //  stop
}

// Just left whisker - input(7)

else if(! input(Lwpin))
{
bumpflg = 1;
drive_speed(0,0);
drive_ramp(-60, -60);                  // Back up 0.5 seconds
pause(500);
drive_ramp(0,0);
drive_speed(26, -26);                   // Turn right 1 seconds -- 90 deg
pause(1000);
drive_ramp(0,0);                         // stop
}
bumpflg = 0;                                //  clear flag, allow main to have control
}
}



I hope you enjoy it.

Tom

Upskilling Programming

$
0
0
Programming, in general, seems to be one of the weakest skill among undergrads across all disciplines. I'm not sure if this is also true in other countries like what I am currently experiencing. Are there any activities (e.g. on-the-job training, external training institutes etc.) implemented in other uni or organizations that help fresh grads to acquire programming skills? If so, could you share your experiences?

Thanks

WIZ820io

$
0
0
Hello everyone. I am trying to use WIZ820io chip to convert RS-232 based data to the TCP/IP based data. Data is send from the parallax chip to the WIZ chip. The problem is i am not sure how to get the port number and IP address of the WIZ chip. As well as not sure if this chip is programmable or is it have the required program already installed. Does anyone have any tips how to start using it?? Thanks for any help

Mindaugas

from spin to C , how to translate this address ?

$
0
0
I'm trying to convert the code for the OLED 128 from spin to C.

the function Fxn takes only 3 parameters:
- nb of arg
- command
- first adress of argument

With that it can be called with higher function with several parameter. see code below with function Drawcircle

How can it be translated correctly to C ?
this line cause me some problem :
SendData(long[ArgAddress][index++])

pri Fxn(argCount,Command,ArgAddress)|index
   SendData(Command)
   index := 0
   repeat argCount
        SendData(long[ArgAddress][index++])                  ''Main Function to communicate with various methods 
    result := ser.CharIn                                    ''associated with the uOLED display


pub DrawCircle(X,Y,R,Co)                             
{{
Description:
draws a circle with center at X,Y with radius R using the specified color
}}
_Ack := Fxn(4,Cmd_gfx_Circle,@X)

pri SendData(Data)                                      ''Send Word variable to the uOLED display 
   ser.char(Data.byte[1])                                           
   ser.char(Data.byte[0])


SimpleIDE "Project Libraries" question

$
0
0
I have a question about how SimpleIDE deals with "project libraries". I'm thrilled to see that new version of the Simple-Libraries source code have SimpleIDE project files (.side files) for every library, because I can now provide compiled versions of these libraries with PropWare with a higher level of confidence that they are compatible with the versions provided by SimpleIDE. I get this confidence by parsing the SimpleIDE project files in PropWare's build system and using that to build the libraries, rather than searching for all .c files and then adding a bunch of exceptions and extra rules to try and find the correct files (and now I can use the compilation flags provided by the .side files! even better).

But I ran into a snag: most, if not all, of the project files list a source file with a main function in it. When I open one of these project files in SimpleIDE and click the "Build" button, SimpleIDE is smart enough to ignore that file with the main definition. How does it know to do that? Does it always exclude the first line in the project file? That seems a bit unlikely to me because that would mean SimpleIDE is incapable of having a library-only project, which I didn't think was the case. Is SimpleIDE opening every file and looking for a definition of main, and then excluding any file(s) that have such a definition?

Here's one such project file
libcolormath.c
colormath.h
compareRRGGBB.c
get8bitColor.c
getColorRRGGBB.c
remapColor.c
>compiler=C
>memtype=cmm main ram compact
>optimize=-Os
>-m32bit-doubles
>-fno-exceptions
>defs::-std=c99
>-lm
>-create_library
>BOARD::ACTIVITYBOARD

And here's the output when clicking the "Build" button:
Project Directory: /......./PropellerProjects/PropWare/Simple-Libraries/Learn/Simple Libraries/Utility/libcolormath/

SimpleIDE Version 1.1.0
/home/david/Documents/SimpleIDE/Learn/Simple Libraries/
/home/david/Documents/SimpleIDE/ Updated on: 2017-02-20

propeller-elf-gcc -v GCC 4.6.1 (propellergcc-alpha_v1_9_0_)
propeller-elf-gcc -I . -L . -Os -mcmm -m32bit-doubles -fno-exceptions -std=c99 -c compareRRGGBB.c -o cmm/compareRRGGBB.o
propeller-elf-gcc -I . -L . -Os -mcmm -m32bit-doubles -fno-exceptions -std=c99 -c get8bitColor.c -o cmm/get8bitColor.o
propeller-elf-gcc -I . -L . -Os -mcmm -m32bit-doubles -fno-exceptions -std=c99 -c getColorRRGGBB.c -o cmm/getColorRRGGBB.o
propeller-elf-gcc -I . -L . -Os -mcmm -m32bit-doubles -fno-exceptions -std=c99 -c remapColor.c -o cmm/remapColor.o
propeller-elf-ar rs cmm/libcolormath.a cmm/compareRRGGBB.o cmm/get8bitColor.o cmm/getColorRRGGBB.o cmm/remapColor.o
/opt/parallax/bin/propeller-elf-ar: creating cmm/libcolormath.a
propeller-elf-gcc -I . -L . -o libcolormath.elf -Os -mcmm -m32bit-doubles -fno-exceptions -std=c99 libcolormath.c cmm/libcolormath.a -lm
propeller-load -s libcolormath.elf
propeller-elf-objdump -h libcolormath.elf
Done. Build Succeeded!

Notice that libcolormath.o is magically excluded from the invocation of propeller-elf-ar

BlocklyProp - where to ask questions? Is anyone using it?

Mixed mode programming tutorial

$
0
0
Hello,

My question is, do we have a good tutorial on mixed-mode programming, where one can run an LMM program and use some small and quick COGC modules for time critical parts?

could we optimize abdrive.h

$
0
0
Why abdrive.c include some header for string and text ?
#include "simpletools.h"
#include "simpletext.h"
#include <string.h>

could those be safely removed ?

Blockly - ActivityBot with whiskers and SIRC TV remote

$
0
0
Since Blockly was announced, one thing I wanted to do was to compare it for writing a more complex program using C and SampleIDE. I decided to rewrite my C program for controlling the ActivityBot using a SIRC TV remote and whiskers for reacting to obstacles.

My SimpelIDE C program is here: forums.parallax.com/discussion/comment/1399840/#Comment_1399840

There were a few changes between the 2 versions, some due to some Prop C features not being included in Blockly and some to change the Bot user interface.

Blockly doesn’t have Switch/case (requiring a long sequence of “else-if”s), and it doesn’t have the Propeller.h features including “waitpne” that I use as part of the whisker detection function.

The change I made was to eliminate using the TV remotes volume +/- for changing the Bot’s speed, instead just using the numeric keypad. (the 2 key for increasing speed, 8 for decreasing).

All the changes were easy to make and the program was quickly developed using my procedure notes for the program that I had written when originally writing the C program (with new changes for the different remote commands for speed change.)

The Blockly code is shown in the attachments. Main() and the whisker detection function in “blockly-abot-tv-main-whisker.pdf” and the function to calculate the adbot drive_speed values in 2 files “blocky-abot-tv-calcmove2a.pdf” and “blocky-abot-tv-calcmove2b.pdf”.

The Blockly project itself is located at: http://blockly.parallax.com/blockly/editor/blocklyc.jsp?project=3931

You do have to login.

Having the Blockly editor/compiler on line was nice since I could access it from any of my computers.

Building the large Blockly program took some effort managing all the blocks. Because of the large number of similar blocks that I used, I had a lot of duplicated blocks and groups of blocks scattered over the worksheet, which required some care to make sure that I deleted all the unused ones.

Since the calcmove function was so long, and one of the conditional blocks in “whisker” was so wide, it took some effort to position the different sections so they didn’t interfere with each other.

The only problem I had was in figuring out how to use the “if-do” block to add “else-if”. The interactive “help” did say that the else or else-if conditionals can be added, but it took some searching in the “community” projects to find one that showed how to do it. A sentence should be added to the reference for if-do that explains that the else-if is added to the if-do image in the small box that opens when clicking on the “gear”.

Another issue is printing the blocks in a large program. Downloading the blocks file results in an SVG file. The file opens in a web browser, but doesn’t fully print out, which is why it took 2 files to hold the calcmove function listing.

I’m not sure if Blockly is intended for making large programs, but it does work.
Viewing all 293 articles
Browse latest View live