Rob Toulson / Mbed 2 deprecated PE_07-06_I2CSlave

Dependencies:   mbed

Committer:
robt
Date:
Mon Oct 15 21:26:18 2012 +0000
Revision:
0:fa5e89cbad4d
by Rob Toulson and Tim Wilmshurst from textbook "Fast and Effective Embedded Systems Design: Applying the ARM mbed"

Who changed what in which revision?

UserRevisionLine numberNew contents of line
robt 0:fa5e89cbad4d 1 /*Program Example 7.6: I2C Slave, when called transfers switch state to mbed acting as Master, and displays state of Master's switches on its leds.
robt 0:fa5e89cbad4d 2 */
robt 0:fa5e89cbad4d 3
robt 0:fa5e89cbad4d 4 #include <mbed.h>
robt 0:fa5e89cbad4d 5 I2CSlave slave(p9, p10); //Configure I2C slave
robt 0:fa5e89cbad4d 6 DigitalOut red_led(p25); //red led
robt 0:fa5e89cbad4d 7 DigitalOut green_led(p26); //green led
robt 0:fa5e89cbad4d 8 DigitalIn switch_ip1(p5);
robt 0:fa5e89cbad4d 9 DigitalIn switch_ip2(p6);
robt 0:fa5e89cbad4d 10 char switch_word ; //word we will send
robt 0:fa5e89cbad4d 11 char recd_val; //value received from master
robt 0:fa5e89cbad4d 12
robt 0:fa5e89cbad4d 13 int main()
robt 0:fa5e89cbad4d 14 {
robt 0:fa5e89cbad4d 15 slave.address(0x52);
robt 0:fa5e89cbad4d 16 while (1) {
robt 0:fa5e89cbad4d 17 //set up switch_word from switches that are pressed
robt 0:fa5e89cbad4d 18 switch_word=0xa0; //set up a recognisable output pattern
robt 0:fa5e89cbad4d 19 if (switch_ip1==1)
robt 0:fa5e89cbad4d 20 switch_word=switch_word|0x01;
robt 0:fa5e89cbad4d 21 if (switch_ip2==1)
robt 0:fa5e89cbad4d 22 switch_word=switch_word|0x02;
robt 0:fa5e89cbad4d 23 slave.write(switch_word); //load up word to send
robt 0:fa5e89cbad4d 24 //test for I2C, and act accordingly
robt 0:fa5e89cbad4d 25 int i = slave.receive();
robt 0:fa5e89cbad4d 26 if (i == 3) { //slave is addressed, Master will write
robt 0:fa5e89cbad4d 27 recd_val= slave.read();
robt 0:fa5e89cbad4d 28 }
robt 0:fa5e89cbad4d 29 //set leds according to incoming word from slave
robt 0:fa5e89cbad4d 30 red_led=0; //preset both to 0
robt 0:fa5e89cbad4d 31 green_led=0;
robt 0:fa5e89cbad4d 32 recd_val=recd_val&0x03; //AND out unwanted bits
robt 0:fa5e89cbad4d 33 if (recd_val==1)
robt 0:fa5e89cbad4d 34 red_led=1;
robt 0:fa5e89cbad4d 35 if (recd_val==2)
robt 0:fa5e89cbad4d 36 green_led=1;
robt 0:fa5e89cbad4d 37 if (recd_val==3) {
robt 0:fa5e89cbad4d 38 red_led=1;
robt 0:fa5e89cbad4d 39 green_led=1;
robt 0:fa5e89cbad4d 40 }
robt 0:fa5e89cbad4d 41 }
robt 0:fa5e89cbad4d 42 }
robt 0:fa5e89cbad4d 43