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.
main.cpp@0:fa5e89cbad4d, 2012-10-15 (annotated)
- 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?
User | Revision | Line number | New 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 |