Test program for MCP23S17

Dependencies:   ExioController MCP23S17 mbed-rtos mbed

main.cpp

Committer:
ryood
Date:
2016-11-04
Revision:
13:1688ed45cccd
Parent:
12:5f0db7a87485
Child:
14:3a2c33129716

File content as of revision 13:1688ed45cccd:

#include "mbed.h"
#include "rtos.h"

#include "ExioMcp23s17PinDetect.h"
#include "ExioMcp23s17DebounceIn.h"
#include "ExioMcp23s17RotaryEncoder.h"
#include "ExioMcp23s17Keypad4x4.h"

SPI Spi(PC_12, PC_11, PC_10); // SPI3: mosi, miso, sclk
//SPI Spi(PA_7, PA_6, PA_5); // SPI1:  mosi, miso, sclk

// MExioMcp23s17(int hardwareaddress, SPI& spi, PinName nCs, PinName nReset);
ExioMcp23s17 Exio(0x00, Spi, PD_2, PA_13);


bool state = false;
uint8_t count = 0;

/*
// トグル動作
void pa6Falled() {
    state = !state;
}

// インクリメント
void pa7Falled() {
    count++;
}
*/

/*
void TestExioMcp23s17DebounceIn()
{
    printf("\r\n\n*** ExioMcp23s17DebouceIn test ***\r\n");
    
    Exio.reset();
    
    ExioMcp23s17DebounceIn insA[8] = {
        ExioMcp23s17DebounceIn(&Exio, ExioPortA, 0),
        ExioMcp23s17DebounceIn(&Exio, ExioPortA, 1),
        ExioMcp23s17DebounceIn(&Exio, ExioPortA, 2),
        ExioMcp23s17DebounceIn(&Exio, ExioPortA, 3),
        ExioMcp23s17DebounceIn(&Exio, ExioPortA, 4),
        ExioMcp23s17DebounceIn(&Exio, ExioPortA, 5),
        ExioMcp23s17DebounceIn(&Exio, ExioPortA, 6),
        ExioMcp23s17DebounceIn(&Exio, ExioPortA, 7)
    };

    ExioMcp23s17DebounceIn insB[8] = {
        ExioMcp23s17DebounceIn(&Exio, ExioPortB, 0),
        ExioMcp23s17DebounceIn(&Exio, ExioPortB, 1),
        ExioMcp23s17DebounceIn(&Exio, ExioPortB, 2),
        ExioMcp23s17DebounceIn(&Exio, ExioPortB, 3),
        ExioMcp23s17DebounceIn(&Exio, ExioPortB, 4),
        ExioMcp23s17DebounceIn(&Exio, ExioPortB, 5),
        ExioMcp23s17DebounceIn(&Exio, ExioPortB, 6),
        ExioMcp23s17DebounceIn(&Exio, ExioPortB, 7)
    };
    
    for (int i = 0; i < 8; i++) {
        insA[i].mode(PullUp);
        insB[i].mode(PullUp);
    }
    for (int i = 0; i < 8; i++) {
        insA[i].set_debounce_us(1000);
        insB[i].set_debounce_us(1000);
    }
    
    while (true) {
        for (int i = 0; i < 8; i++) {
            printf("%d ", insA[i].read());
        }
        printf("  ");
        for (int i = 0; i < 8; i++) {
            printf("%d ", insB[i].read());
        }
        printf("\r\n");
    } 
}    
*/

int main()
{
    //TestExioMcp23s17DebounceIn();
    
    printf("\r\n\n*** ExioMcp23s17Controller test ***\r\n");
    
    Exio.reset();
    
    /*
    ExioMcp23s17PinDetect PinA6(&Exio, ExioPortA, 6);
    ExioMcp23s17PinDetect PinA7(&Exio, ExioPortA, 7);
    
    // assign callback functions
    PinA6.attach_asserted(&pa6Falled);
    PinA6.setAssertValue(0);
    PinA6.setSampleFrequency();
    
    PinA7.attach_asserted(&pa7Falled);
    PinA7.setAssertValue(0);
    PinA7.setSampleFrequency();
    */
    
    // set PORTA[0:1], PORTA[2:3] as a Rotary Encoder
    //    ExioMcp23s17RotaryEncoder(
    //    ExioMcp23s17& device, ExioPort port, int pin1, int pin2,
    //    int min = 0, int max = 100, int val = 50
    //);
    ExioMcp23s17RotaryEncoder RotEnc1(&Exio, ExioPortA, 0, 1, 0, 100, 50);
    ExioMcp23s17RotaryEncoder RotEnc2(&Exio, ExioPortA, 2, 3, 0, 100, 50);

    // set PORTB[0:7] as debouce inputs
    ExioMcp23s17DebounceIn* psw[8];
    for (int i = 0; i < 8; i++) {
        psw[i] = new ExioMcp23s17DebounceIn(&Exio, ExioPortB, i);
        psw[i]->mode(PullUp);
    }
    
    RotEnc1.setInterval(500);
    RotEnc2.setInterval(500);
    for (int i = 0; i < 8; i++) {
        psw[i]->set_debounce_us(1000);
    }
  
    while (true) {
        int reVal1, reVal2;
        reVal1 = RotEnc1.getVal();
        reVal2 = RotEnc2.getVal();
        printf("state:%d count:%d RE1:%d RE2:%d  ", state, count, reVal1, reVal2);
        for (int i = 0; i < 8; i++) {
            printf("%d ", psw[i]->read());
        }
        printf("\r\n");

        Thread::wait(10);
    }
    
    //delete[] psw;
}