element14 Community
element14 Community
    Register Log In
  • Site
  • Search
  • Log In Register
  • About Us
  • Community Hub
    Community Hub
    • What's New on element14
    • Feedback and Support
    • Benefits of Membership
    • Personal Blogs
    • Members Area
    • Achievement Levels
  • Learn
    Learn
    • Ask an Expert
    • eBooks
    • element14 presents
    • Learning Center
    • Tech Spotlight
    • STEM Academy
    • Webinars, Training and Events
    • Learning Groups
  • Technologies
    Technologies
    • 3D Printing
    • FPGA
    • Industrial Automation
    • Internet of Things
    • Power & Energy
    • Sensors
    • Technology Groups
  • Challenges & Projects
    Challenges & Projects
    • Design Challenges
    • element14 presents Projects
    • Project14
    • Arduino Projects
    • Raspberry Pi Projects
    • Project Groups
  • Products
    Products
    • Arduino
    • Avnet Boards Community
    • Dev Tools
    • Manufacturers
    • Multicomp Pro
    • Product Groups
    • Raspberry Pi
    • RoadTests & Reviews
  • Store
    Store
    • Visit Your Store
    • Choose another store...
      • Europe
      •  Austria (German)
      •  Belgium (Dutch, French)
      •  Bulgaria (Bulgarian)
      •  Czech Republic (Czech)
      •  Denmark (Danish)
      •  Estonia (Estonian)
      •  Finland (Finnish)
      •  France (French)
      •  Germany (German)
      •  Hungary (Hungarian)
      •  Ireland
      •  Israel
      •  Italy (Italian)
      •  Latvia (Latvian)
      •  
      •  Lithuania (Lithuanian)
      •  Netherlands (Dutch)
      •  Norway (Norwegian)
      •  Poland (Polish)
      •  Portugal (Portuguese)
      •  Romania (Romanian)
      •  Russia (Russian)
      •  Slovakia (Slovak)
      •  Slovenia (Slovenian)
      •  Spain (Spanish)
      •  Sweden (Swedish)
      •  Switzerland(German, French)
      •  Turkey (Turkish)
      •  United Kingdom
      • Asia Pacific
      •  Australia
      •  China
      •  Hong Kong
      •  India
      •  Korea (Korean)
      •  Malaysia
      •  New Zealand
      •  Philippines
      •  Singapore
      •  Taiwan
      •  Thailand (Thai)
      • Americas
      •  Brazil (Portuguese)
      •  Canada
      •  Mexico (Spanish)
      •  United States
      Can't find the country/region you're looking for? Visit our export site or find a local distributor.
  • Translate
  • Profile
  • Settings
Raspberry Pi
  • Products
  • More
Raspberry Pi
Raspberry Pi Forum Python help with GPIO
  • Blog
  • Forum
  • Documents
  • Quiz
  • Events
  • Polls
  • Files
  • Members
  • Mentions
  • Sub-Groups
  • Tags
  • More
  • Cancel
  • New
Join Raspberry Pi to participate - click to join for free!
Featured Articles
Announcing Pi
Technical Specifications
Raspberry Pi FAQs
Win a Pi
Raspberry Pi Wishlist
Actions
  • Share
  • More
  • Cancel
Forum Thread Details
  • State Suggested Answer
  • Replies 27 replies
  • Answers 10 answers
  • Subscribers 666 subscribers
  • Views 3411 views
  • Users 0 members are here
  • raspberry_pi
Related

Python help with GPIO

rcayot
rcayot over 5 years ago

Okay, I guess it is time to ask for help.  I have learned how to breadboard up a set of traffic lights, a button and a buzzer.  I can get them all to work with simple python programs.  Now I want to interrupt the normal light sequence when the button is pushed.  I can even get a detect event to work.  What I do not seem to be able to do is condition the "if" or "while" loop for the lights on the event. 

 

I have a callback and it seems to work, so I can print the status of the "button is pressed" but I cannot pass it as "true" to the loop.  I suspect it may be that when defining "btnpushed" it is local to only the callback loop?

 

