Sille Van Landschoot / Mbed 2 deprecated mbed_slave_full

Dependencies:   mbed

Committer:
dwini
Date:
Mon Oct 13 13:31:30 2014 +0000
Revision:
1:e8ff4ff5a726
Parent:
0:e24b497adfce
Child:
2:49bb6ee1191c
Add alive LED

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dwini 0:e24b497adfce 1 #include "mbed.h"
dwini 0:e24b497adfce 2
dwini 1:e8ff4ff5a726 3 DigitalOut aLED(LED1);
dwini 0:e24b497adfce 4 Serial pc(USBTX, USBRX); // tx, rx
dwini 0:e24b497adfce 5 I2CSlave slave(p28, p27);
dwini 0:e24b497adfce 6
dwini 1:e8ff4ff5a726 7 const int SLAVE_ADDRESS = 0x84;
dwini 0:e24b497adfce 8 const int MEMORY_SIZE = 16;
dwini 0:e24b497adfce 9
dwini 0:e24b497adfce 10 int memory[MEMORY_SIZE];
dwini 0:e24b497adfce 11
dwini 0:e24b497adfce 12 void initializeMemory(void)
dwini 0:e24b497adfce 13 {
dwini 0:e24b497adfce 14 for (int i = 0; i < MEMORY_SIZE; i++) {
dwini 0:e24b497adfce 15 memory[i] = 0;
dwini 0:e24b497adfce 16 }
dwini 0:e24b497adfce 17 }
dwini 0:e24b497adfce 18
dwini 0:e24b497adfce 19 int main() {
dwini 0:e24b497adfce 20 pc.baud(115200);
dwini 0:e24b497adfce 21 pc.printf("I am the slave device (SLAVE_ADDRESS = 0x%x)\r\n", SLAVE_ADDRESS);
dwini 0:e24b497adfce 22 pc.printf("Size of integer is %d bytes\r\n", sizeof(int));
dwini 0:e24b497adfce 23 pc.printf("Size of memory buffer is %d elements\r\n", MEMORY_SIZE);
dwini 0:e24b497adfce 24
dwini 0:e24b497adfce 25 // Make sure memory buffer is zeroed
dwini 0:e24b497adfce 26 initializeMemory();
dwini 1:e8ff4ff5a726 27
dwini 1:e8ff4ff5a726 28 // Alive LED
dwini 1:e8ff4ff5a726 29 int cAlive = 0;
dwini 0:e24b497adfce 30
dwini 0:e24b497adfce 31
dwini 0:e24b497adfce 32 char buffer[10];
dwini 0:e24b497adfce 33 char msg[] = "Slave!";
dwini 0:e24b497adfce 34
dwini 0:e24b497adfce 35 slave.address(SLAVE_ADDRESS);
dwini 0:e24b497adfce 36
dwini 0:e24b497adfce 37 while (1) {
dwini 0:e24b497adfce 38 int i = slave.receive();
dwini 0:e24b497adfce 39 switch (i) {
dwini 0:e24b497adfce 40 case I2CSlave::ReadAddressed:
dwini 0:e24b497adfce 41 pc.printf("Slave received command: %d [ReadAddressed]\r\n", i);
dwini 0:e24b497adfce 42
dwini 0:e24b497adfce 43 if (slave.write(msg, strlen(msg) + 1) == 0) {
dwini 0:e24b497adfce 44 printf("Sending %s to master\r\n", msg);
dwini 0:e24b497adfce 45 }
dwini 0:e24b497adfce 46 break;
dwini 0:e24b497adfce 47
dwini 0:e24b497adfce 48 case I2CSlave::WriteAddressed:
dwini 0:e24b497adfce 49 pc.printf("Slave received command: %d [WriteAddressed]\r\n", i);
dwini 0:e24b497adfce 50
dwini 0:e24b497adfce 51 if (slave.read(buffer, 10) == 0) {
dwini 0:e24b497adfce 52 pc.printf("Received %s from master\r\n", buffer);
dwini 0:e24b497adfce 53 }
dwini 0:e24b497adfce 54 break;
dwini 0:e24b497adfce 55 }
dwini 0:e24b497adfce 56 for (int i = 0; i < 10; i++) buffer[i] = 0; // Clear buffer
dwini 0:e24b497adfce 57
dwini 1:e8ff4ff5a726 58 // Alive LED
dwini 1:e8ff4ff5a726 59 cAlive = (cAlive + 1) % 100000;
dwini 1:e8ff4ff5a726 60 if (!cAlive) {
dwini 1:e8ff4ff5a726 61 aLED = !aLED;
dwini 1:e8ff4ff5a726 62 }
dwini 0:e24b497adfce 63 }
dwini 0:e24b497adfce 64 }