Commit d77755be authored by leoXtr3m's avatar leoXtr3m
Browse files

se sube el codigo para entregar

parent c872d2d8
/***************************************************************
*
* @file algoritmo.c
* @brief Modulo con funciones para recopilar y procesdor datos del acelerometro
*
*
* @version 1.0
* @author Leoncio Rios, Jesus Calixto
* Version inicial
* @date 20 de Mayo 2022
**********************************************************/
/*
* @algoritmo.c
*
*
* Proyecto final
* Modulo Round Robin OBTENER DATOS POR UART
*
* Este modulo agrupa las funciones de manejo del timer
*
* @version 1.0
* @author Leoncio Rios, Jesus Calixto
* Version inicial
* @date 20 de Mayo 2022
*
**********************************************************/
#include <algoritmo.h>
#include <msp430.h>
......@@ -16,8 +21,8 @@
#include <math.h>
#include <stdio.h>
int q = 0;
int k = 0;
int q =0;
int k =0;
char charY;
char charZ;
......@@ -30,8 +35,8 @@ uint8_t zz = 0;
unsigned int promedioY = 0;
unsigned int promedioZ = 0;
unsigned int sumaY = 0;
unsigned int sumaZ = 0;
unsigned int sumaY= 0;
unsigned int sumaZ= 0;
int restaVarY = 0;
int restaVarZ = 0;
......@@ -51,19 +56,18 @@ unsigned int maximoZ = 0;
unsigned int minimoY = 100;
unsigned int minimoZ = 100;
uint8_t analisis2 = 0;
uint8_t promedioFinal = 0;
uint8_t subiendoEscaleras = 0;
char concatenado;
void recopilarDatos(int16_t *ejeX, int16_t *ejeY, int16_t *ejeZ)
{
void recopilarDatos(int16_t* ejeX, int16_t* ejeY, int16_t* ejeZ){
if (q < datos)
{
if(q<datos){
yy = (int)division(ejeY, 100);
zz = (int)division(ejeZ, 10);
yy = (int)division(ejeY,100);
zz = (int)division(ejeZ,10);
buffer_Y[q] = yy;
buffer_Z[q] = zz;
......@@ -72,144 +76,126 @@ void recopilarDatos(int16_t *ejeX, int16_t *ejeY, int16_t *ejeZ)
}
}
void procesarDatos(uint8_t *resultado)
{
void procesarDatos(uint8_t* resultado){
sumaY = 0;
sumaZ = 0;
// Suma
for (k = 0; k < datos; k++)
{
//Suma
for(k = 0; k<datos ; k++){
sumaY = sumaY + buffer_Y[k];
sumaZ = sumaZ + buffer_Z[k];
// Maximos Y
if (buffer_Y[k] > maximoY)
{
//Maximos Y
if(buffer_Y[k]> maximoY){
maximoY = buffer_Y[k];
}
// minimos Y
else if (buffer_Y[k] < minimoY)
{
//minimos Y
else if (buffer_Y[k]< minimoY){
minimoY = buffer_Y[k];
}
// Maximos Z
if (buffer_Z[k] > maximoZ)
{
//Maximos Z
if(buffer_Z[k]> maximoZ){
maximoZ = buffer_Z[k];
}
// minimos Z
else if (buffer_Z[k] < minimoZ)
{
//minimos Z
else if (buffer_Z[k]< minimoZ){
minimoZ = buffer_Z[k];
}
}
// Promedio
promedioY = sumaY / datos;
promedioZ = sumaZ / datos;
// Varianza
for (k = 0; k < datos; k++)
{
restaVarY = buffer_Y[k] - promedioY;
sumaVarY = sumaVarY + (restaVarY * restaVarY);
//Promedio
promedioY = sumaY/datos;
promedioZ = sumaZ/datos;
restaVarZ = buffer_Z[k] - promedioZ;
sumaVarZ = sumaVarZ + (restaVarZ * restaVarZ);
//Varianza
for(k = 0; k<datos ; k++){
restaVarY = buffer_Y[k] - promedioY;
sumaVarY = sumaVarY + (restaVarY*restaVarY);
restaVarZ = buffer_Z[k] - promedioZ;
sumaVarZ = sumaVarZ + (restaVarZ*restaVarZ );
}
varianzaY = sumaVarY / datos;
varianzaZ = sumaVarZ / datos;
varianzaY = sumaVarY/(datos-1);
varianzaZ = sumaVarZ/(datos-1);
// Desviacion estandar
//Desviacion estandar
desEstandarY = sqrt(varianzaY);
desEstandarZ = sqrt(varianzaZ);
analisis2 = 0;
subiendoEscaleras = 0;
promedioFinal = 0;
// ANALISIS 1 PROMEDIO
if (promedioZ < 130)
{
if (promedioZ > 80)
{
if (promedioY < 36)
{
analisis2 = 1;
//PROMEDIO
if(promedioZ > 60){
if(promedioY < 39){
promedioFinal++;
}
else
{
analisis2 = 0;
subiendoEscaleras = 0;
}
}
else
{
analisis2 = 0;
subiendoEscaleras = 0;
}
}
else
{
if (sumaY == 32)
{
analisis2 = 1;
//SUMA
if(sumaZ > 9000){
if(sumaY < 5750){
promedioFinal++;
}
else
{
analisis2 = 0;
subiendoEscaleras = 0;
}
//VARIANZA
if(varianzaZ > 50){
if(varianzaY > 7){
promedioFinal++;
}
}
// ANALISIS 2 SUMA
if (analisis2 == 1)
{
if (sumaZ < 20000)
{
if (sumaZ > 10000)
{
if (sumaY < 5400)
{
subiendoEscaleras = 1;
}
else
{
subiendoEscaleras = 0;
}
}
else
{
subiendoEscaleras = 0;
}
//DESVIACION ESTANDAR
if(desEstandarZ > 50){
if(desEstandarY > 7){
promedioFinal++;
}
else
{
if (sumaY < 4900)
{
}
subiendoEscaleras = 1;
}
else
{
subiendoEscaleras = 0;
}
//MAXIMOS
if(maximoZ > 200){
if(maximoY > 57){
promedioFinal++;
}
}
else
{
//se calcula el porcentaje obtenido de 0 a 100
promedioFinal = promedioFinal*20;
//si es mayor a 80%
if(promedioFinal > 80){
subiendoEscaleras = 1;
}
else{
subiendoEscaleras = 0;
}
q = 0;
q=0;
//se manda el resultado 1 o 0
*resultado = subiendoEscaleras;
// se manda el resultado 1 o 0
*resultado = subiendoEscaleras;
}
division(int a, int b)
{
return (a / b);
return(a / b);
}
......@@ -6,8 +6,8 @@
#include <i2c.h>
#include "imu.h"
#include <algoritmo.h>
//#include<stdint.h>
#define LED1 (0x0001) // Seleccionamos el pin 1.0
//#include<stdint.h>
#define P0 BIT0 //LED VERDE
/********************************************
* VARIABLES I2C *
......@@ -26,7 +26,17 @@ uint8_t contador = 0;
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
/********************************************
* CONFIGURACION DE LEDS *
********************************************/
P1DIR = 0; // Pongo todos los pines como entradas
P1DIR |= (BIT0); // Ponemos el pin 1.0 como salida
P1OUT = 0xff;
/********************************************
* INICIALIZAMOS EL MODULO I2C *
......@@ -94,12 +104,12 @@ void main(void)
if (resultado == 1)
{
// PRENDER LED -- Se esta subiendo escaleras
P1OUT |= BIT0;
P1OUT |= (P0);
}
else
{
// APAGAR LED -- Se esta bajando escaleras
P1OUT |= ~BIT0;
P1OUT &= ~(P0);
}
contador = 0;
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment