Legal Removal Request This form is for reporting content posted on the AB Electronics UK forums that you believe violates your personal legal rights or applicable local laws for your country. Post: Hello Andrew The code below should work for your project. In the callback function, I added a while loop which keeps reading the port value until the state changes which means a button has been released. Without this, the code will only run once and not reset the interrupts. The port did not need to be inverted as the internal pull-ups are disabled so the pin would go high when a button is pressed. You will need to make sure you have a pull-down resistor on each button so they drop back to 0V when the button is released otherwise they will sit in a floating state which can cause unwanted interrupt triggers. I changed the interrupt polarity to 1 as the voltage divider will pull the output low when the interrupt resets so it will work better with triggering high. The wiringPiISR now triggers on a rising edge instead of a falling edge and I disabled the GPIO pull-up as you already have a pull-down resistor on the voltage divider. I have tested the code with a button connected to the 5V pin on the Raspberry Pi and the same voltage divider values as you have used and it appears to be working correctly but if you have any problems please let me know. [pre][code]#include "stdio.h" #include "stdlib.h" #include "string.h" #include "signal.h" #include "unistd.h" #include #include "ABE_IoPi.h" #include #include #include #define BUTTON 25 void callBut() { int intval = read_interrupt_capture(0x21,0); // read the capture value printf("Port 0 %x \n",intval); while (intval == read_port(0x21,0)){ // keep reading the port until the button is released usleep(100000); } } int main(int argc, char* argv[]) { IOPi_init(0x21); // initialise one of the io pi buses on i2c address 0x20 set_port_pullups( 0x21, 0, 0x00); //turn off the internal 100K pull-up resistors for the selected IO port set_port_direction(0x21, 0, 0xFF); // set the direction for bank 0 to be inputs invert_port(0x21, 0, 0x00); //set the polarity of the pins on the port to be normal set_interrupt_polarity(0x21, 1); // Set the polarity of the interrupt pin to go high. mirror_interrupts( 0x21, 1); // Set the interrupt pins to be mirrored or for separate ports set_interrupt_defaults( 0x21, 0, 0x00); // Set the default value to be off for all pins set_interrupt_type( 0x21, 0, 0xFF); // Sets the type of interrupt to trigger when the pin matches the default value set_interrupt_on_port( 0x21, 0, 0xFF); // Enable interrupts for all pins on port 0 reset_interrupts( 0x21); wiringPiSetupGpio(); pinMode(BUTTON,INPUT); pullUpDnControl(BUTTON,PUD_OFF); wiringPiISR(BUTTON,INT_EDGE_RISING,&callBut); while(1) { } }[/code][/pre] Select the country where you are claiming legal rights. Albania Algeria American Samoa Andorra Angola Anguilla Antarctica Antigua and Barbuda Argentina Aruba Australia Austria Bahamas Bahrain Bangladesh Barbados Belarus Belgium Belize Benin Bermuda Bhutan Bolivia Bosnia And Herzegovina Botswana Bouvet Island Brazil British Indian Ocean Territory British Virgin Islands Brunei Bulgaria Burkina Faso Burundi Cambodia Cameroon Canada Canary Islands Cape Verde Cayman Islands Central African Republic Chad Channel Islands Chile Christmas Island Cocos (Keeling) Islands Colombia Comoros Congo Cook Islands Costa Rica Croatia Cuba Cyprus Czech Republic Denmark Djibouti Dominica Dominican Republic East Timor Ecuador Egypt El Salvador Equatorial Guinea Estonia Ethiopia Falkland Islands (Malvinas) Faroe Islands Federated States of Micronesia Fiji Finland France French Guiana French Polynesia French Southern Territories Gabon Gambia Georgia Germany Ghana Gibraltar Greece Greenland Grenada Guadeloupe Guam Guatemala Guyana Haiti Heard Island and McDonald Islands Honduras Hong Kong Hungary Iceland India Indonesia Ireland Israel Italy Jamaica Japan Jordan Kazakhstan Kenya Kiribati Kuwait Kyrgyzstan Laos Latvia Lesotho Liechtenstein Lithuania Luxembourg Macau Macedonia Madagascar Malawi Malaysia Maldives Mali Malta Marshall Islands Martinique Mauritania Mauritius Mayotte Mexico Micronesia, Federated States Of Moldova, Republic Of Monaco Mongolia Montenegro Montserrat Morocco Mozambique Myanmar Namibia Nauru Nepal Netherlands Netherlands Antilles New Caledonia New Zealand Nicaragua Niue Norfolk Island Northern Mariana Islands Norway Oman Palau Panama Papua New Guinea Paraguay Peru Philippines Pitcairn Poland Portugal Puerto Rico Qatar Reunion Romania Russia Rwanda Samoa San Marino Sao Tome and Principe Saudi Arabia Serbia Seychelles Singapore Slovakia Slovenia Solomon Islands South Africa South Georgia and the South Sandwich Islands South Korea Spain Sri Lanka St. Helena St. Kitts and Nevis St. Lucia St. Pierre and Miquelon St. Vincent and the Grenadines Suriname Svalbard and Jan Mayen Islands Swaziland Sweden Switzerland Syria Taiwan Tajikistan Tanzania Thailand Togo Tokelau Tonga Trinidad and Tobago Tunisia Turkey Turkmenistan Turks and Caicos Islands Tuvalu U.S. Virgin Islands Uganda Ukraine United Arab Emirates United Kingdom United States United States Minor Outlying Islands Uruguay Uzbekistan Vanuatu Vatican City Venezuela Vietnam Wallis and Futuna Islands Western Sahara Yemen Yugoslavia Zambia What legal issue or problem do you wish to report? Please select Privacy / Erasure under GDPR Defamation Intellectual Property Hate Speech Other Please enter the following information so we can process your report. Contact Name: Contact Email: Details of complaint: Submit Complaint