Buffered Test

Dependencies:   ExioBufferdController MCP23S17 mbed-rtos mbed

main.cpp

Committer:
ryood
Date:
2017-01-06
Revision:
13:219ff2cfa3c3
Parent:
11:325c5e9d28e2

File content as of revision 13:219ff2cfa3c3:

/*
 * ExioBufferdController Test
 *
 * mbed:      revison 121
 * mbed-rtos: revision 117
 *
 * 2017.01.06 for BaseMachine ExioBoard
 * Created: 2016.11.05
 *
 */
 
#include "mbed.h"
#include "rtos.h"

#include "ExioMcp23s17.h" 
#include "ExioInBuffer.h"
#include "ExioBufferedIn.h"
#include "ExioBufferedDebounceIn.h"
#include "ExioBufferedPinDetect.h"
#include "ExioBufferedRotaryEncoder.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;

//------------------------------------------------------------------------------
// Callback functions
//
void pa6Falled() {
    state = !state;
}

void pa7Falled() {
    count++;
}


//------------------------------------------------------------------------------
// Test functions
//
void testExioInBuffer()
{
    printf("*** Test ExioInBuffer ***\r\n");
    
    // Reset MCP23S17 (初期化時にreset()が必要)
    Exio.reset();

    ExioInBuffer exioInBufferA(&Exio, ExioPortA);
    ExioInBuffer exioInBufferB(&Exio, ExioPortB);
    
    exioInBufferA.run(1);
    exioInBufferB.run(1);
    
    while (true) {
        uint8_t va = exioInBufferA.readPort();
        uint8_t vb = exioInBufferB.readPort();
        
        printf("%d %d\r\n", va, vb);
        //Thread::wait(10);
    }
}

void testExioBufferedIn()
{
    printf("*** Test ExioBuffedIn ***\r\n");
    
    // Reset MCP23S17 (初期化時にreset()が必要)
    Exio.reset();
    
    ExioInBuffer inBufferA(&Exio, ExioPortA);
    ExioBufferedIn inA[] = {
        ExioBufferedIn(&inBufferA, 0),
        ExioBufferedIn(&inBufferA, 1),
        ExioBufferedIn(&inBufferA, 2),
        ExioBufferedIn(&inBufferA, 3),
        ExioBufferedIn(&inBufferA, 4),
        ExioBufferedIn(&inBufferA, 5),
        ExioBufferedIn(&inBufferA, 6),
        ExioBufferedIn(&inBufferA, 7)
    };
    
    ExioInBuffer inBufferB(&Exio, ExioPortB);
    ExioBufferedIn inB[] = {
        ExioBufferedIn(&inBufferB, 0),
        ExioBufferedIn(&inBufferB, 1),
        ExioBufferedIn(&inBufferB, 2),
        ExioBufferedIn(&inBufferB, 3),
        ExioBufferedIn(&inBufferB, 4),
        ExioBufferedIn(&inBufferB, 5),
        ExioBufferedIn(&inBufferB, 6),
        ExioBufferedIn(&inBufferB, 7)
    };
    
    inBufferA.run(10);
    inBufferB.run(10);
    
    while (true) {
        for (int i = 0; i < 8; i++) {
            int va = inA[i].read();
            printf("%d ", va);
        }
        putchar(' ');
        for (int i = 0; i < 8; i++) {
            int vb = inB[i].read();
            printf("%d ", vb);
        }
        printf("\r\n");
        //Thread::wait(10);
    }
}

void testExioBufferedDebounceIn()
{
    printf("*** Test ExioBuffeDebounceIn ***\r\n");
    
    // Reset MCP23S17 (初期化時にreset()が必要)
    Exio.reset();
    
    ExioInBuffer inBufferA(&Exio, ExioPortA);
    ExioBufferedDebounceIn inA[] = {
        ExioBufferedDebounceIn(&inBufferA, 0),
        ExioBufferedDebounceIn(&inBufferA, 1),
        ExioBufferedDebounceIn(&inBufferA, 2),
        ExioBufferedDebounceIn(&inBufferA, 3),
        ExioBufferedDebounceIn(&inBufferA, 4),
        ExioBufferedDebounceIn(&inBufferA, 5),
        ExioBufferedDebounceIn(&inBufferA, 6),
        ExioBufferedDebounceIn(&inBufferA, 7)
    };
    
    ExioInBuffer inBufferB(&Exio, ExioPortB);
    ExioBufferedIn inB[] = {
        ExioBufferedDebounceIn(&inBufferB, 0),
        ExioBufferedDebounceIn(&inBufferB, 1),
        ExioBufferedDebounceIn(&inBufferB, 2),
        ExioBufferedDebounceIn(&inBufferB, 3),
        ExioBufferedDebounceIn(&inBufferB, 4),
        ExioBufferedDebounceIn(&inBufferB, 5),
        ExioBufferedDebounceIn(&inBufferB, 6),
        ExioBufferedDebounceIn(&inBufferB, 7)
    };
    
    // Start Timers
    inBufferA.run(10);
    inBufferB.run(10);
    for (int i = 0; i < 8; i++) {
        inA[i].set_debounce_us(10000);
        inA[i].set_debounce_us(10000);
    }
    
    while (true) {
        for (int i = 0; i < 8; i++) {
            int va = inA[i].read();
            printf("%d ", va);
        }
        putchar(' ');
        for (int i = 0; i < 8; i++) {
            int vb = inB[i].read();
            printf("%d ", vb);
        }
        printf("\r\n");
        //Thread::wait(10);
    }
}

