Andrea Coronado
/
Laboratorio_4
Informatica Industrial
main.cpp@0:3febc025a28e, 2014-10-10 (annotated)
- Committer:
- AndreaC
- Date:
- Fri Oct 10 12:45:03 2014 +0000
- Revision:
- 0:3febc025a28e
Laboratorio 4
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
AndreaC | 0:3febc025a28e | 1 | // Laboratorio 4 - Multimetro y Timers |
AndreaC | 0:3febc025a28e | 2 | // Andrea Fernanda Coronado Guzman |
AndreaC | 0:3febc025a28e | 3 | |
AndreaC | 0:3febc025a28e | 4 | #include "mbed.h" |
AndreaC | 0:3febc025a28e | 5 | #define TAMAÑO_ARREGLO 9 // Constante que define el tamaño del arreglo |
AndreaC | 0:3febc025a28e | 6 | |
AndreaC | 0:3febc025a28e | 7 | AnalogIn Volt_Out(PTA1); // Declaración del Voltímetro |
AndreaC | 0:3febc025a28e | 8 | AnalogIn Volt_Ohmetro(PTA1); // Declaración del Óhmetro |
AndreaC | 0:3febc025a28e | 9 | Serial pc(USBTX, USBRX); // Declaración del puerto serial |
AndreaC | 0:3febc025a28e | 10 | Timer reloj; // Declaración de timer |
AndreaC | 0:3febc025a28e | 11 | DigitalIn boton_medicion(PTB1); // 0 = voltimetro; 1 = ohmetro |
AndreaC | 0:3febc025a28e | 12 | DigitalIn boton_resultado(PTB2); // Boton que calcula el promedio y despliega el resultado |
AndreaC | 0:3febc025a28e | 13 | |
AndreaC | 0:3febc025a28e | 14 | float Volt_In; // Voltaje de entrada |
AndreaC | 0:3febc025a28e | 15 | float Leer_tiempo; // Variable que leera el tiempo |
AndreaC | 0:3febc025a28e | 16 | float Promedio; // Promedio de los voltajes en el arreglo |
AndreaC | 0:3febc025a28e | 17 | float Vout_val; |
AndreaC | 0:3febc025a28e | 18 | float Valor_resistencia; // Valor de la resistencia desconocida |
AndreaC | 0:3febc025a28e | 19 | float Arreglo_voltajes[]= {0}; // Inicialización en 0 de un arreglo que guardara los valores de voltaje cada segundo |
AndreaC | 0:3febc025a28e | 20 | |
AndreaC | 0:3febc025a28e | 21 | float promedio_voltajes (float arreglo[TAMAÑO_ARREGLO]) // Función que calcula el promedio de los voltajes leidos y los guarda en el arreglo mediante un contador |
AndreaC | 0:3febc025a28e | 22 | { |
AndreaC | 0:3febc025a28e | 23 | float suma_voltajes = 0; // Inicializamos en 0 la variable suma_voltajes que sumara los voltajes leidos por el timer |
AndreaC | 0:3febc025a28e | 24 | for (int lugar_arreglo = 0; lugar_arreglo < TAMAÑO_ARREGLO; lugar_arreglo++) // Ciclo que cambia al siguiente lugar en Arreglo_voltajes |
AndreaC | 0:3febc025a28e | 25 | { |
AndreaC | 0:3febc025a28e | 26 | suma_voltajes += Arreglo_voltajes[lugar_arreglo]; // Asigna a cada lugar del arreglo el voltaje leido |
AndreaC | 0:3febc025a28e | 27 | } |
AndreaC | 0:3febc025a28e | 28 | return suma_voltajes/TAMAÑO_ARREGLO; // Calcula el promedio de los voltajes en el arreglo y regresa el resultado |
AndreaC | 0:3febc025a28e | 29 | } |
AndreaC | 0:3febc025a28e | 30 | |
AndreaC | 0:3febc025a28e | 31 | int main() |
AndreaC | 0:3febc025a28e | 32 | { |
AndreaC | 0:3febc025a28e | 33 | while(1) // Ciclo infinito |
AndreaC | 0:3febc025a28e | 34 | { |
AndreaC | 0:3febc025a28e | 35 | reloj.start(); // Inicialización del timer |
AndreaC | 0:3febc025a28e | 36 | Vout_val = Volt_Out*5; // Una variable que tendra el valor del voltaje de salida y se multiplica por 5 |
AndreaC | 0:3febc025a28e | 37 | Leer_tiempo = reloj.read(); |
AndreaC | 0:3febc025a28e | 38 | if(Leer_tiempo > 0 && Leer_tiempo < 0.5 ) // Toma las muestras a 2 Hz |
AndreaC | 0:3febc025a28e | 39 | { |
AndreaC | 0:3febc025a28e | 40 | if(boton_medicion == 0 && boton_resultado == 1) // Si el boton_medicion esta en modo voltimetro y boton_resultado se presiona, calculael promedio de voltajes en ese instante |
AndreaC | 0:3febc025a28e | 41 | { |
AndreaC | 0:3febc025a28e | 42 | pc.printf("Modo: Voltimetro \n"); // Confirma en que modo esta el mutlimetro |
AndreaC | 0:3febc025a28e | 43 | for (int posicion_arreglo = 0; posicion_arreglo < TAMAÑO_ARREGLO; posicion_arreglo++) // Ciclo que actualiza los voltajes en cada espacio del arreglo |
AndreaC | 0:3febc025a28e | 44 | { |
AndreaC | 0:3febc025a28e | 45 | Arreglo_voltajes[posicion_arreglo] = Arreglo_voltajes[posicion_arreglo+1]; // Se suma a posicion_arreglo un 1 para el lugar siguiente en el arreglo |
AndreaC | 0:3febc025a28e | 46 | Volt_In = 9*((Volt_Out*51000)/18000); // 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 |
AndreaC | 0:3febc025a28e | 47 | Arreglo_voltajes[TAMAÑO_ARREGLO-1] = Volt_In; // Elmininamos el primer valor y lo sustituimos por el siguiente |
AndreaC | 0:3febc025a28e | 48 | reloj.reset(); //El timer se restablece para hacer de nuevo mediciones |
AndreaC | 0:3febc025a28e | 49 | } |
AndreaC | 0:3febc025a28e | 50 | Promedio = promedio_voltajes(Arreglo_voltajes); //Uso de la funcion promedio_voltajes para calcular el promedio de los voltajes en el arreglo |
AndreaC | 0:3febc025a28e | 51 | pc.printf("El voltaje promedio es de %f \n", Promedio/9); |
AndreaC | 0:3febc025a28e | 52 | |
AndreaC | 0:3febc025a28e | 53 | } |
AndreaC | 0:3febc025a28e | 54 | else |
AndreaC | 0:3febc025a28e | 55 | { |
AndreaC | 0:3febc025a28e | 56 | if(boton_medicion == 1 && boton_resultado == 1) // Si el boton_medicion esta en modo ohmetro y boton_resultado se presiona, calcula la resistencia desconocida en el circuito |
AndreaC | 0:3febc025a28e | 57 | { |
AndreaC | 0:3febc025a28e | 58 | pc.printf("Modo: Ohmetro \n"); // Confirma en que modo esta el mutlimetro |
AndreaC | 0:3febc025a28e | 59 | Valor_resistencia = 1/(1/(Volt_Ohmetro*3.3/.176-560)-1/100);// Valor de la resistencia desconocida |
AndreaC | 0:3febc025a28e | 60 | pc.printf("El valor de la resistencia desconocida es de %f ohms", Valor_resistencia); |
AndreaC | 0:3febc025a28e | 61 | reloj.reset(); |
AndreaC | 0:3febc025a28e | 62 | } |
AndreaC | 0:3febc025a28e | 63 | } |
AndreaC | 0:3febc025a28e | 64 | } |
AndreaC | 0:3febc025a28e | 65 | } |
AndreaC | 0:3febc025a28e | 66 | } |