Adxl 345

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 3

#include <Wire.

h>;

//Comunicacion I2C con ADXL345:


//Direcciones:
# define DEVICE 0x53 // Direccion de ADXL345
# define DATAX0 0x32 // LSB de la medicion en el eje ""
# define DATAX1 0x33 // MSB de la medicion en el eje ""
# define DATAY0 0x34
# define DATAY1 0x35
# define DATAZ0 0x36
# define DATAZ1 0x37
# define DATA_FORMAT 0x31 //Configuracion del rango de medicion.
# define BW_RATE 0x2c // Direccion donde se configura frequency sample, para I2C se tiene
como limite MAXIMO 800 (Hz), debido a la velocidad de sampleo de 400kHz
# define POWER_CTL 0x2d // Direccion donde se coloca al sensor en Measure Mode
//Esctrituras
# define range_2g 0x0 //Byte a mandar a DATA_FORMAT --> Este valor se puede modificar
para dejar en FULL_RES las mediciones
# define range_4g 0x1
# define range_8g 0x2
# define range_16g 0x3 //

# define freq_100 0xA //Byte a mandar a BW_RATE


# define freq_200 0xB
# define freq_400 0xC
# define freq_800 0xD
# define freq_1600 0xE
# define freq_3200 0xF //

# define measure_on 0x8 //pasa de stanby a measure mode


# define measure_off 0x0 //pasa a standby mode

//Declaracion de variables:
byte rango_seleccionado;
byte _buff[6]; //Arreglo donde se almacenaran los datos exraidos del Sensor, 2 Bytes
por cada eje
int ser_read=0;
int i=1;

void setup() {

Wire.begin(); // Inicia libreria para comunicacion I2C


Serial.begin (9600);
writeTo(POWER_CTL,measure_on); //Manda al sensor a Measure_on
Serial.println("seleccionar rango de medicion (2, 4, 8, 16 g): ");
while(i==1){
ser_read=Serial.parseInt();
if (Serial.available()>0){ //Espera Ingreso de datas en puerto Serial
Serial.print("Se ha seleccionado un rango de: ");
Serial.print(ser_read); Serial.println(" g");
delay(100);
Serial.print(ser_read);
i=2;
}
}

if (ser_read==2){
writeTo(DATA_FORMAT, range_2g); //Escribe seleccion de usuario a la Adress
correspondiente
Serial.print("hola 2");
delay(500);
}
else if (ser_read==4){
writeTo(DATA_FORMAT, range_4g);
}
else if (ser_read==8){
writeTo(DATA_FORMAT, range_8g);
}
else if (ser_read==16){
writeTo(DATA_FORMAT, range_16g); //
}

Serial.println("seleccionar frequencia maxima (100, 200, 400, 800, 1600, 3200) [Hz]: ");

while(i==2){
ser_read= Serial.parseInt();
if (Serial.available()>0){
Serial.print("Se ha seleccionado una frecuancua de: ");
Serial.print(ser_read); Serial.println(" g");
delay(100);
i=3;
}
}
if (ser_read==100){ //Escribe seleccion de usuario a la Adress
correspondiente
writeTo(BW_RATE, freq_100);
}
else if (ser_read==200){
writeTo(BW_RATE, freq_200);
}
else if (ser_read==400){
writeTo(BW_RATE, freq_400);
Serial.print("hola 100");
delay(500);
}
else if (ser_read==800){
writeTo(BW_RATE, freq_800);
}
else if (ser_read==1600){
writeTo(BW_RATE, freq_1600); //
}
}
void loop() {

uint8_t howManyBytesToRead=6; //Lectura de 6 bytes, 2 por eje


ReadFrom( DATAX0, howManyBytesToRead, _buff); //Lectura de los datos, se almazenara
en arreglo de 6 bits
int x = (((int)_buff[1]) << 8) | _buff[0]; // crea variable x a partir de la union entre 2 bytes
de informacion del eje, el MSF lo corre 8 unidades
int y = (((int)_buff[3]) << 8) | _buff[2];
int z = (((int)_buff[5]) << 8) | _buff[4]; //
Serial.print(x);
Serial.print(", ");
Serial.print(y);
Serial.print(", ");
Serial.println(z);
}

void writeTo(byte address, byte val) { //Funcion para la escritura al sensor

Wire.beginTransmission(DEVICE); // Comienza la transmision


Wire.write(address); // Manda direccion especifica dentro del sensor
Wire.write(val); // Valor a Escribir
Wire.endTransmission(); // fin de la transmicion
}

void ReadFrom(byte address, int num, byte _buff[]) {

Wire.beginTransmission(DEVICE); // Comienza la transmision


Wire.write(address); // Manda direccion especifica dentro del sensor
Wire.endTransmission(); // fin de la transmision
Wire.beginTransmission(DEVICE); // Empieza transmicion al sensor
Wire.requestFrom(DEVICE, num); // Hace un request del sensor, num son los
numeros de bytes a recibir
int j = 0;
while(Wire.available()) // Verifica disponibilidad de datos
{
_buff[j] = Wire.read(); // recibe un bit y lo almacena en una parte j del arreglo
j++;
}
Wire.endTransmission(); // fin de la transmision
}

También podría gustarte