void testExioBufferedPinDetect()
{
    printf("*** Test ExioBufferedPinDetect ***\r\n");
    
    // Reset MCP23S17 (初期化時にreset()が必要)
    Exio.reset();
    
    ExioInBuffer inBufferA(&Exio, ExioPortA);
    ExioBufferedPinDetect pinA6(&inBufferA, 6);
    ExioBufferedPinDetect pinA7(&inBufferA, 7);
    
    // assign callback functions
    pinA6.attach_asserted(&pa6Falled);
    pinA6.setAssertValue(0);
    pinA7.attach_asserted(&pa7Falled);
    pinA7.setAssertValue(0);
    
    // Start Timers
    inBufferA.run(5);
    pinA6.setSampleFrequency(10000);
    pinA7.setSampleFrequency(10000);
            
    while (true) {
        printf("%d %d\r\n", state, count);
    }
}

void testExioBufferedRotaryEncoder()
{
    printf("*** Test ExioBufferedRotaryEncoder ***\r\n");
    
    // Reset MCP23S17 (初期化時にreset()が必要)
    Exio.reset();
    
    ExioInBuffer inBufferA(&Exio, ExioPortA);
    ExioBufferedRotaryEncoder re1(&inBufferA, 0, 1);
    
    // Start Timers
    inBufferA.run(5);
    re1.setInterval(1000);
        
    while (true) {
        int v = re1.getVal();
        printf("%d\r\n", v);
    }
}

int main()
{
    //testExioInBuffer();
    //testExioBufferedIn();
    //testExioBufferedDebounceIn();
    //testExioBufferedRotaryEncoder();
    //testExioBufferedPinDetect();
    
    printf("*** Test ExioBufferedContoroller ***\r\n");
    
    // Reset MCP23S17 (初期化時にreset()が必要)
    Exio.reset();

    // ExioInBuffer
    ExioInBuffer inBufferA(&Exio, ExioPortA);    
    ExioInBuffer inBufferB(&Exio, ExioPortB);

    // PinDetect
    ExioBufferedPinDetect pinA6(&inBufferA, 6);
    ExioBufferedPinDetect pinA7(&inBufferA, 7);
    
    // assign callback functions
    pinA6.attach_asserted(&pa6Falled);
    pinA6.setAssertValue(0);
    pinA7.attach_asserted(&pa7Falled);
    pinA7.setAssertValue(0);
    
    // DebounceIn
    ExioBufferedDebounceIn pinA2(&inBufferA, 2);
    ExioBufferedDebounceIn pinA3(&inBufferA, 3);
    ExioBufferedDebounceIn pinA4(&inBufferA, 4);
    ExioBufferedDebounceIn pinA5(&inBufferA, 5);
    
    ExioBufferedDebounceIn inB[] = {
        ExioBufferedDebounceIn(&inBufferB, 0),
        ExioBufferedDebounceIn(&inBufferB, 1),
        ExioBufferedDebounceIn(&inBufferB, 2),
        ExioBufferedDebounceIn(&inBufferB, 3),
        ExioBufferedDebounceIn(&inBufferB, 4),
        ExioBufferedDebounceIn(&inBufferB, 5),
        ExioBufferedDebounceIn(&inBufferB, 6),
        ExioBufferedDebounceIn(&inBufferB, 7)
    };
    
    // Rotary Encoder
    ExioBufferedRotaryEncoder re1(&inBufferA, 0, 1);
    //ExioBufferedRotaryEncoder re2(&inBufferA, 2, 3);
    
    // Start Timers for polling MCP23S17
    inBufferA.run(5);
    inBufferB.run(10);
    
    // Start Timers for PinDetect
    pinA6.setSampleFrequency(10000);
    pinA7.setSampleFrequency(10000);
    
    // Start Timers for DebounceIn
    pinA2.set_debounce_us(10000);
    pinA3.set_debounce_us(10000);
    pinA4.set_debounce_us(10000);
    pinA5.set_debounce_us(10000);
    for (int i = 0; i < 8; i++) {
        inB[i].set_debounce_us(10000);
    }
    
    // Start Timers for RotaryEncoder
    re1.setInterval(1000);
    //re2.setInterval(1000);

    while(true) {
        int va2 = pinA2.read();
        int va3 = pinA3.read();
        int va4 = pinA4.read();
        int va5 = pinA5.read();
        int vre1 = re1.getVal();
        //int vre2 = re2.getVal();
        printf(" A2:%d A3:%d A4:%d A5:%d state:%d count:%d RE1:%d ", va2, va3, va4, va5, state, count, vre1);
        for (int i = 0; i < 8; i++) {
            int vb = inB[i].read();
            printf("%d ", vb);
        }
        printf("\r\n");
    }
}