[Microbit-Python] error code?... :(020

Alan alainjackson at hotmail.com
Mon Sep 28 01:43:13 CEST 2015


I was about to try and create button events by polling and inserting events into a micropython event queue, but that seems a bit silly if that's what the underlying DAL is doing. The events I was planning to create were the same ones as the DAL already has. 

As a half-way measure I like the button.was_clicked() method you suggested.

I do like callbacks though. 

Whenever I try and write polling stuff it just gets messy and scrappy quite quickly. Maybe I just need more practice :)

-Alan

> Date: Fri, 25 Sep 2015 14:50:22 +0100
> From: damien.p.george at gmail.com
> To: microbit at python.org
> Subject: Re: [Microbit-Python] error code?... :(020
> 
> Regarding the event queue.  This is something that's implemented in
> the underlying DAL, it's nothing to do with MicroPython.
> 
> There is a message bus and events can be posted to the message bus,
> with a timestamp.  You can attach arbitrary C/C++ functions to be
> called when an event is posted.
> 
> For example, with the buttons, when the button state changes then
> events are generated.  The buttons have software debouncing and also
> timing to see how long they have been pressed.  The events are:
> - button high transition
> - button low transition
> - button click
> - button long press
> - button held
> 
> Events will remain on the queue until the handler is run.  Since the
> threading scheme of the DAL is cooperative your code must yield for
> the events to be processed.  This is likely to change very soon so
> that events handlers are executed preemptively (on an interrupt).
> 
> Currently in the MicroPython bindings to the DAL we don't use these
> events.  We simply return the current state of the button (high or
> low) as read on the button GPIO.
> 
> But probably it's a good idea to use these events so that you can
> react to a "click" without sitting in a tight polling loop.
> 
> The difficult thing will be to make a clean API that doesn't require
> the user to know/understand events or preemption, and doesn't require
> them to yield or make sure the queue doesn't overflow.
> 
> We could try something like:
> 
> button.is_held() # simply get the state of the GPIO as it currently does
> button.was_clicked() # return true if the button was clicked since the
> last call to this function; resets the state to false
> button.was_long_clicked() # same as above, but for long click
> 
> We anyway need a similar set of concepts for gestures (eg
> gesture.did_fall(), gesture.was_shaken()).
> 
> Thoughts?
> 
> 
> On Fri, Sep 25, 2015 at 2:09 AM, Alan <alainjackson at hotmail.com> wrote:
> >
> > I've just been writing myself an event queue for button pushes etc... maybe
> > that's not necessary if there already is one, if it's accessible.
> >
> > Cheers,
> >
> > Alan
> > ________________________________
> > To: microbit at python.org
> > From: larry at hastings.org
> > Date: Thu, 24 Sep 2015 14:17:17 +0100
> > Subject: Re: [Microbit-Python] error code?... :(020
> >
> >
> >
> > I wish to understand this more.  Micropython has an internal,
> > hidden-from-view, event queue?  How do I examine and interact with it?
> >
> > I thought button_a.is_pressed() was polling; is it watching for button
> > events on this event queue?  Does that imply that I can get delayed /
> > buffered button presses?
> >
> > In general how do I keep the event queue from filling?
> >
> >
> > /arry
> >
> > On 09/23/2015 01:54 PM, Damien George wrote:
> >
> > Hi Alan,
> >
> > Error code 020 is "out of memory".
> >
> > The problem is as you guessed: there is an event put on the event
> > queue each time the button is pressed.  To clear this queue your code
> > needs to "yield".  You can do this by putting sleep(1) in your loop.
> >
> > This is totally unexpected behaviour and I'll work out how to fix it
> > (Ie your code should just work).
> >
> > Cheers,
> > Damien.
> >
> >
> >
> > On Wed, Sep 23, 2015 at 4:02 AM, Alan <alainjackson at hotmail.com> wrote:
> >
> > Error code update.
> >
> > I'm consistently getting the ":( 020" code after 42 button presses (of any
> > combination of buttons A and B).
> >
> > Is there a button click buffer that's overflowing somewhere? If there is I
> > can't see a method on the microbit API to clear it.
> >
> > Cheers,
> >
> > Alan
> >
> > ________________________________
> > From: alainjackson at hotmail.com
> > To: microbit at python.org
> > Date: Wed, 23 Sep 2015 00:28:51 +0000
> > Subject: [Microbit-Python] error code?... :(020
> >
> >
> > Hi,
> >
> > I wrote a small program to draw on the LED matrix, but after setting a few
> > LEDs on I get what looks like an error message on the LEDs:
> >
> > ":(020"
> >
> > (Frowny-face zero two zero)
> >
> > It just keeps repeating that and my program stops but there's no stack trace
> > on the python repl.
> >
> > Is that a built in hardware error code or something? Has anyone else seen
> > that?
> >
> > Here's my program:
> >
> > ====8<====
> >
> > from microbit import *
> >
> > index = 0
> >
> > while True:
> >     if button_a.is_pressed():
> >         x = index % 5
> >         y = int(index / 5)
> >         display.image.set_pixel_value(x,y,
> > not(display.image.get_pixel_value(x,y)))
> >
> >     if button_b.is_pressed():
> >         index = (index + 1) % 25
> >
> > _______________________________________________ Microbit mailing list
> > Microbit at python.org https://mail.python.org/mailman/listinfo/microbit
> >
> > _______________________________________________
> > Microbit mailing list
> > Microbit at python.org
> > https://mail.python.org/mailman/listinfo/microbit
> >
> > _______________________________________________
> > Microbit mailing list
> > Microbit at python.org
> > https://mail.python.org/mailman/listinfo/microbit
> >
> >
> >
> > _______________________________________________ Microbit mailing list
> > Microbit at python.org https://mail.python.org/mailman/listinfo/microbit
> >
> > _______________________________________________
> > Microbit mailing list
> > Microbit at python.org
> > https://mail.python.org/mailman/listinfo/microbit
> >
> _______________________________________________
> Microbit mailing list
> Microbit at python.org
> https://mail.python.org/mailman/listinfo/microbit
 		 	   		  
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.python.org/mailman/private/microbit/attachments/20150927/48894450/attachment.html>


More information about the Microbit mailing list