i can self learn, but most of the tutorials I see are very single topic context, like what is a while loop or what is an if loop.  Any pointers to a good example of using these functions would be great!

 

i hope this is clear.

 

Roger Ayotte

  • Sign in to reply
  • Cancel
Parents
  • clem57
    0 clem57 over 5 years ago

    Let me paraphrase a bit. You have something going in on a loop. You have a callback setup on a button push. And you wish to affect the looping code. Right?

    Here is the problem. When the callback runs. you do not have access to the stuff running! Look at the routine or function that setup the callback. I will bet you can pass a parameter which you set as TRUE or FALSE initially. Within the callback, change it to the NOT condition.The looping code can test the value and know when the callback changed it.

    Clem

    • Cancel
    • Vote Up +2 Vote Down
    • Sign in to reply
    • Verify Answer
    • Reject Answer
    • Cancel
Reply
  • clem57
    0 clem57 over 5 years ago

    Let me paraphrase a bit. You have something going in on a loop. You have a callback setup on a button push. And you wish to affect the looping code. Right?

    Here is the problem. When the callback runs. you do not have access to the stuff running! Look at the routine or function that setup the callback. I will bet you can pass a parameter which you set as TRUE or FALSE initially. Within the callback, change it to the NOT condition.The looping code can test the value and know when the callback changed it.

    Clem

    • Cancel
    • Vote Up +2 Vote Down
    • Sign in to reply
    • Verify Answer
    • Reject Answer
    • Cancel
Children
  • rcayot
    0 rcayot over 5 years ago in reply to clem57

    yes, when I set btnpushed to 1, the while btnpushed == 0 does not run.

     

    when set to 0 it runs, and when I get an event that sets it to 1 the while btnpushed = 0 still runs!

     

    Roger

    • Cancel
    • Vote Up +1 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • shabaz
    0 shabaz over 5 years ago in reply to rcayot

    Hi Roger,

     

    I've not looked at all of the code, but you've got a bug that really ought to have generated a warning in any other language..

    line 17 has a double equals, which needs to be a single equals (assuming you wish to set that variable)

     

    Also, anything you do in that def will be local.. assuming that's what you want? Otherwise you need to declare it as global remember, as mentioned in posts earlier..

    • Cancel
    • Vote Up +1 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • clem57
    0 clem57 over 5 years ago in reply to shabaz

    Bingo shabaz. Because line 13 sets btnpushed = 0, it is global in scope. But inside cb1, line 17 does a comparison and not an assign on global btnpushed. I guess the value is never changed as a result.

     

    yes, when I set btnpushed to 1, the while btnpushed == 0 does not run.

     

    when set to 0 it runs, and when I get an event that sets it to 1 the while btnpushed = 0 still runs!

     

    Roger

    Kindly see https://www.guru99.com/python-operators-complete-tutorial.html where much of this is explained.

     

    Various comparison operators are ( ==, != , <>, >,<=, etc) image Notice all are 2 symbols not one.

     

    Various assignment operators used in Python are (+=, - = , *=, /= , etc.) image These are special compound assignments where the left side is operated(+-*/) on by the right creating a value to replace the left side.

     

    I hope this clears the air so to speak.

    If not, let me know...

     

    Clem

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
element14 Community

element14 is the first online community specifically for engineers. Connect with your peers and get expert answers to your questions.

  • Members
  • Learn
  • Technologies
  • Challenges & Projects
  • Products
  • Store
  • About Us
  • Feedback & Support
  • FAQs
  • Terms of Use
  • Privacy Policy
  • Legal and Copyright Notices
  • Sitemap
  • Cookies

An Avnet Company © 2025 Premier Farnell Limited. All Rights Reserved.

Premier Farnell Ltd, registered in England and Wales (no 00876412), registered office: Farnell House, Forge Lane, Leeds LS12 2NE.

ICP 备案号 10220084.

Follow element14

  • X
  • Facebook
  • linkedin
  • YouTube