Snake game for a 5x5 LED matrix

Dependencies:   MCP23S17 mbed

Committer:
dhamilton31
Date:
Thu Oct 17 04:32:58 2013 +0000
Revision:
1:5fcb94bb03db
Parent:
0:dc906408980e
Child:
2:9c075a0a6d4e
Changes to just about everything

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dhamilton31 1:5fcb94bb03db 1 #include "mbed.h"
dhamilton31 0:dc906408980e 2 #include "ledCube.h"
dhamilton31 0:dc906408980e 3 #include "ledValues.h"
dhamilton31 1:5fcb94bb03db 4 #include "MCP23S17.h"
dhamilton31 0:dc906408980e 5
dhamilton31 0:dc906408980e 6 // Set up the ledArray output pins
dhamilton31 1:5fcb94bb03db 7 ledCube::ledCube()
dhamilton31 1:5fcb94bb03db 8 {
dhamilton31 1:5fcb94bb03db 9 spi = new SPI(p11, p12, p13);
dhamilton31 1:5fcb94bb03db 10 char Opcode = 0x40; // Used to start the spi communication with the DIP
dhamilton31 1:5fcb94bb03db 11 chip = new MCP23S17(*spi, p20, Opcode);
dhamilton31 1:5fcb94bb03db 12
dhamilton31 0:dc906408980e 13 ledArray[0][0] = new DigitalOut(P000);
dhamilton31 0:dc906408980e 14 ledArray[0][1] = new DigitalOut(P001);
dhamilton31 0:dc906408980e 15 ledArray[0][2] = new DigitalOut(P002);
dhamilton31 0:dc906408980e 16 ledArray[0][3] = new DigitalOut(P003);
dhamilton31 0:dc906408980e 17 ledArray[0][4] = new DigitalOut(P004);
dhamilton31 0:dc906408980e 18 ledArray[1][0] = new DigitalOut(P010);
dhamilton31 0:dc906408980e 19 ledArray[1][1] = new DigitalOut(P011);
dhamilton31 0:dc906408980e 20 ledArray[1][2] = new DigitalOut(P012);
dhamilton31 1:5fcb94bb03db 21 ledArray[1][3] = NULL;
dhamilton31 1:5fcb94bb03db 22 ledArray[1][4] = NULL;
dhamilton31 1:5fcb94bb03db 23 ledArray[2][0] = NULL;
dhamilton31 1:5fcb94bb03db 24 ledArray[2][1] = NULL;
dhamilton31 1:5fcb94bb03db 25 ledArray[2][2] = NULL;
dhamilton31 1:5fcb94bb03db 26 ledArray[2][3] = NULL;
dhamilton31 1:5fcb94bb03db 27 ledArray[2][4] = NULL;
dhamilton31 1:5fcb94bb03db 28 ledArray[3][0] = NULL;
dhamilton31 0:dc906408980e 29 ledArray[3][1] = new DigitalOut(P031);
dhamilton31 0:dc906408980e 30 ledArray[3][2] = new DigitalOut(P032);
dhamilton31 0:dc906408980e 31 ledArray[3][3] = new DigitalOut(P033);
dhamilton31 0:dc906408980e 32 ledArray[3][4] = new DigitalOut(P034);
dhamilton31 0:dc906408980e 33 ledArray[4][0] = new DigitalOut(P040);
dhamilton31 0:dc906408980e 34 ledArray[4][1] = new DigitalOut(P041);
dhamilton31 0:dc906408980e 35 ledArray[4][2] = new DigitalOut(P042);
dhamilton31 0:dc906408980e 36 ledArray[4][3] = new DigitalOut(P043);
dhamilton31 0:dc906408980e 37 ledArray[4][4] = new DigitalOut(P044);
dhamilton31 1:5fcb94bb03db 38 // Set all 8 Port A bits to output direction
dhamilton31 1:5fcb94bb03db 39 (*chip).direction(PORT_A, 0x00);
dhamilton31 1:5fcb94bb03db 40 // Set all 8 Port B bits to output direction
dhamilton31 1:5fcb94bb03db 41 (*chip).direction(PORT_B, 0x00);
dhamilton31 0:dc906408980e 42 lastLedLit = NULL;
dhamilton31 1:5fcb94bb03db 43 (*chip).write(PORT_A, spiCurrentlyLit);
dhamilton31 1:5fcb94bb03db 44 }
dhamilton31 1:5fcb94bb03db 45 // Light the LED at the specified row, column, layer coordinate
dhamilton31 1:5fcb94bb03db 46 void ledCube::turnOnLed(char row, char column, char layer)
dhamilton31 1:5fcb94bb03db 47 {
dhamilton31 1:5fcb94bb03db 48 if(ledArray[row][column] != NULL){
dhamilton31 1:5fcb94bb03db 49 *ledArray[row][column] = 1;
dhamilton31 1:5fcb94bb03db 50 }
dhamilton31 1:5fcb94bb03db 51 else{
dhamilton31 1:5fcb94bb03db 52 if( row == 1 && column == 3){
dhamilton31 1:5fcb94bb03db 53 spiCurrentlyLit |= 0x01;
dhamilton31 1:5fcb94bb03db 54 }
dhamilton31 1:5fcb94bb03db 55 else if(row == 1 && column == 4){
dhamilton31 1:5fcb94bb03db 56 spiCurrentlyLit |= 0x02;
dhamilton31 1:5fcb94bb03db 57 }
dhamilton31 1:5fcb94bb03db 58 else if(row == 2 && column == 0){
dhamilton31 1:5fcb94bb03db 59 spiCurrentlyLit |= 0x04;
dhamilton31 1:5fcb94bb03db 60 }
dhamilton31 1:5fcb94bb03db 61 else if(row == 2 && column == 1){
dhamilton31 1:5fcb94bb03db 62 spiCurrentlyLit |= 0x08;
dhamilton31 1:5fcb94bb03db 63 }
dhamilton31 1:5fcb94bb03db 64 else if(row == 2 && column == 2){
dhamilton31 1:5fcb94bb03db 65 spiCurrentlyLit |= 0x10;
dhamilton31 1:5fcb94bb03db 66 }
dhamilton31 1:5fcb94bb03db 67 else if(row == 2 && column == 3){
dhamilton31 1:5fcb94bb03db 68 spiCurrentlyLit |= 0x20;
dhamilton31 1:5fcb94bb03db 69 }
dhamilton31 1:5fcb94bb03db 70 else if(row == 2 && column == 4){
dhamilton31 1:5fcb94bb03db 71 spiCurrentlyLit |= 0x40;
dhamilton31 1:5fcb94bb03db 72 }
dhamilton31 1:5fcb94bb03db 73 else if(row == 3 && column == 0){
dhamilton31 1:5fcb94bb03db 74 spiCurrentlyLit |= 0x80;
dhamilton31 1:5fcb94bb03db 75 }
dhamilton31 1:5fcb94bb03db 76 (*chip).write(PORT_A, spiCurrentlyLit);
dhamilton31 1:5fcb94bb03db 77 }
dhamilton31 0:dc906408980e 78 }
dhamilton31 0:dc906408980e 79
dhamilton31 1:5fcb94bb03db 80 void ledCube::turnOffLed(char row, char column, char layer)
dhamilton31 1:5fcb94bb03db 81 {
dhamilton31 1:5fcb94bb03db 82 if(ledArray[row][column] != NULL){
dhamilton31 1:5fcb94bb03db 83 *ledArray[row][column] = 0;
dhamilton31 1:5fcb94bb03db 84 }
dhamilton31 1:5fcb94bb03db 85 else{
dhamilton31 1:5fcb94bb03db 86 if( row == 1 && column == 3){
dhamilton31 1:5fcb94bb03db 87 spiCurrentlyLit &= ~(0x01);
dhamilton31 1:5fcb94bb03db 88 }
dhamilton31 1:5fcb94bb03db 89 else if(row == 1 && column == 4){
dhamilton31 1:5fcb94bb03db 90 spiCurrentlyLit &= ~(0x02);
dhamilton31 1:5fcb94bb03db 91 }
dhamilton31 1:5fcb94bb03db 92 else if(row == 2 && column == 0){
dhamilton31 1:5fcb94bb03db 93 spiCurrentlyLit &= ~(0x04);
dhamilton31 1:5fcb94bb03db 94 }
dhamilton31 1:5fcb94bb03db 95 else if(row == 2 && column == 1){
dhamilton31 1:5fcb94bb03db 96 spiCurrentlyLit &= ~(0x08);
dhamilton31 1:5fcb94bb03db 97 }
dhamilton31 1:5fcb94bb03db 98 else if(row == 2 && column == 2){
dhamilton31 1:5fcb94bb03db 99 spiCurrentlyLit &= ~(0x10);
dhamilton31 1:5fcb94bb03db 100 }
dhamilton31 1:5fcb94bb03db 101 else if(row == 2 && column == 3){
dhamilton31 1:5fcb94bb03db 102 spiCurrentlyLit &= ~(0x20);
dhamilton31 1:5fcb94bb03db 103 }
dhamilton31 1:5fcb94bb03db 104 else if(row == 2 && column == 4){
dhamilton31 1:5fcb94bb03db 105 spiCurrentlyLit &= ~(0x40);
dhamilton31 1:5fcb94bb03db 106 }
dhamilton31 1:5fcb94bb03db 107 else if(row == 3 && column == 0){
dhamilton31 1:5fcb94bb03db 108 spiCurrentlyLit &= ~(0x80);
dhamilton31 1:5fcb94bb03db 109 }
dhamilton31 1:5fcb94bb03db 110 (*chip).write(PORT_A, spiCurrentlyLit);
dhamilton31 1:5fcb94bb03db 111 }
dhamilton31 0:dc906408980e 112 }
dhamilton31 0:dc906408980e 113
dhamilton31 1:5fcb94bb03db 114 void ledCube::blink()
dhamilton31 1:5fcb94bb03db 115 {
dhamilton31 1:5fcb94bb03db 116 for(char i = 0; i < 5; i++) {
dhamilton31 1:5fcb94bb03db 117 for(char j = 0; j < 5; j++) {
dhamilton31 1:5fcb94bb03db 118 turnOnLed(i,j,0);
dhamilton31 1:5fcb94bb03db 119 }
dhamilton31 1:5fcb94bb03db 120 }
dhamilton31 1:5fcb94bb03db 121 wait(.3);
dhamilton31 1:5fcb94bb03db 122 for(char i = 0; i < 5; i++) {
dhamilton31 1:5fcb94bb03db 123 for(char j = 0; j < 5; j++) {
dhamilton31 1:5fcb94bb03db 124 turnOffLed(i,j,0);
dhamilton31 1:5fcb94bb03db 125 }
dhamilton31 1:5fcb94bb03db 126 }
dhamilton31 0:dc906408980e 127 }