Snake game for a 5x5 LED matrix

Dependencies:   MCP23S17 mbed

Committer:
dhamilton31
Date:
Thu Oct 17 22:09:22 2013 +0000
Revision:
2:9c075a0a6d4e
Parent:
1:5fcb94bb03db
Changed one stupid thing (cube) to (*cube) and it worked :P

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 2:9c075a0a6d4e 38 spiCurrentlyLit = 0;
dhamilton31 1:5fcb94bb03db 39 // Set all 8 Port A bits to output direction
dhamilton31 1:5fcb94bb03db 40 (*chip).direction(PORT_A, 0x00);
dhamilton31 1:5fcb94bb03db 41 // Set all 8 Port B bits to output direction
dhamilton31 1:5fcb94bb03db 42 (*chip).direction(PORT_B, 0x00);
dhamilton31 0:dc906408980e 43 lastLedLit = NULL;
dhamilton31 1:5fcb94bb03db 44 (*chip).write(PORT_A, spiCurrentlyLit);
dhamilton31 1:5fcb94bb03db 45 }
dhamilton31 1:5fcb94bb03db 46 // Light the LED at the specified row, column, layer coordinate
dhamilton31 1:5fcb94bb03db 47 void ledCube::turnOnLed(char row, char column, char layer)
dhamilton31 1:5fcb94bb03db 48 {
dhamilton31 1:5fcb94bb03db 49 if(ledArray[row][column] != NULL){
dhamilton31 1:5fcb94bb03db 50 *ledArray[row][column] = 1;
dhamilton31 1:5fcb94bb03db 51 }
dhamilton31 2:9c075a0a6d4e 52 // This else handles cases where the LEDs are handled by the I/O extender
dhamilton31 1:5fcb94bb03db 53 else{
dhamilton31 2:9c075a0a6d4e 54 //printf("before on-spiCurrentlyLit: %d turn on Row: %d Col: %d \n", spiCurrentlyLit, row, column);
dhamilton31 1:5fcb94bb03db 55 if( row == 1 && column == 3){
dhamilton31 1:5fcb94bb03db 56 spiCurrentlyLit |= 0x01;
dhamilton31 1:5fcb94bb03db 57 }
dhamilton31 1:5fcb94bb03db 58 else if(row == 1 && column == 4){
dhamilton31 1:5fcb94bb03db 59 spiCurrentlyLit |= 0x02;
dhamilton31 1:5fcb94bb03db 60 }
dhamilton31 1:5fcb94bb03db 61 else if(row == 2 && column == 0){
dhamilton31 1:5fcb94bb03db 62 spiCurrentlyLit |= 0x04;
dhamilton31 1:5fcb94bb03db 63 }
dhamilton31 1:5fcb94bb03db 64 else if(row == 2 && column == 1){
dhamilton31 1:5fcb94bb03db 65 spiCurrentlyLit |= 0x08;
dhamilton31 1:5fcb94bb03db 66 }
dhamilton31 1:5fcb94bb03db 67 else if(row == 2 && column == 2){
dhamilton31 1:5fcb94bb03db 68 spiCurrentlyLit |= 0x10;
dhamilton31 1:5fcb94bb03db 69 }
dhamilton31 1:5fcb94bb03db 70 else if(row == 2 && column == 3){
dhamilton31 1:5fcb94bb03db 71 spiCurrentlyLit |= 0x20;
dhamilton31 1:5fcb94bb03db 72 }
dhamilton31 1:5fcb94bb03db 73 else if(row == 2 && column == 4){
dhamilton31 1:5fcb94bb03db 74 spiCurrentlyLit |= 0x40;
dhamilton31 1:5fcb94bb03db 75 }
dhamilton31 1:5fcb94bb03db 76 else if(row == 3 && column == 0){
dhamilton31 1:5fcb94bb03db 77 spiCurrentlyLit |= 0x80;
dhamilton31 1:5fcb94bb03db 78 }
dhamilton31 1:5fcb94bb03db 79 (*chip).write(PORT_A, spiCurrentlyLit);
dhamilton31 1:5fcb94bb03db 80 }
dhamilton31 0:dc906408980e 81 }
dhamilton31 0:dc906408980e 82
dhamilton31 2:9c075a0a6d4e 83 // Turns off the LED at the specified row and column
dhamilton31 1:5fcb94bb03db 84 void ledCube::turnOffLed(char row, char column, char layer)
dhamilton31 1:5fcb94bb03db 85 {
dhamilton31 1:5fcb94bb03db 86 if(ledArray[row][column] != NULL){
dhamilton31 1:5fcb94bb03db 87 *ledArray[row][column] = 0;
dhamilton31 1:5fcb94bb03db 88 }
dhamilton31 2:9c075a0a6d4e 89 // This else handles cases where the LEDs are handled by the I/O extender
dhamilton31 1:5fcb94bb03db 90 else{
dhamilton31 2:9c075a0a6d4e 91 //printf("before: off-spiCurrentlyLit: %d turn off Row: %d Col: %d \n", spiCurrentlyLit, row, column);
dhamilton31 1:5fcb94bb03db 92 if( row == 1 && column == 3){
dhamilton31 1:5fcb94bb03db 93 spiCurrentlyLit &= ~(0x01);
dhamilton31 1:5fcb94bb03db 94 }
dhamilton31 1:5fcb94bb03db 95 else if(row == 1 && column == 4){
dhamilton31 1:5fcb94bb03db 96 spiCurrentlyLit &= ~(0x02);
dhamilton31 1:5fcb94bb03db 97 }
dhamilton31 1:5fcb94bb03db 98 else if(row == 2 && column == 0){
dhamilton31 1:5fcb94bb03db 99 spiCurrentlyLit &= ~(0x04);
dhamilton31 1:5fcb94bb03db 100 }
dhamilton31 1:5fcb94bb03db 101 else if(row == 2 && column == 1){
dhamilton31 1:5fcb94bb03db 102 spiCurrentlyLit &= ~(0x08);
dhamilton31 1:5fcb94bb03db 103 }
dhamilton31 1:5fcb94bb03db 104 else if(row == 2 && column == 2){
dhamilton31 1:5fcb94bb03db 105 spiCurrentlyLit &= ~(0x10);
dhamilton31 1:5fcb94bb03db 106 }
dhamilton31 1:5fcb94bb03db 107 else if(row == 2 && column == 3){
dhamilton31 1:5fcb94bb03db 108 spiCurrentlyLit &= ~(0x20);
dhamilton31 1:5fcb94bb03db 109 }
dhamilton31 1:5fcb94bb03db 110 else if(row == 2 && column == 4){
dhamilton31 1:5fcb94bb03db 111 spiCurrentlyLit &= ~(0x40);
dhamilton31 1:5fcb94bb03db 112 }
dhamilton31 1:5fcb94bb03db 113 else if(row == 3 && column == 0){
dhamilton31 1:5fcb94bb03db 114 spiCurrentlyLit &= ~(0x80);
dhamilton31 1:5fcb94bb03db 115 }
dhamilton31 1:5fcb94bb03db 116 (*chip).write(PORT_A, spiCurrentlyLit);
dhamilton31 1:5fcb94bb03db 117 }
dhamilton31 0:dc906408980e 118 }
dhamilton31 0:dc906408980e 119
dhamilton31 2:9c075a0a6d4e 120 // Blinks all the LEDs to indicate losing
dhamilton31 1:5fcb94bb03db 121 void ledCube::blink()
dhamilton31 1:5fcb94bb03db 122 {
dhamilton31 1:5fcb94bb03db 123 for(char i = 0; i < 5; i++) {
dhamilton31 1:5fcb94bb03db 124 for(char j = 0; j < 5; j++) {
dhamilton31 1:5fcb94bb03db 125 turnOnLed(i,j,0);
dhamilton31 1:5fcb94bb03db 126 }
dhamilton31 1:5fcb94bb03db 127 }
dhamilton31 2:9c075a0a6d4e 128 wait(.3);
dhamilton31 1:5fcb94bb03db 129 for(char i = 0; i < 5; i++) {
dhamilton31 1:5fcb94bb03db 130 for(char j = 0; j < 5; j++) {
dhamilton31 1:5fcb94bb03db 131 turnOffLed(i,j,0);
dhamilton31 1:5fcb94bb03db 132 }
dhamilton31 1:5fcb94bb03db 133 }
dhamilton31 2:9c075a0a6d4e 134 wait(.3);
dhamilton31 0:dc906408980e 135 }