Alfredo Ocegueda / Mbed 2 deprecated Voltimetro

Dependencies:   mbed

Committer:
Alfredo_Ocegueda
Date:
Thu Mar 13 13:12:25 2014 +0000
Revision:
2:be34b4d09318
Parent:
1:6aeb3f8df608
laboratorio 4

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Alfredo_Ocegueda 0:95d34170f70b 1 /* Buenas tardes, este es un programa creado para realizar distintas actividades que en el siguiente espacio mencionaremos:
Alfredo_Ocegueda 0:95d34170f70b 2
Alfredo_Ocegueda 0:95d34170f70b 3 Se cargara a el microcontrolador freedom FDRM KL25Z. El cual nos ayudara de 2 maneras.
Alfredo_Ocegueda 0:95d34170f70b 4
Alfredo_Ocegueda 0:95d34170f70b 5 En general el microcontrolador tendra conectado dos displays de 7 segmentos de anodo comun, 1 boton pulsador y 2 entradas analogicas que seran las
Alfredo_Ocegueda 0:95d34170f70b 6 diferentes funciones que mediremos.
Alfredo_Ocegueda 0:95d34170f70b 7
Alfredo_Ocegueda 0:95d34170f70b 8 La primera de ellas será un voltimetro que nos desplegara el resultado en los displays previamente conectados, el cual para los valores de 0 - 9
Alfredo_Ocegueda 0:95d34170f70b 9 mostrara un decimal, y para los valores de 10 - 28V nos mostrara el valor de la parte entera
Alfredo_Ocegueda 0:95d34170f70b 10
Alfredo_Ocegueda 0:95d34170f70b 11 La segunda sera un ohmetro que nos desplegara el resultado en los displays, el cual nos desplegara el resultado siempre en Kiloohms
Alfredo_Ocegueda 0:95d34170f70b 12
Alfredo_Ocegueda 0:95d34170f70b 13 Autor: Emilio Esteban Jimenez Godinez & Jose Alfredo Ocegueda Barraza
Alfredo_Ocegueda 0:95d34170f70b 14 Fecha: 12 de Marzo del 2014
Alfredo_Ocegueda 0:95d34170f70b 15 Version: 1.1 */
Alfredo_Ocegueda 0:95d34170f70b 16
Alfredo_Ocegueda 0:95d34170f70b 17
Alfredo_Ocegueda 0:95d34170f70b 18 #include "mbed.h"
Alfredo_Ocegueda 0:95d34170f70b 19
Alfredo_Ocegueda 0:95d34170f70b 20 DigitalIn boton(PTB2); // cambia el estado ya sea para utilizar el voltimetro o el ohmetro
Alfredo_Ocegueda 0:95d34170f70b 21 AnalogIn lecvol(PTB3); // Entrada analogica que nos permite saber la lectura para el voltimetro
Alfredo_Ocegueda 0:95d34170f70b 22 AnalogIn lecres(PTC2); // Entrada analogica que nos permite saber la lectura para el ohmetro
Alfredo_Ocegueda 0:95d34170f70b 23 // A B C D E F G
Alfredo_Ocegueda 0:95d34170f70b 24 BusOut display_1(PTD2,PTD0,PTD5,PTE0,PTE1,PTD3,PTD1); // son las salidas haia el display izquierdo
Alfredo_Ocegueda 0:95d34170f70b 25 // A B C D E F G
Alfredo_Ocegueda 0:95d34170f70b 26 BusOut display_2(PTA12,PTD4,PTA2,PTC8,PTC9,PTA4,PTA5); // son las salidas haia el display derecho
Alfredo_Ocegueda 0:95d34170f70b 27 DigitalOut dp_display1(PTA13); // Esta salida es para el punto del display izquierdo
Alfredo_Ocegueda 0:95d34170f70b 28 DigitalOut dp_display2(PTA1); // Esta salida es para el punto del display derecho
Alfredo_Ocegueda 0:95d34170f70b 29 int tiempo=0; // nos sirve de auxiliar en la lectura de tiempo
Alfredo_Ocegueda 0:95d34170f70b 30 int promedio=0;
Alfredo_Ocegueda 1:6aeb3f8df608 31 float promedio_voltaje=0;
Alfredo_Ocegueda 1:6aeb3f8df608 32 float promedio_resistencia=0;
Alfredo_Ocegueda 0:95d34170f70b 33 int estado=0; // 0= Voltimetro; 1= Ohmetro
Alfredo_Ocegueda 0:95d34170f70b 34 int i; // Variable auxiliar para instruccion for
Alfredo_Ocegueda 0:95d34170f70b 35 float voltaje[]={0}; // Arreglo para guardar las lecturas de voltaje
Alfredo_Ocegueda 0:95d34170f70b 36 float resistencia[]={0}; // Arreglo para guardar las lecturas de resistencia
Alfredo_Ocegueda 0:95d34170f70b 37 int dis_1; // Variable auxiliar par regresar el valor de la funcion entero
Alfredo_Ocegueda 0:95d34170f70b 38 int dis_2; // Variable auxiliar par regresar el valor de la funcion entero
Alfredo_Ocegueda 0:95d34170f70b 39
Alfredo_Ocegueda 0:95d34170f70b 40 int display_entero(int entero); //funcion para obtener el valor del display1 que necesitamos
Alfredo_Ocegueda 0:95d34170f70b 41 int display_decimal(int decimal); //funcion para obtener el valor del display2 que necesitamos
Alfredo_Ocegueda 0:95d34170f70b 42
Alfredo_Ocegueda 0:95d34170f70b 43 int main()
Alfredo_Ocegueda 0:95d34170f70b 44 {
Alfredo_Ocegueda 0:95d34170f70b 45 Timer volt;
Alfredo_Ocegueda 0:95d34170f70b 46 Timer resis;
Alfredo_Ocegueda 0:95d34170f70b 47
Alfredo_Ocegueda 0:95d34170f70b 48 while(1)
Alfredo_Ocegueda 0:95d34170f70b 49 {
Alfredo_Ocegueda 0:95d34170f70b 50 if(boton==1){ //utilizamos esta instruccion para cada vez que se presione el boton cambiemos de estado una variable
Alfredo_Ocegueda 0:95d34170f70b 51 estado=!estado;
Alfredo_Ocegueda 0:95d34170f70b 52 }
Alfredo_Ocegueda 1:6aeb3f8df608 53 if (estado == 0){ // Cuando estado sea = 0 metemos la formula para que nos de el resultado del voltimetro
Alfredo_Ocegueda 1:6aeb3f8df608 54 volt.start(); // y sacamos el promedio, despues hacemos lo necesario para imprimir la respuesta en los displays
Alfredo_Ocegueda 0:95d34170f70b 55 for(i=0; i<=9; i++){
Alfredo_Ocegueda 0:95d34170f70b 56 int resultado_voltaje = (lecvol*3.3*5780)/680;
Alfredo_Ocegueda 0:95d34170f70b 57 if(volt.read_ms() == tiempo){
Alfredo_Ocegueda 0:95d34170f70b 58 voltaje[i]=resultado_voltaje;
Alfredo_Ocegueda 0:95d34170f70b 59 promedio+=resultado_voltaje;
Alfredo_Ocegueda 0:95d34170f70b 60 tiempo+=200;
Alfredo_Ocegueda 0:95d34170f70b 61 }
Alfredo_Ocegueda 0:95d34170f70b 62 }
Alfredo_Ocegueda 0:95d34170f70b 63 if(volt.read_ms() ==2000){
Alfredo_Ocegueda 0:95d34170f70b 64 promedio_voltaje=promedio/10;
Alfredo_Ocegueda 0:95d34170f70b 65 if (promedio_voltaje >= 10){ // Si el resultado es mayor a 10 entonces separamos en dos numeros
Alfredo_Ocegueda 0:95d34170f70b 66 int display_1 = display_entero(promedio_voltaje/10); // Mandamos llamar la funcion que nos regresa el valor del display 1
Alfredo_Ocegueda 1:6aeb3f8df608 67 int display_2 = display_decimal(int(promedio_voltaje)%10);// Mandamos llamar la funcion que nos regresa el valor del display 2
Alfredo_Ocegueda 0:95d34170f70b 68 }
Alfredo_Ocegueda 1:6aeb3f8df608 69 if (promedio_voltaje < 10){ // Si el resultado es menor a 10 entonces separamos en dos numeros uno sera la
Alfredo_Ocegueda 1:6aeb3f8df608 70 int display_1 = display_entero(promedio_voltaje); // Mandamos llamar la funcion que nos regresa el valor del display 1
Alfredo_Ocegueda 1:6aeb3f8df608 71 dp_display1=1; // Prendemos el punto del display 1 asi sabremos que da decimales
Alfredo_Ocegueda 2:be34b4d09318 72 int display_2 = display_decimal((promedio_voltaje*10)%10); // Mandamos llamar la funcion que nos regresa el valor del display 2
Alfredo_Ocegueda 0:95d34170f70b 73 }
Alfredo_Ocegueda 0:95d34170f70b 74 volt.reset();
Alfredo_Ocegueda 0:95d34170f70b 75 }
Alfredo_Ocegueda 0:95d34170f70b 76 }
Alfredo_Ocegueda 1:6aeb3f8df608 77 if (estado == 1){ // Cuando estado sea = 0 metemos la formula para que nos de el resultado del ohmetro
Alfredo_Ocegueda 1:6aeb3f8df608 78 resis.start(); // y sacamos el promedio, despues hacemos lo necesario para imprimir la respuesta en los displays
Alfredo_Ocegueda 1:6aeb3f8df608 79 dp_display2=1; // Para saber que el resultado sera en kohms activamos el dot poitn del segundo display y lo dejamos encendido siempre
Alfredo_Ocegueda 0:95d34170f70b 80 for(i=0; i<=9; i++){
Alfredo_Ocegueda 1:6aeb3f8df608 81 int resultado_resistencia = ((3.3*10)/(lecres*3.3))-10; // Despues de sacar esta formula el resultado sera en Kohms
Alfredo_Ocegueda 0:95d34170f70b 82 if(resis.read_ms() == tiempo){
Alfredo_Ocegueda 0:95d34170f70b 83 resistencia[i]=resultado_resistencia;
Alfredo_Ocegueda 0:95d34170f70b 84 promedio+=resultado_resistencia;
Alfredo_Ocegueda 0:95d34170f70b 85 tiempo+=200;
Alfredo_Ocegueda 0:95d34170f70b 86 }
Alfredo_Ocegueda 0:95d34170f70b 87 }
Alfredo_Ocegueda 0:95d34170f70b 88 if(resis.read_ms() == 2000){
Alfredo_Ocegueda 0:95d34170f70b 89 promedio_resistencia=promedio/10;
Alfredo_Ocegueda 1:6aeb3f8df608 90 if(promedio_resistencia<1){ // Si el resultado de la formula es menor a 1 desplegaremos en el display en decimas de kohms
Alfredo_Ocegueda 1:6aeb3f8df608 91 display_1 = ~63; // Debido a que sera menor a 1 dejamos el primer display en 0
Alfredo_Ocegueda 1:6aeb3f8df608 92 dp_display1=1; // Activamos el dot point del primer display ya que dara decimales
Alfredo_Ocegueda 1:6aeb3f8df608 93 int display_2 = display_decimal(promedio_resistencia*10); // Mandamos llamar la funcion que nos regresa el valor del display 2
Alfredo_Ocegueda 1:6aeb3f8df608 94 }
Alfredo_Ocegueda 1:6aeb3f8df608 95 if(promedio_resistencia>=1&&promedio_resistencia<10){ // Si el resultado de la formula es mayor o igual a 1 y menor a 10 seguiremos dando decimales
Alfredo_Ocegueda 1:6aeb3f8df608 96 int display_1 = display_entero(promedio_resistencia); // Mandamos llamar la funcion que nos regresa el valor del display 1
Alfredo_Ocegueda 1:6aeb3f8df608 97 dp_display1=1; // Activamos el dot point del primer display ya que dara decimales
Alfredo_Ocegueda 2:be34b4d09318 98 int display_2 = display_decimal((promedio_resistencia*10)%10); // Mandamos llamar la funcion que nos regresa el valor del display 2
Alfredo_Ocegueda 1:6aeb3f8df608 99 }
Alfredo_Ocegueda 1:6aeb3f8df608 100 if(promedio_resistencia>=10){ // Si el resultado de la formula es mayor o igual a 10 hacemos lo necesario para que los displays nos desplieguen el resultado
Alfredo_Ocegueda 1:6aeb3f8df608 101 int display_1 = display_entero(promedio_resistencia/10); // Mandamos llamar la funcion que nos regresa el valor del display 1
Alfredo_Ocegueda 1:6aeb3f8df608 102 int display_2 = display_decimal(int(promedio_resistencia)%10); // Mandamos llamar la funcion que nos regresa el valor del display 2
Alfredo_Ocegueda 1:6aeb3f8df608 103 }
Alfredo_Ocegueda 0:95d34170f70b 104 resis.reset();
Alfredo_Ocegueda 0:95d34170f70b 105 }
Alfredo_Ocegueda 0:95d34170f70b 106 }
Alfredo_Ocegueda 0:95d34170f70b 107 }
Alfredo_Ocegueda 0:95d34170f70b 108 }
Alfredo_Ocegueda 0:95d34170f70b 109
Alfredo_Ocegueda 0:95d34170f70b 110 int display_entero (int entero){ // Esta funcion es para desplegar el numero en el primer display, a todos los resultados se les aplica un inversor
Alfredo_Ocegueda 0:95d34170f70b 111 switch(entero){ // debido a que los display que utilizamos son de anodo comun, entonces seria todo de manera inversa
Alfredo_Ocegueda 0:95d34170f70b 112 case 0:
Alfredo_Ocegueda 0:95d34170f70b 113 dis_1=~63;
Alfredo_Ocegueda 0:95d34170f70b 114 break;
Alfredo_Ocegueda 0:95d34170f70b 115 case 1:
Alfredo_Ocegueda 0:95d34170f70b 116 display_1=~6;
Alfredo_Ocegueda 0:95d34170f70b 117 break;
Alfredo_Ocegueda 0:95d34170f70b 118 case 2:
Alfredo_Ocegueda 0:95d34170f70b 119 dis_1=~91;
Alfredo_Ocegueda 0:95d34170f70b 120 break;
Alfredo_Ocegueda 0:95d34170f70b 121 case 3:
Alfredo_Ocegueda 0:95d34170f70b 122 dis_1=~79;
Alfredo_Ocegueda 0:95d34170f70b 123 break;
Alfredo_Ocegueda 0:95d34170f70b 124 case 4:
Alfredo_Ocegueda 0:95d34170f70b 125 dis_1=~102;
Alfredo_Ocegueda 0:95d34170f70b 126 break;
Alfredo_Ocegueda 0:95d34170f70b 127 case 5:
Alfredo_Ocegueda 0:95d34170f70b 128 dis_1=~109;
Alfredo_Ocegueda 0:95d34170f70b 129 break;
Alfredo_Ocegueda 0:95d34170f70b 130 case 6:
Alfredo_Ocegueda 0:95d34170f70b 131 dis_1=~125;
Alfredo_Ocegueda 0:95d34170f70b 132 break;
Alfredo_Ocegueda 0:95d34170f70b 133 case 7:
Alfredo_Ocegueda 0:95d34170f70b 134 dis_1=~7;
Alfredo_Ocegueda 0:95d34170f70b 135 break;
Alfredo_Ocegueda 0:95d34170f70b 136 case 8:
Alfredo_Ocegueda 0:95d34170f70b 137 dis_1=~127;
Alfredo_Ocegueda 0:95d34170f70b 138 break;
Alfredo_Ocegueda 0:95d34170f70b 139 case 9:
Alfredo_Ocegueda 0:95d34170f70b 140 dis_1=~103;
Alfredo_Ocegueda 0:95d34170f70b 141 break;
Alfredo_Ocegueda 0:95d34170f70b 142 }
Alfredo_Ocegueda 0:95d34170f70b 143 return dis_1;
Alfredo_Ocegueda 0:95d34170f70b 144 }
Alfredo_Ocegueda 0:95d34170f70b 145
Alfredo_Ocegueda 0:95d34170f70b 146 int display_decimal(int decimal){ // Esta funcion es para desplegar el numero en el segundo display, a todos los resultados se les aplica un inversor
Alfredo_Ocegueda 0:95d34170f70b 147 switch(decimal){ // debido a que los display que utilizamos son de anodo comun, entonces seria todo de manera inversa
Alfredo_Ocegueda 0:95d34170f70b 148 case 0:
Alfredo_Ocegueda 0:95d34170f70b 149 dis_2=~63;
Alfredo_Ocegueda 0:95d34170f70b 150 break;
Alfredo_Ocegueda 0:95d34170f70b 151 case 1:
Alfredo_Ocegueda 0:95d34170f70b 152 dis_2=~6;
Alfredo_Ocegueda 0:95d34170f70b 153 break;
Alfredo_Ocegueda 0:95d34170f70b 154 case 2:
Alfredo_Ocegueda 0:95d34170f70b 155 dis_2=~91;
Alfredo_Ocegueda 0:95d34170f70b 156 break;
Alfredo_Ocegueda 0:95d34170f70b 157 case 3:
Alfredo_Ocegueda 0:95d34170f70b 158 dis_2=~79;
Alfredo_Ocegueda 0:95d34170f70b 159 break;
Alfredo_Ocegueda 0:95d34170f70b 160 case 4:
Alfredo_Ocegueda 0:95d34170f70b 161 dis_2=~102;
Alfredo_Ocegueda 0:95d34170f70b 162 break;
Alfredo_Ocegueda 0:95d34170f70b 163 case 5:
Alfredo_Ocegueda 0:95d34170f70b 164 dis_2=~109;
Alfredo_Ocegueda 0:95d34170f70b 165 break;
Alfredo_Ocegueda 0:95d34170f70b 166 case 6:
Alfredo_Ocegueda 0:95d34170f70b 167 dis_2=~125;
Alfredo_Ocegueda 0:95d34170f70b 168 break;
Alfredo_Ocegueda 0:95d34170f70b 169 case 7:
Alfredo_Ocegueda 0:95d34170f70b 170 dis_2=~7;
Alfredo_Ocegueda 0:95d34170f70b 171 break;
Alfredo_Ocegueda 0:95d34170f70b 172 case 8:
Alfredo_Ocegueda 0:95d34170f70b 173 dis_2=~127;
Alfredo_Ocegueda 0:95d34170f70b 174 break;
Alfredo_Ocegueda 0:95d34170f70b 175 case 9:
Alfredo_Ocegueda 0:95d34170f70b 176 dis_2=~103;
Alfredo_Ocegueda 0:95d34170f70b 177 break;
Alfredo_Ocegueda 0:95d34170f70b 178 }
Alfredo_Ocegueda 0:95d34170f70b 179 return dis_2;
Alfredo_Ocegueda 0:95d34170f70b 180 }