program for I2C master device

Dependencies:   mbed

Fork of I2C_HelloWorld_Mbed by mbed official

Committer:
marcus255
Date:
Mon Dec 07 21:45:21 2015 +0000
Revision:
6:6ee93a0f8d24
Parent:
5:8dc6d7d81250
Child:
7:b07706b16279
some little changes

Who changed what in which revision?

UserRevisionLine numberNew contents of line
marcus255 4:1ec553356dcc 1 // I2C Master
marcus255 4:1ec553356dcc 2 #include "main.h"
mbed_official 0:f76c26307f9a 3
marcus255 4:1ec553356dcc 4 int main() {
marcus255 4:1ec553356dcc 5 init();
marcus255 4:1ec553356dcc 6 while (1) {}
marcus255 4:1ec553356dcc 7 }
mbed_official 0:f76c26307f9a 8
marcus255 5:8dc6d7d81250 9 void write_and_read(){
marcus255 6:6ee93a0f8d24 10 write_data();
marcus255 5:8dc6d7d81250 11 wait_ms(20);
marcus255 6:6ee93a0f8d24 12 //read_data();
marcus255 6:6ee93a0f8d24 13 //wait_ms(20);
marcus255 5:8dc6d7d81250 14 }
marcus255 5:8dc6d7d81250 15
marcus255 5:8dc6d7d81250 16 void write_data(){
marcus255 5:8dc6d7d81250 17 //writing to slave
marcus255 5:8dc6d7d81250 18 int write_ack = i2c.write(SLAVE_ADDR, data, DATA_SIZE-1);
marcus255 4:1ec553356dcc 19 if (!write_ack) {
marcus255 4:1ec553356dcc 20 i2c.stop();
marcus255 4:1ec553356dcc 21 pc.printf("<Writing> OK\n\r");
marcus255 4:1ec553356dcc 22 }
marcus255 4:1ec553356dcc 23 else
marcus255 4:1ec553356dcc 24 pc.printf("<Writing> Error\n\r");
marcus255 5:8dc6d7d81250 25 //wait_ms(20);
marcus255 5:8dc6d7d81250 26 }
marcus255 5:8dc6d7d81250 27
marcus255 5:8dc6d7d81250 28 void read_data(){
marcus255 4:1ec553356dcc 29 //reading from slave
marcus255 4:1ec553356dcc 30 char fromSlave[DATA_SIZE];
marcus255 5:8dc6d7d81250 31 int read_ack = i2c.read(SLAVE_ADDR, fromSlave, DATA_SIZE - 1);
marcus255 5:8dc6d7d81250 32 if (!read_ack) {
marcus255 4:1ec553356dcc 33 pc.printf("<Reading> OK\n\r");
marcus255 5:8dc6d7d81250 34 fromSlave[DATA_SIZE - 1] = '\0';
marcus255 5:8dc6d7d81250 35 pc.printf("Data from Slave: %s\n\n\r", fromSlave);
marcus255 5:8dc6d7d81250 36 }
marcus255 4:1ec553356dcc 37 else
marcus255 5:8dc6d7d81250 38 pc.printf("<Reading> Error\n\r");
marcus255 5:8dc6d7d81250 39 }
marcus255 5:8dc6d7d81250 40
marcus255 4:1ec553356dcc 41 /*
marcus255 4:1ec553356dcc 42 void i2cReadWrite(void){
marcus255 4:1ec553356dcc 43 for(int a = 0; a < MSG_SIZE; a++) fromSlave[a] = 0;
marcus255 4:1ec553356dcc 44
marcus255 4:1ec553356dcc 45 int ack = i2c.write(SLAVE_ADDR, data, strlen(data));
marcus255 4:1ec553356dcc 46 if (!ack)
marcus255 4:1ec553356dcc 47 pc.printf("data send to slave\n\r");
marcus255 4:1ec553356dcc 48 else
marcus255 4:1ec553356dcc 49 pc.printf("NACK!\n\r");
mbed_official 0:f76c26307f9a 50
marcus255 4:1ec553356dcc 51 wait(0.1);
marcus255 4:1ec553356dcc 52
marcus255 4:1ec553356dcc 53 int read_ack = i2c.read(SLAVE_ADDR, fromSlave, MSG_SIZE - 1);
marcus255 4:1ec553356dcc 54 if (!read_ack)
marcus255 4:1ec553356dcc 55 pc.printf("data received from slave\n\r");
marcus255 4:1ec553356dcc 56 else
marcus255 4:1ec553356dcc 57 pc.printf("data not received\n\r");
marcus255 4:1ec553356dcc 58
marcus255 4:1ec553356dcc 59 pc.printf("Data from Slave: %s\n\r", fromSlave);
marcus255 4:1ec553356dcc 60
marcus255 4:1ec553356dcc 61 for(int y = 0; y < 32; y++) fromSlave[y]='x';
marcus255 4:1ec553356dcc 62 }*/
marcus255 4:1ec553356dcc 63
marcus255 4:1ec553356dcc 64 void init(void){
marcus255 4:1ec553356dcc 65 i2c.frequency(100000);
marcus255 5:8dc6d7d81250 66 i2c_ticker.attach(&write_and_read, 2.0f);
marcus255 4:1ec553356dcc 67 pc.baud(921600);
marcus255 4:1ec553356dcc 68 pc.printf("Master says: Hello World!\n\r");
marcus255 4:1ec553356dcc 69 for (uint8_t i = 0; i < DATA_SIZE; i++)
marcus255 5:8dc6d7d81250 70 data[i] = i+65;
marcus255 5:8dc6d7d81250 71 data[0]=0;
mbed_official 0:f76c26307f9a 72 }