[Microbit-Python] mu vs microbit.co.uk/create-code API differences

Nicholas H.Tollervey ntoll at ntoll.org
Wed Oct 19 09:18:35 EDT 2016


Carlos,

You beat me to it!

http://python.microbit.org/editor.html has the latest version.

Also, the source code for the editor is open source and can be found here:

https://github.com/bbcmicrobit/PythonEditor

Hope this helps,

N.

On 19/10/16 14:16, Carlos Pereira Atencio wrote:
> Now that the foundation has been announced, the http://microbit.org
> website (note the change from .co.uk <http://co.uk> to .org) should
> contain the newest version of the online editor . So if you go to
> http://python.microbit.org/editor.html it should contain the latest
> micropython.
> 
> On 19 October 2016 at 13:17, Joakim Pettersson <joakimbits at gmail.com
> <mailto:joakimbits at gmail.com>> wrote:
> 
>     Aha, that's why - thanks for the explanation!
>     Agree one should not eval, but this demo is about daring using the
>     parser-interpreter so it's ok!
>     Note the exec in globals() later on;).
>     /joakim
> 
>     ------ Originalmeddelande ------
>     Från: "Radomir Dopieralski" <radomir at dopieralski.pl
>     <mailto:radomir at dopieralski.pl>>
>     Till: microbit at python.org <mailto:microbit at python.org>
>     Kopia: "Joakim Pettersson" <joakimbits at gmail.com
>     <mailto:joakimbits at gmail.com>>
>     Skickat: 2016-10-19 14:11:13
>     Ämne: Re: [Microbit-Python] mu vs microbit.co.uk/create-code
>     <http://microbit.co.uk/create-code> API differences
> 
> 
>         Hi,
> 
>         the version of MicroPython at the microbit website is outdated,
>         because it
>         takes BBC a very long time to upgrade it. The Mu editor comes
>         with the latest
>         release, because it's in control of the developers.
> 
>         One note about your code. You *really* don't want to use eval().
>         I would use
>         the getattr() function in its place, like this:
> 
>         a_image, b_image = getattr(Image, name) for name in (a_name, b_name)
> 
> 
>         On Wed, 19 Oct 2016 12:00:42 +0000
>         "Joakim Pettersson" <joakimbits at gmail.com
>         <mailto:joakimbits at gmail.com>> wrote:
> 
>              Hi,
> 
>              I stumped into problems with the online editor.
>              Which documentation should I read to figure out the API?
>              Why is that micropython implementation different from the
>             one used by
>              the mu editor?
> 
>              Here is code that works in the mu editor but fails when
>             dowloading
>              from https://www.microbit.co.uk/app/#
>             <https://www.microbit.co.uk/app/#> (probably on the third
>             line but
>              how do I tell?). The code was running a swarm of 8
>             micro:bit at a
>              student-industry event this Monday. I used it also to pitch
>             micro:bit
>              to the Swedish prime minister when he received one there:).
> 
>              Thanks/Joakim
> 
>              # A micro:bit virus-infectable Firefly.
>              # mailto:Joakim.Pettersson at join.se
>             <mailto:Joakim.Pettersson at join.se>
> 
>              from radio import send, receive, on
>              import random
>              from microbit import display, Image, button_a, button_b, sleep
> 
>              flock_size = 3  # Number of fireflies required for flock
>             behaviour
>              me = 2  # My lucky number
>              a_name, b_name = {
>                   0: ('HEART', 'ALL_ARROWS'),
>                   1: ('HAPPY', 'ALL_CLOCKS'),
>                   2: ('SURPRISED', 'CONFUSED'),
>                   3: ('SNAKE', 'PACMAN'),
>                   4: ('BUTTERFLY', 'COW'),
>                   5: ('FABULOUS', 'SAD'),
>                   6: ('SILLY', 'SMILE')}[me]
>              a_image, b_image = (eval('Image.' + name) for name in (a_name,
>              b_name))
> 
> 
>              # A show function that does not wait
>              def show(x): display.show(x, delay=100, wait=False)
>              show(a_image)
> 
>              # Create the "flash" animation frames. Can you work out how
>             it's done?
>              flash_animation = [Image().invert()*(i/9) for i in range(9,
>             -1, -1)]
> 
>              # Timing is controlled with these global variables
>              time = 0  # Current time
>              flash_time = -1  # Time to flash LEDs
>              reflash_time = -1  # Time to flash others
> 
> 
>              # Define the "flash" function.
>              def flash():
>                   "Display the firefly flash animation after a random
>             short pause"
>                   global time, flash_time, reflash_time
>                   flash_time = time + random.randint(50, 350)
>                   if random.randint(0, flock_size) == 0:
>                       reflash_time = flash_time + 500
> 
> 
>              # The step function decides what to do next
>              def step():
>                   global time, flash_time, reflash_time
>                   # Button A and B changes image.
>                   if button_a.was_pressed():
>                       send('show(Image.%s)' % a_name)
>                       show(a_image)
>                       reflash_time = time  # Reflash now!
>                   if button_b.was_pressed():
>                       send('show(Image.%s)' % b_name)
>                       show(b_image)
>                       reflash_time = time  # Reflash now!
>                   # Read any incoming messages.
>                   try:
>                       incoming_message = receive()
>                   except ValueError:
>                       pass
>                   if incoming_message:
>                       print(incoming_message)
>                       if incoming_message[:3] != 'On ':
>                           try:
>                               exec(incoming_message, globals(), globals())
>                           except Exception as e:
>                               send("On %d: %s" % (me, e))
>                   if time == flash_time:
>                       show(flash_animation)
>                   if time == reflash_time:
>                       send('flash()')  # a-ha
>                   sleep(1)  # Pause 1 ms
>                   time = time + 1  # Now it's time for next step
> 
>              # The radio won't work unless it's switched on.
>              on()
> 
>              # Infinite loop
>              while True:
>                   try:
>                       step()
>                   except Exception as e:
>                       print(e)
> 
>              # For the virus author:
>              # Send <20 character strings containing new code ;-)!
> 
> 
> 
> 
> 
> 
> 
> 
> 
>         --
>         Radomir Dopieralski
> 
> 
>     _______________________________________________
>     Microbit mailing list
>     Microbit at python.org <mailto:Microbit at python.org>
>     https://mail.python.org/mailman/listinfo/microbit
>     <https://mail.python.org/mailman/listinfo/microbit>
> 
> 
> 
> 
> _______________________________________________
> Microbit mailing list
> Microbit at python.org
> https://mail.python.org/mailman/listinfo/microbit
> 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 473 bytes
Desc: OpenPGP digital signature
URL: <http://mail.python.org/pipermail/microbit/attachments/20161019/452b643e/attachment-0001.sig>


More information about the Microbit mailing list