Frances Tsenn / Mbed 2 deprecated ECE4180PianoTutorial

Dependencies:   mbed 4DGL-uLCD-SE MCP23S17

Committer:
ftsenn
Date:
Wed Nov 29 16:51:57 2017 +0000
Revision:
5:18a4d0822e89
Parent:
2:2ccb5a604e77
Child:
6:0af0e1b40538
lights LED based on expected bus inputs

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ftsenn 0:5d8ef6969179 1 #include "mbed.h"
ftsenn 0:5d8ef6969179 2
ftsenn 1:d182179e7c1b 3 BusIn rKeys(p16, p17, p18, p19, p20);
ftsenn 1:d182179e7c1b 4 BusIn cKeys(p28, p27, p26, p25, p24, p23, p22, p21);
ftsenn 0:5d8ef6969179 5
ftsenn 5:18a4d0822e89 6 SPI spiLeft(p5, p6, p7); //SI, SO, SCK
ftsenn 5:18a4d0822e89 7 SPI spiRight(p11, p12, p13);
ftsenn 5:18a4d0822e89 8
ftsenn 5:18a4d0822e89 9 char OpcodeLeft = 0x40;
ftsenn 5:18a4d0822e89 10 char OpcodeRight = 0x50;
ftsenn 5:18a4d0822e89 11
ftsenn 5:18a4d0822e89 12 // mbed p15 is connected to ~chipSelect on the MCP23S17
ftsenn 5:18a4d0822e89 13 MCP23S17 chipLeft = MCP23S17(spi, p15, OpcodeLeft);
ftsenn 5:18a4d0822e89 14
ftsenn 5:18a4d0822e89 15 // mbed p16 is connected to ~chipSelect on the MCP23S17
ftsenn 5:18a4d0822e89 16 MCP23S17 chipRight = MCP23S17(spi, p16, OpcodeRight);
ftsenn 2:2ccb5a604e77 17
ftsenn 0:5d8ef6969179 18 int main() {
ftsenn 1:d182179e7c1b 19 rKeys.mode(PullUp);
ftsenn 1:d182179e7c1b 20 cKeys.mode(PullUp);
ftsenn 1:d182179e7c1b 21
ftsenn 1:d182179e7c1b 22 int rNeeded = 0x0F;
ftsenn 1:d182179e7c1b 23 //options: 0001 1110 (0x1E), 0001 1101 (0x1D), 0001 1011 (0x1B), 0001 0111 (0x17), 0000 1111 (0x0F)
ftsenn 1:d182179e7c1b 24
ftsenn 1:d182179e7c1b 25 int cNeeded = 0xFE;
ftsenn 1:d182179e7c1b 26 //options: 1111 1110 (0xFE), 1111 1101 (0xFD), 1111 1011 (0xFB), 1111 0111 (0xF7),
ftsenn 1:d182179e7c1b 27 // 1110 1111 (0xEF), 1101 1111 (0xDF), 1011 1111 (0xBF), 0111 1111 (0x7F)
ftsenn 1:d182179e7c1b 28
ftsenn 5:18a4d0822e89 29 // Set all Port bits to output direction
ftsenn 5:18a4d0822e89 30 chipLeft.direction(PORT_A, 0x00);
ftsenn 5:18a4d0822e89 31 chipLeft.direction(PORT_B, 0x00);
ftsenn 5:18a4d0822e89 32 chipRight.direction(PORT_A, 0x00);
ftsenn 5:18a4d0822e89 33 chipRight.direction(PORT_B, 0x00);
ftsenn 5:18a4d0822e89 34
ftsenn 5:18a4d0822e89 35 //chip.write(PORT_A, 0x00);
ftsenn 5:18a4d0822e89 36
ftsenn 0:5d8ef6969179 37 while(1) {
ftsenn 1:d182179e7c1b 38 //check if it's the correct key
ftsenn 1:d182179e7c1b 39 if ((rKeys == rNeeded) & (cKeys == cNeeded)) {
ftsenn 1:d182179e7c1b 40 //get next note
ftsenn 5:18a4d0822e89 41 //rNeeded =
ftsenn 5:18a4d0822e89 42 //cNeeded =
ftsenn 5:18a4d0822e89 43
ftsenn 5:18a4d0822e89 44 if (cNeeded == 0x00) { //end song with cNeeded = 0x00
ftsenn 5:18a4d0822e89 45 //modify uLCD to signify that we're done
ftsenn 5:18a4d0822e89 46 break;
ftsenn 5:18a4d0822e89 47 }
ftsenn 1:d182179e7c1b 48
ftsenn 1:d182179e7c1b 49 //modify uLCD
ftsenn 1:d182179e7c1b 50
ftsenn 1:d182179e7c1b 51 //turn on correct LED
ftsenn 5:18a4d0822e89 52 switch (rNeeded) {
ftsenn 5:18a4d0822e89 53 case 0x1D:
ftsenn 5:18a4d0822e89 54 chipLeft.write(PORT_A, ~cNeeded);
ftsenn 5:18a4d0822e89 55 break;
ftsenn 5:18a4d0822e89 56 case 0x1B:
ftsenn 5:18a4d0822e89 57 chipLeft.write(PORT_B, ~cNeeded);
ftsenn 5:18a4d0822e89 58 break;
ftsenn 5:18a4d0822e89 59 case 0x17:
ftsenn 5:18a4d0822e89 60 chipRight.write(PORT_A, ~cNeeded);
ftsenn 5:18a4d0822e89 61 break;
ftsenn 5:18a4d0822e89 62 case 0x0F:
ftsenn 5:18a4d0822e89 63 chipRight.write(PORT_B, ~cNeeded);
ftsenn 5:18a4d0822e89 64 break;
ftsenn 5:18a4d0822e89 65 }
ftsenn 1:d182179e7c1b 66 }
ftsenn 0:5d8ef6969179 67 }
ftsenn 0:5d8ef6969179 68 }