Test application for the library MCP23017_I2C

Dependencies:   DebugLibrary MCP23017_I2C mbed

Committer:
Yann
Date:
Tue Jan 13 10:24:44 2015 +0000
Revision:
4:1a72df541a38
Parent:
3:3f23faf5f7eb
Remove DEBUG info

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Yann 0:1d91b4046326 1 #include <string>
Yann 0:1d91b4046326 2 #include <iostream>
Yann 0:1d91b4046326 3 #include <iomanip>
Yann 0:1d91b4046326 4
Yann 0:1d91b4046326 5 #include "MCP23017_I2C.h"
Yann 0:1d91b4046326 6
Yann 0:1d91b4046326 7 /*
Yann 0:1d91b4046326 8 * Declare functions
Yann 0:1d91b4046326 9 */
Yann 0:1d91b4046326 10 void AvailableIndicator(); // LED1 flashing for program while program is alive
Yann 0:1d91b4046326 11 DigitalOut g_availableLed(LED1); // To verify if program in running
Yann 0:1d91b4046326 12 Ticker g_available; // LED1 will flash with a period of 2s
Yann 0:1d91b4046326 13 char DisplayMenuAndGetChoice();
Yann 1:e981573db063 14 void GpioAIntr(); // Interrupt on GPIOA
Yann 0:1d91b4046326 15
Yann 0:1d91b4046326 16 static CMCP23017_I2C g_gpioExp(p9, p10, 0x27, p15, p16, p17);
Yann 0:1d91b4046326 17
Yann 0:1d91b4046326 18 int main() {
Yann 0:1d91b4046326 19 // Launch available indicator
Yann 0:1d91b4046326 20 g_available.attach(&AvailableIndicator, 2.0);
Yann 0:1d91b4046326 21
Yann 1:e981573db063 22 g_gpioExp.Initialize(0x01); // GpioA<0> as input port, no interrupt mirroring, Active low
Yann 1:e981573db063 23 g_gpioExp.setupInterruptPin(GPA0, AbstractGpioExpender::OnFalling); // A switch with pull-up is connected to GPIOA<0>, interrupt on falling mode
Yann 1:e981573db063 24 g_gpioExp.setIntrACallback(GpioAIntr); // Set callback for interrup on GPIOA<0>
Yann 0:1d91b4046326 25
Yann 0:1d91b4046326 26 while(true) {
Yann 0:1d91b4046326 27 switch (DisplayMenuAndGetChoice()) {
Yann 0:1d91b4046326 28 case 'a':
Yann 0:1d91b4046326 29 g_gpioExp.write(GPB0, 1);
Yann 0:1d91b4046326 30 break;
Yann 0:1d91b4046326 31 case 'b':
Yann 0:1d91b4046326 32 g_gpioExp.write(GPB0, 0);
Yann 0:1d91b4046326 33 break;
Yann 0:1d91b4046326 34 case 'c':
Yann 0:1d91b4046326 35 g_gpioExp.write(GPB2, 1);
Yann 0:1d91b4046326 36 break;
Yann 0:1d91b4046326 37 case 'd':
Yann 0:1d91b4046326 38 g_gpioExp.write(GPB2, 0);
Yann 0:1d91b4046326 39 break;
Yann 1:e981573db063 40 case 'e':
Yann 1:e981573db063 41 g_gpioExp.write(GPB3, 1);
Yann 1:e981573db063 42 break;
Yann 1:e981573db063 43 case 'f':
Yann 1:e981573db063 44 g_gpioExp.write(GPB3, 0);
Yann 1:e981573db063 45 break;
Yann 1:e981573db063 46 case 'g':
Yann 3:3f23faf5f7eb 47 g_gpioExp.write(GPB4, 1);
Yann 1:e981573db063 48 break;
Yann 1:e981573db063 49 case 'h':
Yann 3:3f23faf5f7eb 50 g_gpioExp.write(GPB4, 0);
Yann 3:3f23faf5f7eb 51 break;
Yann 3:3f23faf5f7eb 52 case 'i':
Yann 3:3f23faf5f7eb 53 g_gpioExp.write(GPB7, 1);
Yann 3:3f23faf5f7eb 54 break;
Yann 3:3f23faf5f7eb 55 case 'j':
Yann 1:e981573db063 56 g_gpioExp.write(GPB7, 0);
Yann 1:e981573db063 57 break;
Yann 3:3f23faf5f7eb 58 case 'r':
Yann 3:3f23faf5f7eb 59 g_gpioExp.reset();
Yann 3:3f23faf5f7eb 60 break;
Yann 3:3f23faf5f7eb 61 case 's': {
Yann 2:83b9df729e73 62 std::list<unsigned char> lcdBus;
Yann 3:3f23faf5f7eb 63 lcdBus.push_back(GPA7); // First item in the list
Yann 2:83b9df729e73 64 lcdBus.push_back(GPA6);
Yann 2:83b9df729e73 65 lcdBus.push_back(GPA5);
Yann 2:83b9df729e73 66 lcdBus.push_back(GPA4);
Yann 2:83b9df729e73 67 unsigned char busId = g_gpioExp.createBus(lcdBus);
Yann 3:3f23faf5f7eb 68 g_gpioExp.busWrite(busId, 0x000A); // GPA7=1, GPA6=0, GPA5=1, GPA4=0 - LSB is GPB4, MSB is GPA7
Yann 3:3f23faf5f7eb 69 wait_us(20);
Yann 3:3f23faf5f7eb 70 g_gpioExp.busWrite(busId, 0x0000); // GPA7=1, GPA6=0, GPA5=1, GPA4=0
Yann 3:3f23faf5f7eb 71 wait_us(20);
Yann 2:83b9df729e73 72 g_gpioExp.deleteBus(busId);
Yann 2:83b9df729e73 73 }
Yann 2:83b9df729e73 74 break;
Yann 0:1d91b4046326 75 default:
Yann 0:1d91b4046326 76 std::cout << "Invalid user choice\r" << std::endl;
Yann 0:1d91b4046326 77 break;
Yann 0:1d91b4046326 78 } // End of 'switch' statement
Yann 0:1d91b4046326 79
Yann 0:1d91b4046326 80 } // End of 'while' loop
Yann 0:1d91b4046326 81 }
Yann 0:1d91b4046326 82
Yann 0:1d91b4046326 83 void AvailableIndicator()
Yann 0:1d91b4046326 84 {
Yann 0:1d91b4046326 85 g_availableLed = !g_availableLed;
Yann 0:1d91b4046326 86 } // End of AvailableIndicator
Yann 0:1d91b4046326 87
Yann 0:1d91b4046326 88 char DisplayMenuAndGetChoice()
Yann 0:1d91b4046326 89 {
Yann 0:1d91b4046326 90 char value;
Yann 0:1d91b4046326 91 std::cout << "\r" << std::endl << "\r" << std::endl << "MCP23017_I2C v0.1\r" << std::endl;
Yann 3:3f23faf5f7eb 92 std::cout << "\tSet MUX_EN1 (PortB-0) :\t\ta\r" << std::endl;
Yann 3:3f23faf5f7eb 93 std::cout << "\tUnset MUX_EN1 (PortB-0) :\t\tb\r" << std::endl;
Yann 3:3f23faf5f7eb 94 std::cout << "\tSet MUX_ADDR0 (PortB-2) :\t\tc\r" << std::endl;
Yann 3:3f23faf5f7eb 95 std::cout << "\tUnset MUX_ADDR0 (PortB-2) :\t\td\r" << std::endl;
Yann 3:3f23faf5f7eb 96 std::cout << "\tSet MUX_ADDR1 (PortB-3) :\t\te\r" << std::endl;
Yann 3:3f23faf5f7eb 97 std::cout << "\tUnset MUX_ADDR1 (PortB-3) :\t\tf\r" << std::endl;
Yann 3:3f23faf5f7eb 98 std::cout << "\tSet MUX_ADDR2 (PortB-4) :\t\tg\r" << std::endl;
Yann 3:3f23faf5f7eb 99 std::cout << "\tUnset MUX_ADDR2 (PortB-4) :\t\th\r" << std::endl;
Yann 3:3f23faf5f7eb 100 std::cout << "\tSet BOARD_EN (PortB-7) :\t\ti\r" << std::endl;
Yann 3:3f23faf5f7eb 101 std::cout << "\tUnset BOARD_EN (PortB-7) :\t\tj\r" << std::endl;
Yann 3:3f23faf5f7eb 102 std::cout << "\tReset device :\t\tr\r" << std::endl;
Yann 3:3f23faf5f7eb 103 std::cout << "\tBus test :\t\ts\r" << std::endl;
Yann 0:1d91b4046326 104 std::cout << "Enter your choice: " << std::flush;
Yann 0:1d91b4046326 105 value = getchar();
Yann 0:1d91b4046326 106 std::cout << "\r" << std::endl;
Yann 0:1d91b4046326 107 return value;
Yann 0:1d91b4046326 108 }
Yann 1:e981573db063 109
Yann 1:e981573db063 110 void GpioAIntr() {
Yann 1:e981573db063 111 unsigned char gpioId, gpioValue;
Yann 1:e981573db063 112 wait(0.6); // Debounce timer
Yann 3:3f23faf5f7eb 113 g_gpioExp.getLastInterruptPinAndValue(&gpioId, &gpioValue); // Get interrupt info and clear it
Yann 1:e981573db063 114 std::cout << "\r" << std::endl << "GpioAIntr: interrupt on pin #" << std::hex << std::setw(2) << std::setfill('0') << static_cast<unsigned int>(gpioId) << " - value: " << static_cast<unsigned int>(gpioValue) << "\r" << std::endl;
Yann 1:e981573db063 115 }
Yann 1:e981573db063 116