Snake game for a 5x5 LED matrix
ledCube.cpp@2:9c075a0a6d4e, 2013-10-17 (annotated)
- 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?
User | Revision | Line number | New 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 | } |