Jacob Dahleen
/
I2CSong
Project for playing a song on 2 meeds sending notes over I2C
main.cpp@4:bd0675c58f5e, 2014-02-13 (annotated)
- Committer:
- jad19925
- Date:
- Thu Feb 13 21:21:44 2014 +0000
- Revision:
- 4:bd0675c58f5e
- Parent:
- 3:eb63ba24e2bb
- Child:
- 5:432203c226ed
I2C basic send
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jad19925 | 0:db7b3841b98f | 1 | #include "mbed.h" |
jad19925 | 0:db7b3841b98f | 2 | #include "C12832.h" |
jad19925 | 1:feca2dfd8753 | 3 | #include "mario.h" |
jad19925 | 0:db7b3841b98f | 4 | |
jad19925 | 2:c35c40bae96e | 5 | #define MASTER |
jad19925 | 2:c35c40bae96e | 6 | //#define SLAVE |
jad19925 | 2:c35c40bae96e | 7 | |
jad19925 | 0:db7b3841b98f | 8 | BusIn joy(p15,p12,p13,p16); |
jad19925 | 0:db7b3841b98f | 9 | DigitalIn fire(p14); |
jad19925 | 0:db7b3841b98f | 10 | PwmOut spkr(p26); |
jad19925 | 0:db7b3841b98f | 11 | C12832 lcd(p5, p7, p6, p8, p11); |
jad19925 | 0:db7b3841b98f | 12 | DigitalIn up(p15); |
jad19925 | 0:db7b3841b98f | 13 | DigitalIn down(p12); |
jad19925 | 3:eb63ba24e2bb | 14 | BusOut leds(LED1,LED2,LED3,LED4); |
jad19925 | 0:db7b3841b98f | 15 | |
jad19925 | 4:bd0675c58f5e | 16 | #ifdef MASTER |
jad19925 | 3:eb63ba24e2bb | 17 | I2C i2cPort(p9,p10); |
jad19925 | 4:bd0675c58f5e | 18 | #endif |
jad19925 | 4:bd0675c58f5e | 19 | #ifdef SLAVE |
jad19925 | 4:bd0675c58f5e | 20 | I2CSlave slave(p9,p10); |
jad19925 | 4:bd0675c58f5e | 21 | #endif |
jad19925 | 3:eb63ba24e2bb | 22 | char note; |
jad19925 | 3:eb63ba24e2bb | 23 | char length; |
jad19925 | 4:bd0675c58f5e | 24 | const int slaveAddress = 0x42; |
jad19925 | 4:bd0675c58f5e | 25 | int received = 0; |
jad19925 | 0:db7b3841b98f | 26 | |
jad19925 | 0:db7b3841b98f | 27 | int main() |
jad19925 | 0:db7b3841b98f | 28 | { |
jad19925 | 4:bd0675c58f5e | 29 | #ifdef SLAVE |
jad19925 | 4:bd0675c58f5e | 30 | slave.address(slaveAddress); |
jad19925 | 4:bd0675c58f5e | 31 | #endif |
jad19925 | 0:db7b3841b98f | 32 | lcd.cls(); |
jad19925 | 0:db7b3841b98f | 33 | lcd.printf("hello world"); |
jad19925 | 0:db7b3841b98f | 34 | |
jad19925 | 0:db7b3841b98f | 35 | while(1) { |
jad19925 | 0:db7b3841b98f | 36 | if (fire) { |
jad19925 | 0:db7b3841b98f | 37 | leds=0xf; |
jad19925 | 0:db7b3841b98f | 38 | for(int i=0;i<(sizeof(marioNotes)/sizeof(NoteName));i++){ |
jad19925 | 0:db7b3841b98f | 39 | if(marioNotes[i] == R) { |
jad19925 | 0:db7b3841b98f | 40 | spkr=0.0; |
jad19925 | 1:feca2dfd8753 | 41 | wait(.7*marioBeats[i]/12); |
jad19925 | 0:db7b3841b98f | 42 | } |
jad19925 | 0:db7b3841b98f | 43 | else{ |
jad19925 | 1:feca2dfd8753 | 44 | spkr.period(1/(notes[marioNotes[i]])); |
jad19925 | 0:db7b3841b98f | 45 | spkr=.5; |
jad19925 | 1:feca2dfd8753 | 46 | wait(.7*marioBeats[i]/12); |
jad19925 | 0:db7b3841b98f | 47 | spkr=0.0; |
jad19925 | 0:db7b3841b98f | 48 | } |
jad19925 | 0:db7b3841b98f | 49 | } |
jad19925 | 0:db7b3841b98f | 50 | spkr=0.0; |
jad19925 | 0:db7b3841b98f | 51 | //end speaker code |
jad19925 | 0:db7b3841b98f | 52 | } |
jad19925 | 1:feca2dfd8753 | 53 | else |
jad19925 | 1:feca2dfd8753 | 54 | { |
jad19925 | 1:feca2dfd8753 | 55 | leds=joy; |
jad19925 | 1:feca2dfd8753 | 56 | #ifdef MASTER |
jad19925 | 3:eb63ba24e2bb | 57 | if(up) |
jad19925 | 3:eb63ba24e2bb | 58 | {//master sends its song to slave |
jad19925 | 4:bd0675c58f5e | 59 | i2cPort.start(); |
jad19925 | 4:bd0675c58f5e | 60 | //send address |
jad19925 | 4:bd0675c58f5e | 61 | i2cPort.write(slaveAddress); |
jad19925 | 4:bd0675c58f5e | 62 | //send tempo (BPM) |
jad19925 | 4:bd0675c58f5e | 63 | //loop through song |
jad19925 | 4:bd0675c58f5e | 64 | i2cPort.write(6); |
jad19925 | 4:bd0675c58f5e | 65 | // for(char j=0;j<10;j++) |
jad19925 | 4:bd0675c58f5e | 66 | // { |
jad19925 | 4:bd0675c58f5e | 67 | // //send frequency |
jad19925 | 4:bd0675c58f5e | 68 | // i2cPort.write(j); |
jad19925 | 4:bd0675c58f5e | 69 | // //play note |
jad19925 | 4:bd0675c58f5e | 70 | // //wait length |
jad19925 | 4:bd0675c58f5e | 71 | // wait(1); |
jad19925 | 4:bd0675c58f5e | 72 | // } |
jad19925 | 4:bd0675c58f5e | 73 | // //send stop code |
jad19925 | 4:bd0675c58f5e | 74 | // i2cPort.write(0xFF); |
jad19925 | 4:bd0675c58f5e | 75 | //close i2c port |
jad19925 | 4:bd0675c58f5e | 76 | i2cPort.stop(); |
jad19925 | 1:feca2dfd8753 | 77 | } |
jad19925 | 3:eb63ba24e2bb | 78 | else if(down) |
jad19925 | 3:eb63ba24e2bb | 79 | {//slave should send it's song to master |
jad19925 | 1:feca2dfd8753 | 80 | |
jad19925 | 1:feca2dfd8753 | 81 | } |
jad19925 | 4:bd0675c58f5e | 82 | #endif |
jad19925 | 4:bd0675c58f5e | 83 | #ifdef SLAVE |
jad19925 | 4:bd0675c58f5e | 84 | received = slave.receive(); |
jad19925 | 4:bd0675c58f5e | 85 | if(I2CSlave::ReadAddressed==received){//master is requesting slave song |
jad19925 | 4:bd0675c58f5e | 86 | |
jad19925 | 4:bd0675c58f5e | 87 | } |
jad19925 | 4:bd0675c58f5e | 88 | else if(I2CSlave::WriteAddressed==received){//master is sending its song |
jad19925 | 4:bd0675c58f5e | 89 | received = slave.read(); |
jad19925 | 4:bd0675c58f5e | 90 | lcd.cls(); |
jad19925 | 4:bd0675c58f5e | 91 | lcd.locate(0,0); |
jad19925 | 4:bd0675c58f5e | 92 | lcd.printf("Sent: %d",received); |
jad19925 | 4:bd0675c58f5e | 93 | } |
jad19925 | 1:feca2dfd8753 | 94 | #endif |
jad19925 | 1:feca2dfd8753 | 95 | } |
jad19925 | 0:db7b3841b98f | 96 | } |
jad19925 | 0:db7b3841b98f | 97 | } |