codice
Dependencies: X_NUCLEO_IKS01A1 mbed
main.cpp
- Committer:
- Samuel56
- Date:
- 2016-12-01
- Revision:
- 1:c3bb15cf5b08
- Parent:
- 0:44863862864b
- Child:
- 2:20c97410676b
File content as of revision 1:c3bb15cf5b08:
#include "mbed.h" #define ACC_ADD_W 0b11010110 #define ACC_ADD_R 0b11010111 #define X_OUT_1 0x28 #define X_OUT_2 0x29 #define Y_OUT_1 0x2A #define Y_OUT_2 0x2B #define Z_OUT_1 0X2C #define Z_OUT_2 0X2D #define CTRL_REG6_XL 0x20 #define WHO_AM_I 0x0F #define REFERENCE_G 0x0B I2C myi2c(D14, D15); Serial pc (SERIAL_TX, SERIAL_RX); //void testRead(); void testWrite(); int read_reg(int reg_add); void setup(void); int merge_int(int val_msb, int val_lsb); void write_reg(int reg_add, int data_in); int main () { setup(); //testRead(); testWrite(); int out[2]; while (1) { //testWrite(); out[1]=read_reg(X_OUT_1); out[0]=read_reg(X_OUT_2); pc.printf("X: %d \n\r", merge_int(out[0], out[1])); out[1]=read_reg(Y_OUT_1); out[0]=read_reg(Y_OUT_2); pc.printf("Y: %d%d \n\r ", out[1], out[0]); out[1]=read_reg(Z_OUT_1); out[0]=read_reg(Z_OUT_2); pc.printf("Z: %d%d \n\r", out[1], out[0]); wait(1.0); } } int read_reg(int reg_add) { int status=0; char dato; myi2c.start(); //viene mandato il segnale di start status=myi2c.write(ACC_ADD_W); //scrivo l'indirizzo dell'accelerometro in scrittura if (status==0) pc.printf("ERRORE1"); status=myi2c.write(reg_add); //mando indirizzo del registro if (status==0) pc.printf("ERRORE2"); myi2c.start(); //mando il segnale di restart status=myi2c.write(ACC_ADD_R); //mando indirizzo dell'accelerometro in lettura if (status==0) pc.printf("ERRORE3"); dato=myi2c.read(0); //leggo il dato sul bus e lo salvo in dato myi2c.stop(); //mando il segnale di stop return dato; //ritorno il dato } void setup(void) { pc.printf("Starting up the machine...\n\r"); write_reg(CTRL_REG6_XL, 0x20); return; } int merge_int(int val_msb, int val_lsb) { int to_return = val_lsb + val_msb<<8; return to_return; } /*void testRead() { int out[2]; out[1]=read_reg(WHO_AM_I); pc.printf("WHO_AM_I: %d \n\r", out[1]); }*/ void write_reg(int reg_add, int data_in) { int status=0; myi2c.start(); //viene mandato il segnale di start status=myi2c.write(ACC_ADD_W); //scrivo l'indirizzo dell'accelerometro in scrittura if (status==0) pc.printf("ERRORE1"); status=myi2c.write(reg_add); //mando indirizzo del registro if (status==0) pc.printf("ERRORE2"); status=myi2c.write(data_in); if (status==0) pc.printf("ERRORE3"); myi2c.stop(); //mando il segnale di stop return; } /*void testWrite() { int dato; write_reg(REFERENCE_G,89); dato=read_reg(REFERENCE_G); pc.printf("vediamo se funziona: %d", dato); return ; //ritorno il dato }*/