Holis

Dependencies:   mbed

Committer:
elchef
Date:
Thu Mar 06 20:36:07 2014 +0000
Revision:
0:abd749cef631
HOLIS

Who changed what in which revision?

UserRevisionLine numberNew contents of line
elchef 0:abd749cef631 1 #include "mbed.h"
elchef 0:abd749cef631 2 #define MEDIDA 10 //Declaracion de una constante para decir el tamaño del arreglo
elchef 0:abd749cef631 3
elchef 0:abd749cef631 4 AnalogIn Volt_Out(A5);
elchef 0:abd749cef631 5 AnalogIn Volt_Ohmetro(A4);
elchef 0:abd749cef631 6 DigitalOut Led_Prueba(LED1);
elchef 0:abd749cef631 7 Serial pc(USBTX, USBRX);
elchef 0:abd749cef631 8 Timer reloj;//Declaracion de varibales, timer y puerto serial
elchef 0:abd749cef631 9 DigitalIn boton_Volt(A3);
elchef 0:abd749cef631 10 DigitalIn boton_Resitencia(A2);
elchef 0:abd749cef631 11
elchef 0:abd749cef631 12 float Volt_In, Tiempo_Led, Tiempo,Promedio, Vout_val,Ohms;
elchef 0:abd749cef631 13 float Voltajes_por_seg[]= {0};
elchef 0:abd749cef631 14 float Ohms_por_seg[] = {0}; //Inicializacion de un arreglo con 0 en cada lugar
elchef 0:abd749cef631 15
elchef 0:abd749cef631 16 float promedio (float arreglo[MEDIDA]) //Funcion para sacar el promedio dentro de los valores de un arreglo mediante un contador
elchef 0:abd749cef631 17 {
elchef 0:abd749cef631 18 float acumulado = 0;
elchef 0:abd749cef631 19 for (int count = 0; count < MEDIDA; count++) { //Aumento de lugar en el Arreglo
elchef 0:abd749cef631 20 acumulado += Voltajes_por_seg[count]; //Suma del valor en el lugar count del arreglo
elchef 0:abd749cef631 21 }
elchef 0:abd749cef631 22 return acumulado/MEDIDA; //Regresa el promedio como un valor float
elchef 0:abd749cef631 23 }
elchef 0:abd749cef631 24
elchef 0:abd749cef631 25 int main()
elchef 0:abd749cef631 26 {
elchef 0:abd749cef631 27 reloj.start(); //Comienzo del timer
elchef 0:abd749cef631 28 Tiempo_Led = reloj.read(); //Inicializar una variable que sera la lectura del timer
elchef 0:abd749cef631 29 while (Tiempo_Led <= 1.5) { //Al oprimir el boton reset prendera un led rojo durante 1.5segundos como medida de seguridad para saber que no quemamos nuestra tarjeta
elchef 0:abd749cef631 30 Tiempo_Led = reloj.read();
elchef 0:abd749cef631 31 Led_Prueba = 0;
elchef 0:abd749cef631 32 }
elchef 0:abd749cef631 33 Led_Prueba = 1;
elchef 0:abd749cef631 34 reloj.reset(); //El timer se resetea para tomar las medidas para el voltaje
elchef 0:abd749cef631 35 while(1) {
elchef 0:abd749cef631 36 if(boton_Volt==1 && boton_Resitencia==0) {
elchef 0:abd749cef631 37 Vout_val = Volt_Out*5; //Una variable que tendra el valor del voltaje de salida y lo, se multiplica por 5 ya que los puertos analogicos dan lecturas de 0 a 1 y con 5 volts fue alimentada esta practica
elchef 0:abd749cef631 38 Tiempo = reloj.read();
elchef 0:abd749cef631 39 if(Tiempo > 0 && Tiempo < 0.5 ) { //Cada 0.5 segundos tomara las mediciones
elchef 0:abd749cef631 40 for (int indice = 0; indice < MEDIDA; indice++) { //Ciclo que introduce cada valor del voltaje a cada espacio en el arreglo
elchef 0:abd749cef631 41 Voltajes_por_seg[indice]= Voltajes_por_seg[indice+1]; //Se suma al indice un 1 para el lugar siguiente en el arreglo
elchef 0:abd749cef631 42 Volt_In = ((Volt_Out*10330)/10000)*5; //Al voltaje de salida se multiplica por la suma de R1+R2 y se divide entre R1, se multiplica de nuevo por 5 por ser el voltaje con que alimentamos
elchef 0:abd749cef631 43 Voltajes_por_seg[MEDIDA-1]= Volt_In; //Elmininamos el primer valor y lo sustituimos por el siguiente
elchef 0:abd749cef631 44 reloj.reset(); //El timer se resetea para hacer de nuevo mediciones
elchef 0:abd749cef631 45 }
elchef 0:abd749cef631 46 Promedio=promedio(Voltajes_por_seg); //Uso del promedio para saber el voltaje de entrada
elchef 0:abd749cef631 47 pc.printf("Voltaje en promedio es %f \n",Promedio*28/5); //Saber que voltaje de entrada tengo a 28 volts de alimentacion¡
elchef 0:abd749cef631 48 }
elchef 0:abd749cef631 49
elchef 0:abd749cef631 50 } else if(boton_Volt==0 && boton_Resitencia==1) {
elchef 0:abd749cef631 51 Tiempo = reloj.read();
elchef 0:abd749cef631 52 if(Tiempo > 0 && Tiempo < 0.5 ) { //Cada 0.5 segundos tomara las mediciones
elchef 0:abd749cef631 53 for (int indice = 0; indice < MEDIDA; indice++) {
elchef 0:abd749cef631 54 Ohms_por_seg[indice]= Ohms_por_seg[indice+1];
elchef 0:abd749cef631 55 Ohms = 1/(1/(Volt_Ohmetro*3.3/.005-560)-1/100);//Resistencia, conociendo Vo //Ciclo que introduce cada valor del voltaje a cada espacio en el arreglo
elchef 0:abd749cef631 56 Ohms_por_seg[MEDIDA-1]= Ohms; //Elmininamos el primer valor y lo sustituimos por el siguiente
elchef 0:abd749cef631 57 reloj.reset(); //El timer se resetea para hacer de nuevo mediciones
elchef 0:abd749cef631 58 }
elchef 0:abd749cef631 59 Promedio=promedio(Ohms_por_seg);
elchef 0:abd749cef631 60 pc.printf("Resistencia 2 en promedio es %f \n",Promedio*3.3);
elchef 0:abd749cef631 61 }
elchef 0:abd749cef631 62 }
elchef 0:abd749cef631 63 }
elchef 0:abd749cef631 64 }