title: Raspberry Pi Interrupts Python (GPIO Library)
body: <p>I have a little problem with my little raspberry project, I have hooked up an LCD screen and a bunch of buttons to it, from my university course about micro-controllers I've learned that interrupts always trigger, no matter where the code is (but it was an actual microprocessor written in C). I found an "equivalent" in python, GPIO library. Normally a program is in a infinite loop waiting for an interrupt.  </p>
  
  <pre><code>GPIO.add_event_detect(4, GPIO.RISING, callback=interrupt, bouncetime=200)
  </code></pre>
  
  <p>I set them up this way, they all go to the same method and check which button was pressed and run another method that I want (e.g one is for displaying time, another for IP address etc). A thing is, one of those methods I've done is in an infinite loop that another button press should break, but from this point a method </p>
  
  <pre><code>while not GPIO.event_detected(4):
  </code></pre>
  
  <p>doesn't work (calling this method in any other doesn't either if its in this loop, and all other button that I have set up will not react at all too), if it was my default while loop it does tho. I don't have much experience in either micro-controllers and python, its just hobby thing at the moment. If needed I'll share my entire code but I think its quite tangled.   </p>
  
  <p>Ok I am providing a simplified example, same same thing happens as in my original code. After an interrupt happens, buttons will not react, doesn't matter if I use <code>while not GPIO.event_detected(19)</code> or <code>GPIO.add_event_callback(26, callback=second_interrupt)</code>.</p>
  
  <pre><code>import RPi.GPIO as GPIO
  import time
  
  
  GPIO.setmode(GPIO.BCM)
  GPIO.setup(26, GPIO.IN, pull_up_down=GPIO.PUD_UP)  # Button 1
  GPIO.setup(19, GPIO.IN, pull_up_down=GPIO.PUD_UP)  # Button 2
  
  
  def interrupt(channel):
      print "interrupt"
      if channel == 26:
          print "in loop"
          GPIO.add_event_callback(26, callback=second_interrupt)  #Trying to use this won't trigger second interrupt
          while not GPIO.event_detected(19):                      #and this wont ever trigger
              time.sleep(1)
              print "inside loop"
  
  
  def second_interrupt():
      print "second interrupt"
  
  
  GPIO.add_event_detect(26, GPIO.RISING, callback=interrupt, bouncetime=200)  # add rising edge detection on a channel
  GPIO.add_event_detect(19, GPIO.RISING, callback=interrupt, bouncetime=200)  # add rising edge detection on a channel
  
  
  while (True):
      time.sleep(1)
      if GPIO.event_detected(19):         #this version works if I wont enter an interrupt first
          second_interrupt()
  </code></pre>