Gabriel Aviña
/
Multimetro2
Holis
main.cpp@0:abd749cef631, 2014-03-06 (annotated)
- Committer:
- elchef
- Date:
- Thu Mar 06 20:36:07 2014 +0000
- Revision:
- 0:abd749cef631
HOLIS
Who changed what in which revision?
User | Revision | Line number | New 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 | } |