Project for playing a song on 2 meeds sending notes over I2C

Dependencies:   C12832 mbed

Committer:
jad19925
Date:
Thu Feb 13 22:54:56 2014 +0000
Revision:
5:432203c226ed
Parent:
4:bd0675c58f5e
Child:
6:84c34161559e
Sending Songs works

Who changed what in which revision?

UserRevisionLine numberNew 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 5:432203c226ed 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 5:432203c226ed 25 char 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 5:432203c226ed 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 5:432203c226ed 52 } else {
jad19925 1:feca2dfd8753 53 leds=joy;
jad19925 1:feca2dfd8753 54 #ifdef MASTER
jad19925 5:432203c226ed 55 if(up) {
jad19925 5:432203c226ed 56 //master sends its song to slave
jad19925 4:bd0675c58f5e 57 i2cPort.start();
jad19925 4:bd0675c58f5e 58 //send address
jad19925 4:bd0675c58f5e 59 i2cPort.write(slaveAddress);
jad19925 4:bd0675c58f5e 60 //send tempo (BPM)
jad19925 4:bd0675c58f5e 61 //loop through song
jad19925 5:432203c226ed 62 for(int i=0;i<50/*(sizeof(marioNotes)/sizeof(NoteName))*/;i++){
jad19925 5:432203c226ed 63 if(marioNotes[i] == R) {
jad19925 5:432203c226ed 64 i2cPort.write(R);
jad19925 5:432203c226ed 65 spkr=0.0;
jad19925 5:432203c226ed 66 wait(.7*marioBeats[i]/12);
jad19925 5:432203c226ed 67 }
jad19925 5:432203c226ed 68 else{
jad19925 5:432203c226ed 69 i2cPort.write(marioNotes[i]);
jad19925 5:432203c226ed 70 spkr.period(1/(notes[marioNotes[i]]));
jad19925 5:432203c226ed 71 spkr=.5;
jad19925 5:432203c226ed 72 wait(.7*marioBeats[i]/12);
jad19925 5:432203c226ed 73 spkr=0.0;
jad19925 5:432203c226ed 74 }
jad19925 5:432203c226ed 75 }
jad19925 5:432203c226ed 76 spkr=0.0;
jad19925 5:432203c226ed 77 //send stop code
jad19925 5:432203c226ed 78 i2cPort.write(0xFF);
jad19925 5:432203c226ed 79 wait(.5);
jad19925 4:bd0675c58f5e 80 //close i2c port
jad19925 4:bd0675c58f5e 81 i2cPort.stop();
jad19925 5:432203c226ed 82 } else if(down) {
jad19925 5:432203c226ed 83 //slave should send it's song to master
jad19925 5:432203c226ed 84 i2cPort.start();
jad19925 5:432203c226ed 85 //send address with read command
jad19925 5:432203c226ed 86 i2cPort.write(slaveAddress|0x01);
jad19925 1:feca2dfd8753 87
jad19925 5:432203c226ed 88 do {
jad19925 5:432203c226ed 89 received = i2cPort.read(1);
jad19925 5:432203c226ed 90 spkr=0.0;
jad19925 5:432203c226ed 91 if(received == R) {
jad19925 5:432203c226ed 92 spkr=0.0;
jad19925 5:432203c226ed 93 }
jad19925 5:432203c226ed 94 else{
jad19925 5:432203c226ed 95 spkr.period(1/(notes[received]));
jad19925 5:432203c226ed 96 spkr=.5;
jad19925 5:432203c226ed 97 }
jad19925 5:432203c226ed 98 lcd.cls();
jad19925 5:432203c226ed 99 lcd.locate(0,0);
jad19925 5:432203c226ed 100 lcd.printf("Received: %d",received);
jad19925 5:432203c226ed 101 } while(received != 0xFF);
jad19925 5:432203c226ed 102
jad19925 5:432203c226ed 103 lcd.cls();
jad19925 5:432203c226ed 104 lcd.locate(0,0);
jad19925 5:432203c226ed 105 lcd.printf("done");
jad19925 5:432203c226ed 106 i2cPort.stop();
jad19925 1:feca2dfd8753 107 }
jad19925 4:bd0675c58f5e 108 #endif
jad19925 4:bd0675c58f5e 109 #ifdef SLAVE
jad19925 4:bd0675c58f5e 110 received = slave.receive();
jad19925 5:432203c226ed 111 if(I2CSlave::ReadAddressed==received) { //master is requesting slave song
jad19925 5:432203c226ed 112 for(int i=0;i<50/*(sizeof(marioNotes)/sizeof(NoteName))*/;i++){
jad19925 5:432203c226ed 113 if(marioNotes[i] == R) {
jad19925 5:432203c226ed 114 slave.write(R);
jad19925 5:432203c226ed 115 spkr=0.0;
jad19925 5:432203c226ed 116 wait(.7*marioBeats[i]/12);
jad19925 5:432203c226ed 117 }
jad19925 5:432203c226ed 118 else{
jad19925 5:432203c226ed 119 slave.write(marioNotes[i]);
jad19925 5:432203c226ed 120 spkr.period(1/(notes[marioNotes[i]]));
jad19925 5:432203c226ed 121 spkr=.5;
jad19925 5:432203c226ed 122 wait(.7*marioBeats[i]/12);
jad19925 5:432203c226ed 123 spkr=0.0;
jad19925 5:432203c226ed 124 }
jad19925 5:432203c226ed 125 }
jad19925 5:432203c226ed 126 spkr=0.0;
jad19925 5:432203c226ed 127 slave.write(0xFF);
jad19925 5:432203c226ed 128 slave.stop();
jad19925 4:bd0675c58f5e 129 }
jad19925 5:432203c226ed 130 else if(I2CSlave::WriteAddressed==received) { //master is sending its song
jad19925 5:432203c226ed 131 do {
jad19925 5:432203c226ed 132 received = slave.read();
jad19925 5:432203c226ed 133 spkr=0.0;
jad19925 5:432203c226ed 134 if(received == R) {
jad19925 5:432203c226ed 135 spkr=0.0;
jad19925 5:432203c226ed 136 }
jad19925 5:432203c226ed 137 else{
jad19925 5:432203c226ed 138 spkr.period(1/(notes[received]));
jad19925 5:432203c226ed 139 spkr=.5;
jad19925 5:432203c226ed 140 }
jad19925 5:432203c226ed 141 lcd.cls();
jad19925 5:432203c226ed 142 lcd.locate(0,0);
jad19925 5:432203c226ed 143 lcd.printf("Received: %d",received);
jad19925 5:432203c226ed 144 } while(received != 0xFF);
jad19925 4:bd0675c58f5e 145 lcd.cls();
jad19925 4:bd0675c58f5e 146 lcd.locate(0,0);
jad19925 5:432203c226ed 147 lcd.printf("done");
jad19925 5:432203c226ed 148 slave.stop();
jad19925 4:bd0675c58f5e 149 }
jad19925 5:432203c226ed 150 lcd.cls();
jad19925 5:432203c226ed 151 lcd.locate(0,0);
jad19925 5:432203c226ed 152 lcd.printf("%d",received);
jad19925 1:feca2dfd8753 153 #endif
jad19925 1:feca2dfd8753 154 }
jad19925 0:db7b3841b98f 155 }
jad19925 0:db7b3841b98f 156 }