Snake game for a 5x5 LED matrix

Dependencies:   MCP23S17 mbed

ledCube.cpp

Committer:
dhamilton31
Date:
2013-10-17
Revision:
1:5fcb94bb03db
Parent:
0:dc906408980e
Child:
2:9c075a0a6d4e

File content as of revision 1:5fcb94bb03db:

#include "mbed.h"
#include "ledCube.h"
#include "ledValues.h"
#include "MCP23S17.h"

// Set up the ledArray output pins
ledCube::ledCube()
{
    spi = new SPI(p11, p12, p13);
    char Opcode = 0x40; // Used to start the spi communication with the DIP
    chip = new MCP23S17(*spi, p20, Opcode);

    ledArray[0][0] = new DigitalOut(P000);
    ledArray[0][1] = new DigitalOut(P001);
    ledArray[0][2] = new DigitalOut(P002);
    ledArray[0][3] = new DigitalOut(P003);
    ledArray[0][4] = new DigitalOut(P004);
    ledArray[1][0] = new DigitalOut(P010);
    ledArray[1][1] = new DigitalOut(P011);
    ledArray[1][2] = new DigitalOut(P012);
    ledArray[1][3] = NULL;
    ledArray[1][4] = NULL;
    ledArray[2][0] = NULL;
    ledArray[2][1] = NULL;
    ledArray[2][2] = NULL;
    ledArray[2][3] = NULL;
    ledArray[2][4] = NULL;
    ledArray[3][0] = NULL;
    ledArray[3][1] = new DigitalOut(P031);
    ledArray[3][2] = new DigitalOut(P032);
    ledArray[3][3] = new DigitalOut(P033);
    ledArray[3][4] = new DigitalOut(P034);
    ledArray[4][0] = new DigitalOut(P040);
    ledArray[4][1] = new DigitalOut(P041);
    ledArray[4][2] = new DigitalOut(P042);
    ledArray[4][3] = new DigitalOut(P043);
    ledArray[4][4] = new DigitalOut(P044);
    //  Set all 8 Port A bits to output direction
    (*chip).direction(PORT_A, 0x00);
    //  Set all 8 Port B bits to output direction
    (*chip).direction(PORT_B, 0x00);
    lastLedLit = NULL;
    (*chip).write(PORT_A, spiCurrentlyLit);
}
// Light the LED at the specified row, column, layer coordinate
void ledCube::turnOnLed(char row, char column, char layer)
{
    if(ledArray[row][column] != NULL){
        *ledArray[row][column] = 1;
    }
    else{
        if( row == 1 && column == 3){
            spiCurrentlyLit |= 0x01;   
        }
        else if(row == 1 && column == 4){
            spiCurrentlyLit |= 0x02;
        }
        else if(row == 2 && column == 0){
            spiCurrentlyLit |= 0x04;
        }
        else if(row == 2 && column == 1){
            spiCurrentlyLit |= 0x08;
        }
        else if(row == 2 && column == 2){
            spiCurrentlyLit |= 0x10;
        }
        else if(row == 2 && column == 3){
            spiCurrentlyLit |= 0x20;
        }
        else if(row == 2 && column == 4){
            spiCurrentlyLit |= 0x40;
        }
        else if(row == 3 && column == 0){
            spiCurrentlyLit |= 0x80;
        }
        (*chip).write(PORT_A, spiCurrentlyLit);
    }
}

void ledCube::turnOffLed(char row, char column, char layer)
{
    if(ledArray[row][column] != NULL){
        *ledArray[row][column] = 0;
    }
    else{
        if( row == 1 && column == 3){
            spiCurrentlyLit &= ~(0x01);   
        }
        else if(row == 1 && column == 4){
            spiCurrentlyLit &= ~(0x02);
        }
        else if(row == 2 && column == 0){
            spiCurrentlyLit &= ~(0x04);
        }
        else if(row == 2 && column == 1){
            spiCurrentlyLit &= ~(0x08);
        }
        else if(row == 2 && column == 2){
            spiCurrentlyLit &= ~(0x10);
        }
        else if(row == 2 && column == 3){
            spiCurrentlyLit &= ~(0x20);
        }
        else if(row == 2 && column == 4){
            spiCurrentlyLit &= ~(0x40);
        }
        else if(row == 3 && column == 0){
            spiCurrentlyLit &= ~(0x80);
        }
        (*chip).write(PORT_A, spiCurrentlyLit);
    }
}

void ledCube::blink()
{
    for(char i = 0; i < 5; i++) {
        for(char j = 0; j < 5; j++) {
            turnOnLed(i,j,0);
        }
    }
    wait(.3);
    for(char i = 0; i < 5; i++) {
        for(char j = 0; j < 5; j++) {
            turnOffLed(i,j,0);
        }
    }
}