Andrea Coronado
/
Laboratorio_4
Informatica Industrial
Embed:
(wiki syntax)
Show/hide line numbers
main.cpp
00001 // Laboratorio 4 - Multimetro y Timers 00002 // Andrea Fernanda Coronado Guzman 00003 00004 #include "mbed.h" 00005 #define TAMAÑO_ARREGLO 9 // Constante que define el tamaño del arreglo 00006 00007 AnalogIn Volt_Out(PTA1); // Declaración del Voltímetro 00008 AnalogIn Volt_Ohmetro(PTA1); // Declaración del Óhmetro 00009 Serial pc(USBTX, USBRX); // Declaración del puerto serial 00010 Timer reloj; // Declaración de timer 00011 DigitalIn boton_medicion(PTB1); // 0 = voltimetro; 1 = ohmetro 00012 DigitalIn boton_resultado(PTB2); // Boton que calcula el promedio y despliega el resultado 00013 00014 float Volt_In; // Voltaje de entrada 00015 float Leer_tiempo; // Variable que leera el tiempo 00016 float Promedio; // Promedio de los voltajes en el arreglo 00017 float Vout_val; 00018 float Valor_resistencia; // Valor de la resistencia desconocida 00019 float Arreglo_voltajes[]= {0}; // Inicialización en 0 de un arreglo que guardara los valores de voltaje cada segundo 00020 00021 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 00022 { 00023 float suma_voltajes = 0; // Inicializamos en 0 la variable suma_voltajes que sumara los voltajes leidos por el timer 00024 for (int lugar_arreglo = 0; lugar_arreglo < TAMAÑO_ARREGLO; lugar_arreglo++) // Ciclo que cambia al siguiente lugar en Arreglo_voltajes 00025 { 00026 suma_voltajes += Arreglo_voltajes[lugar_arreglo]; // Asigna a cada lugar del arreglo el voltaje leido 00027 } 00028 return suma_voltajes/TAMAÑO_ARREGLO; // Calcula el promedio de los voltajes en el arreglo y regresa el resultado 00029 } 00030 00031 int main() 00032 { 00033 while(1) // Ciclo infinito 00034 { 00035 reloj.start(); // Inicialización del timer 00036 Vout_val = Volt_Out*5; // Una variable que tendra el valor del voltaje de salida y se multiplica por 5 00037 Leer_tiempo = reloj.read(); 00038 if(Leer_tiempo > 0 && Leer_tiempo < 0.5 ) // Toma las muestras a 2 Hz 00039 { 00040 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 00041 { 00042 pc.printf("Modo: Voltimetro \n"); // Confirma en que modo esta el mutlimetro 00043 for (int posicion_arreglo = 0; posicion_arreglo < TAMAÑO_ARREGLO; posicion_arreglo++) // Ciclo que actualiza los voltajes en cada espacio del arreglo 00044 { 00045 Arreglo_voltajes[posicion_arreglo] = Arreglo_voltajes[posicion_arreglo+1]; // Se suma a posicion_arreglo un 1 para el lugar siguiente en el arreglo 00046 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 00047 Arreglo_voltajes[TAMAÑO_ARREGLO-1] = Volt_In; // Elmininamos el primer valor y lo sustituimos por el siguiente 00048 reloj.reset(); //El timer se restablece para hacer de nuevo mediciones 00049 } 00050 Promedio = promedio_voltajes(Arreglo_voltajes); //Uso de la funcion promedio_voltajes para calcular el promedio de los voltajes en el arreglo 00051 pc.printf("El voltaje promedio es de %f \n", Promedio/9); 00052 00053 } 00054 else 00055 { 00056 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 00057 { 00058 pc.printf("Modo: Ohmetro \n"); // Confirma en que modo esta el mutlimetro 00059 Valor_resistencia = 1/(1/(Volt_Ohmetro*3.3/.176-560)-1/100);// Valor de la resistencia desconocida 00060 pc.printf("El valor de la resistencia desconocida es de %f ohms", Valor_resistencia); 00061 reloj.reset(); 00062 } 00063 } 00064 } 00065 } 00066 }
Generated on Thu Jul 28 2022 16:39:36 by 1.7.2