#include <Wire.h>
//#include <SFE_MMA8452Q.h>
#include <SparkFun_MMA8452Q.h>
//#include <MMA8452Q.h>
//Cria uma instancia do MMA8452 chamada acelerometro
//com endereco I2C 0x1C (pino SA0 em LOW/Desligado)
MMA8452Q acelerometro(0x1C);
void setup() {
Serial.begin(9600);
Serial.println("Teste de comunicacao MMA8452");
acelerometro.init(); //Inicializa o acelerometro com o valores padrao de +/-2g e saida de 800 Hz
if (! acelerometro.init()) {
Serial.println("Couldnt start");
while (1);
}
Serial.println("MMA8451 found!");
//Utilize a linha abaixo para inicializar o acelerometro com
//+/-2g, 4g, or 8g, usando SCALE_2G, SCALE_4G, ou SCALE_8G
//acelerometro.init(SCALE_4G);
//Utilize a linha abaixo para determinar tambem a frequencia
//de saida do acelerometro (padrao de 800 Hz), utilizando
//como segundo parametro ODR_800 (800 Hz), ODR_400 (400 Hz),
//ODR_200 (200 Hz), ODR_100 (100 Hz), ODR_50 (50 Hz),
//ODR_12 (12.5 Hz), ODR_6 (6.25 Hz), ou ODR_1 (1.56 Hz)
acelerometro.init(SCALE_8G, ODR_800);
}
void loop() {
//A linha abaixo aguarda o envio de novos dados pelo acelerometro
if (acelerometro.available()) {
//Efetua a leitura dos dados do sensor
acelerometro.read();
//acelerometro.read() atualiza dois grupos de variaveis:
//* int x, y, e z armazena o valor de 12 bits lido do
//acelerometro
// * float cx, cy, e cz armazena o calculo da aceleracao
//dos valores de 12 bits. Essas variaveis estao em unidades de "g"
// printAccels();
//Mostra as coordenadas lidas do sensor
printCalculatedAccels();
delay(50);
//Selecione a linha abaixo para mostra os valores digitais
//printAccels();
//Mostra a orientacao (retrato/paisagem/flat)
//printOrientation();
Serial.println();
if (acelerometro.cx == 0)
Serial.println("origem");
smoothing_Readings();
float averagey;
Serial.print("Med_y");
Serial.print (averagey);
/*
float averagex;
float averagez;
Serial.print(averagex);
Serial.println("AVERAGEx");
Serial.print(averagey);
Serial.println("AVERAGEy");
Serial.print(averagez);
Serial.println("AVERAGEz");
*/
}
}
//Funções automáticas da library!!!
void printAccels() {
Serial.print(acelerometro.x, 3);
Serial.print("t");
Serial.print(acelerometro.y, 3);
Serial.print("t");
Serial.print(acelerometro.z, 3);
Serial.print("t");
}
void printCalculatedAccels() {
Serial.print(" x: ");
double x= ((acelerometro.cx * 10));
Serial.print(x);
Serial.print("m/s^2 ");
double limitX = constrain(x, -8, 8); //limtar o valor das amostraS ao valor máximo da escala "8G"
double X = map(limitX, -8, 8, -90, 90); //converter os valores máximos e mínimos de aceleração em graus!
Serial.print(X); //"Our" new value for x
Serial.print("º ");
if (x > 0) {
Serial.print("Forward");
} else {
Serial.print("Backward");
}
Serial.print(" y: ");
double y = ((acelerometro.cy * 10));
Serial.print(y);
Serial.print("m/s^2 ");
double limitY = constrain(y, -8, 8); //limtar o valor das amostraS ao valor máximo da escala "8G"
double Y = map(limitY, -8, 8, -90, 90); //converter os valores máximos e mínimos de aceleração em graus!
Serial.print(Y);
Serial.print("º ");
if (y > 0) {
Serial.print(",Left");
} else {
Serial.print(",Right");
}
Serial.print(" z: ");
double z = ((acelerometro.cz * 10));
Serial.print(z);
Serial.print("m/s^2 ");
double limitZ = constrain(z, -8, 8);
double Z = map(limitZ, -8, 8, -90, 90);
Serial.print(Z);
Serial.print("º ");
if (acelerometro.cz > 0) {
Serial.print(",UP");
} else {
Serial.print(",DOWN");
}
}
void printOrientation() {
//acelerometro.readPL() retorna um byte contendo informacoes sobre
//a orientacao do sensor (retrato/paisagem)
//PORTRAIT_U (Retrato Up/Para cima), PORTRAIT_D (Retrato Down/Para Baixo),
//LANDSCAPE_R (Paisagem right/direita), LANDSCAPE_L (Paisagem left/esquerda)
//e LOCKOUT (bloqueio)
/* byte pl = acelerometro.readPL();
switch (pl) {
case PORTRAIT_U:
Serial.print("Retrato Para Cima");
break;
case PORTRAIT_D:
Serial.print("Retrato Para Baixo");
break;
case LANDSCAPE_R:
Serial.print("Paisagem Direita");
break;
case LANDSCAPE_L:
Serial.print("Paisagem Esquerda");
break;
case LOCKOUT:
Serial.print("Plano");
break;
*/
}
Comments