Shop OBEX P1 Docs P2 Docs Learn Events
Programing???? — Parallax Forums

Programing????

ArchiverArchiver Posts: 46,084
edited 2001-03-23 02:47 in General Discussion
I have a project that will require the BS2 to be able
to tell when the state of a pin
(set up as an Input) has changed from High to Low (Do
Some thing) and from
Low to High (Do Some Thing).

What I would like to do is have anywhere from 4 to 8
inputs to monitor doors in
a remote building I have. If possible, what I would
like to do is monitor the door
with an input and when the door is opened the input to
(lets say) pin0 goes from
High to low, and at this time I want to have the BS2 do
something and only do it once.
And if the door is left open I don't want anything to
happen until the door closes and there will be
a change of pin0 from low to high then I want some
thing to happen and again only do it once
When the door is either left closed or open I don't
want the BS2 to do anything. Again the
only time I want it to do anything is when there is a
transaction between (High to
Low) and (Low to High).

Sorry if I repeated myself to many times...
I have sat and thought about this for many hours and
can't come up with a simply solution,
not even sure this is possible with the BS2....


Thank you,
In Advance
Gene

Comments

  • ArchiverArchiver Posts: 46,084
    edited 2001-03-01 02:06
    Do you need do different things depending of the door, or the "do some
    thing" will be the same for any door?
    ACJacques

    Gene Shults wrote:
    >
    > I have a project that will require the BS2 to be able
    > to tell when the state of a pin
    > (set up as an Input) has changed from High to Low (Do
    > Some thing) and from
    > Low to High (Do Some Thing).
    >
    > What I would like to do is have anywhere from 4 to 8
    > inputs to monitor doors in
    > a remote building I have. If possible, what I would
    > like to do is monitor the door
    > with an input and when the door is opened the input to
    > (lets say) pin0 goes from
    > High to low, and at this time I want to have the BS2 do
    > something and only do it once.
    > And if the door is left open I don't want anything to
    > happen until the door closes and there will be
    > a change of pin0 from low to high then I want some
    > thing to happen and again only do it once
    > When the door is either left closed or open I don't
    > want the BS2 to do anything. Again the
    > only time I want it to do anything is when there is a
    > transaction between (High to
    > Low) and (Low to High).
    >
    > Sorry if I repeated myself to many times...
    > I have sat and thought about this for many hours and
    > can't come up with a simply solution,
    > not even sure this is possible with the BS2....
    >
    > Thank you,
    > In Advance
    > Gene
    >
    >
    >
    > Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/
  • ArchiverArchiver Posts: 46,084
    edited 2001-03-01 02:13
    The (Do Something) will probably be different for
    different inputs.
    Some may be the same.


    Original Message
    From: "AC Jacques" <acjacques@i...>
    To: <basicstamps@yahoogroups.com>
    Sent: Wednesday, February 28, 2001 8:06 PM
    Subject: Re: [noparse][[/noparse]basicstamps] Programing????


    > Do you need do different things depending of the
    door, or the "do some
    > thing" will be the same for any door?
    > ACJacques
    >
    > Gene Shults wrote:
    > >
    > > I have a project that will require the BS2 to be
    able
    > > to tell when the state of a pin
    > > (set up as an Input) has changed from High to Low
    (Do
    > > Some thing) and from
    > > Low to High (Do Some Thing).
    > >
    > > What I would like to do is have anywhere from 4 to
    8
    > > inputs to monitor doors in
    > > a remote building I have. If possible, what I would
    > > like to do is monitor the door
    > > with an input and when the door is opened the input
    to
    > > (lets say) pin0 goes from
    > > High to low, and at this time I want to have the
    BS2 do
    > > something and only do it once.
    > > And if the door is left open I don't want anything
    to
    > > happen until the door closes and there will be
    > > a change of pin0 from low to high then I want some
    > > thing to happen and again only do it once
    > > When the door is either left closed or open I don't
    > > want the BS2 to do anything. Again the
    > > only time I want it to do anything is when there is
    a
    > > transaction between (High to
    > > Low) and (Low to High).
    > >
    > > Sorry if I repeated myself to many times...
    > > I have sat and thought about this for many hours
    and
    > > can't come up with a simply solution,
    > > not even sure this is possible with the BS2....
    > >
    > > Thank you,
    > > In Advance
    > > Gene
    > >
    > >
    > >
    > > Your use of Yahoo! Groups is subject to
    http://docs.yahoo.com/info/terms/
    >
    >
    >
    > Your use of Yahoo! Groups is subject to
    http://docs.yahoo.com/info/terms/
    >
    >
  • ArchiverArchiver Posts: 46,084
    edited 2001-03-01 02:51
    >I have a project that will require the BS2 to be able
    >to tell when the state of a pin
    >(set up as an Input) has changed from High to Low (Do
    >Some thing) and from
    >Low to High (Do Some Thing).
    >
    >What I would like to do is have anywhere from 4 to 8
    >inputs to monitor doors in

    Transistions can be detected by using XOR logic between the old state
    of the pin and the new state. Here's a snippet:

    ' door inputs to P0 to P8
    x0 var byte ' old state of doors
    x1 var byte ' new state of doors
    xx var byte ' transition state of doors
    xy var byte ' transitiion state 0->1
    ix var nib ' counter to scan through doors

    x0=inL ' read states at start

    waiting:
    x1=inL ' read new state
    xx=x1 ^ x0 ' see if there are any transitions
    x0=x1 ' update old state
    branch xx,[noparse][[/noparse]waitng] ' waiting until something happens

    ' come here when something happens
    xy = xx & x1 ' distinguish 0->1 xitions from 1->0
    for ix=0 to 7 ' now see which doors did it
    branch ix+1*xx.bit0(ix),[noparse][[/noparse]loopnext,firstdoor,seconddoor,...,seventhdoor]
    loopnext:
    next
    goto waiting ' tested all the doors

    firstdoor:
    branch xy.bit0,[noparse][[/noparse]door1opened,door1closed]
    door1opened:
    ' do something
    goto loopnext ' back to test other doors
    door1closed:
    ' do something
    goto loopnext

    seconddoor:
    branch xy.bit1,[noparse][[/noparse]door2opened,door2closed]
    door2opened:
    ' do something
    goto loopnext ' back to test other doors
    ' etc etc

    If you could be sure that only one door will never change at a time,
    the bit scanning would not be necessary and the main branch could go
    directly to the door actions:

    waiting:
    x1=inL ' read new state
    xx=x1 ^ x0 ' see if there are any transitions
    xy = xx & x1 ' distinguish 0->1 xitions from 1->0
    x0=x1 ' update old state
    branch ncd xx,[noparse][[/noparse]waiting,firstdoor,seconddoor,..,seventhdoor]

    The NCD operator returns the index of the highest bit set in a binary
    value, for example xx=%00010000 would return 5 (transition on fifth
    door). A value xx=%00000000 means that nothing has happened and the
    branch just goes right back to waiting.

    The same thing can be done using a lot of if-then logic, instead of
    XOR logic, but it tends to turn into a big tangled bowl of linguini!
    good luck!

    -- Tracy Allen
    electronically monitored ecosystems
    http://www,emesystems.com
  • ArchiverArchiver Posts: 46,084
    edited 2001-03-01 03:19
    Well,the first part is here. I have not tested yet but it should work.

    oldstate var byte
    newstate var byte
    changed var byte

    start:
    oldstate= INL ('pins 0-7) 'your doors sensors
    loop:
    newstate = INL
    if newstate = oldstate then loop: 'remain looping if not change
    changed = oldstate ^ newstate 'XOR will "1" only changed pins"
    debug home
    debug bin8 changed, cr 'debug will show door changed as "1"
    if changed.bit0= 1 then dosomething0
    if changed.bit1= 1 then dosomething1
    ...... 'same for other doors

    dosomething0:
    'do here for pin 0
    goto start ' start again

    dosomething1:
    'do here for pin 1
    goto start ' start again

    ...... 'same for other doors

    Remember that since Stamp cannot do multitask it will not detect a
    further change when it is doing "something". If the task could be done
    in a short time this will not be a problem for you. Another drawback is
    if two or more doors change at the same time.For this a solution could
    be another approach after the the XOR.

    Regards;
    ACJacques






    Gene Shults wrote:
    >
    > The (Do Something) will probably be different for
    > different inputs.
    > Some may be the same.
    >
    >
    Original Message
    > From: "AC Jacques" <acjacques@i...>
    > To: <basicstamps@yahoogroups.com>
    > Sent: Wednesday, February 28, 2001 8:06 PM
    > Subject: Re: [noparse][[/noparse]basicstamps] Programing????
    >
    > > Do you need do different things depending of the
    > door, or the "do some
    > > thing" will be the same for any door?
    > > ACJacques
    > >
    > > Gene Shults wrote:
    > > >
    > > > I have a project that will require the BS2 to be
    > able
    > > > to tell when the state of a pin
    > > > (set up as an Input) has changed from High to Low
    > (Do
    > > > Some thing) and from
    > > > Low to High (Do Some Thing).
    > > >
    > > > What I would like to do is have anywhere from 4 to
    > 8
    > > > inputs to monitor doors in
    > > > a remote building I have. If possible, what I would
    > > > like to do is monitor the door
    > > > with an input and when the door is opened the input
    > to
    > > > (lets say) pin0 goes from
    > > > High to low, and at this time I want to have the
    > BS2 do
    > > > something and only do it once.
    > > > And if the door is left open I don't want anything
    > to
    > > > happen until the door closes and there will be
    > > > a change of pin0 from low to high then I want some
    > > > thing to happen and again only do it once
    > > > When the door is either left closed or open I don't
    > > > want the BS2 to do anything. Again the
    > > > only time I want it to do anything is when there is
    > a
    > > > transaction between (High to
    > > > Low) and (Low to High).
    > > >
    > > > Sorry if I repeated myself to many times...
    > > > I have sat and thought about this for many hours
    > and
    > > > can't come up with a simply solution,
    > > > not even sure this is possible with the BS2....
    > > >
    > > > Thank you,
    > > > In Advance
    > > > Gene
    > > >
    > > >
    > > >
    > > > Your use of Yahoo! Groups is subject to
    > http://docs.yahoo.com/info/terms/
    > >
    > >
    > >
    > > Your use of Yahoo! Groups is subject to
    > http://docs.yahoo.com/info/terms/
    > >
    > >
    >
    >
    >
    > Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/
  • ArchiverArchiver Posts: 46,084
    edited 2001-03-01 17:23
    > >I have a project that will require the BS2 to be able
    > >to tell when the state of a pin
    > >(set up as an Input) has changed from High to Low (Do
    > >Some thing) and from
    > >Low to High (Do Some Thing).
    > >
    > >What I would like to do is have anywhere from 4 to 8
    > >inputs to monitor doors in
    >a remote building I have. If possible, what I would
    >like to do is monitor the door
    >with an input and when the door is opened the input to
    >(lets say) pin0 goes from
    >High to low, and at this time I want to have the BS2 do
    >something and only do it once.
    ..
    >The (Do Something) will probably be different for
    >different inputs.
    >Some may be the same.

    Hi Gene,

    Here is an alternative program for checking all the doors, that runs
    faster by using the NCD operator for all the branching. This one can
    handle events where two or more doors happen to change at the the
    same time.


    ' door inputs to P0 to P8
    x0 var byte ' old state of doors
    x1 var byte ' new state of doors
    xx var byte ' transition state of doors
    xy var byte ' transitiion state 0->1

    x0=inL ' read states at start

    waiting:
    x1=inL ' read new state
    xx=x1 ^ x0 ' see if there are any transitions
    xy = xx & x1 ' distinguish 0->1 xitions from 1->0
    x0=x1 ' update old state
    checkalldoors:
    branch ncd xx,[noparse][[/noparse]waiting,firstdoor,seconddoor,..,eigthdoor]


    firstdoor:
    xx=xx & %11111110 ' knock down the 1st door bit
    branch xy.bit0,[noparse][[/noparse]door1opened,door1closed]
    door1opened:
    ' do something
    goto checkalldoors ' back to test other doors
    door1closed:
    ' do something
    goto checkalldoors

    seconddoor:
    xx=xx & %11111101 ' knock down the 2nd door bit
    branch xy.bit1,[noparse][[/noparse]door2opened,door2closed]
    door2opened:
    ' do something
    goto checkalldoors ' back to test other doors
    door2closed:
    ' do something
    goto checkalldoors

    ' etc etc

    Suppose two doors change at the same time, for example, xx=%00010100.
    The NCD operator returns the index of the highest bit set in a binary
    value, so NCD %00010100 would return 5 (transition on fifth
    door). That would make the routine branch to the fifthdoor routine,
    which now knocsk down the fifth bit, making xx=%00000100. After
    doing something for the fifth door, the program returns to the
    checkalldoors point, where now NCD %00000100 makes the program branch
    to the thriddoor routine, which knocks down the third bit and does
    the action for the third door and again returns to checkalldoors.
    Now xx=0, and NCD 0 is zero so the routine returns to waiting for the
    next event.


    -- Tracy Allen
    electronically monitored ecosystems
    http://www,emesystems.com





    Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/
  • ArchiverArchiver Posts: 46,084
    edited 2001-03-02 13:16
    I would like to thank both

    Tracy Allen
    electronically monitored ecosystems
    http://www,emesystems.com

    And

    AC Jacques

    For the leads on the programing I was having problem
    with.
    This was exactly what I was looking for..

    Two very sharp Guys..

    Thanks Again
    Gene
  • ArchiverArchiver Posts: 46,084
    edited 2001-03-02 17:32
    >can't come up with a simply solution,
    >not even sure this is possible with the BS2....

    Hi Gene,

    When you say inflammatory things like that, it is sure to be challenge!

    best regards,
    -- Tracy
  • ArchiverArchiver Posts: 46,084
    edited 2001-03-23 02:47
    Typical Tracy Allen elegance………
Sign In or Register to comment.