Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed 4DGL-uLCD-SE MCP23S17
main.cpp@5:18a4d0822e89, 2017-11-29 (annotated)
- 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?
| User | Revision | Line number | New 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 | } |
