Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@0:95d34170f70b, 2014-03-13 (annotated)
- Committer:
- Alfredo_Ocegueda
- Date:
- Thu Mar 13 04:37:15 2014 +0000
- Revision:
- 0:95d34170f70b
- Child:
- 1:6aeb3f8df608
Practica laboratorio No.4
Who changed what in which revision?
User | Revision | Line number | New 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 | 0:95d34170f70b | 31 | int promedio_voltaje=0; |
Alfredo_Ocegueda | 0:95d34170f70b | 32 | int 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 | 0:95d34170f70b | 53 | if (estado == 0){ |
Alfredo_Ocegueda | 0:95d34170f70b | 54 | volt.start(); |
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 | 0:95d34170f70b | 67 | int display_2 = display_decimal(promedio_voltaje%10);// Mandamos llamar la funcion que nos regresa el valor del display 2 |
Alfredo_Ocegueda | 0:95d34170f70b | 68 | } |
Alfredo_Ocegueda | 0:95d34170f70b | 69 | if (promedio_voltaje < 10){ // Si el resultado es menor a 10 entonces separamos en dos numeros uno sera la |
Alfredo_Ocegueda | 0:95d34170f70b | 70 | int display_1 = display_entero(promedio_voltaje); // Mandamos llamar la funcion que nos regresa el valor del display 1 |
Alfredo_Ocegueda | 0:95d34170f70b | 71 | int display_2 = display_decimal(((float(promedio_voltaje))*10)-(promedio_voltaje*10)); // Mandamos llamar la funcion que nos regresa el valor del display 2 |
Alfredo_Ocegueda | 0:95d34170f70b | 72 | } |
Alfredo_Ocegueda | 0:95d34170f70b | 73 | volt.reset(); |
Alfredo_Ocegueda | 0:95d34170f70b | 74 | } |
Alfredo_Ocegueda | 0:95d34170f70b | 75 | } |
Alfredo_Ocegueda | 0:95d34170f70b | 76 | if (estado == 1){ |
Alfredo_Ocegueda | 0:95d34170f70b | 77 | resis.start(); |
Alfredo_Ocegueda | 0:95d34170f70b | 78 | for(i=0; i<=9; i++){ |
Alfredo_Ocegueda | 0:95d34170f70b | 79 | int resultado_resistencia = ((3.3*10000)/(lecres*3.3))-10000; |
Alfredo_Ocegueda | 0:95d34170f70b | 80 | if(resis.read_ms() == tiempo){ |
Alfredo_Ocegueda | 0:95d34170f70b | 81 | resistencia[i]=resultado_resistencia; |
Alfredo_Ocegueda | 0:95d34170f70b | 82 | promedio+=resultado_resistencia; |
Alfredo_Ocegueda | 0:95d34170f70b | 83 | tiempo+=200; |
Alfredo_Ocegueda | 0:95d34170f70b | 84 | } |
Alfredo_Ocegueda | 0:95d34170f70b | 85 | } |
Alfredo_Ocegueda | 0:95d34170f70b | 86 | if(resis.read_ms() == 2000){ |
Alfredo_Ocegueda | 0:95d34170f70b | 87 | promedio_resistencia=promedio/10; |
Alfredo_Ocegueda | 0:95d34170f70b | 88 | resis.reset(); |
Alfredo_Ocegueda | 0:95d34170f70b | 89 | } |
Alfredo_Ocegueda | 0:95d34170f70b | 90 | } |
Alfredo_Ocegueda | 0:95d34170f70b | 91 | } |
Alfredo_Ocegueda | 0:95d34170f70b | 92 | } |
Alfredo_Ocegueda | 0:95d34170f70b | 93 | |
Alfredo_Ocegueda | 0:95d34170f70b | 94 | 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 | 95 | switch(entero){ // debido a que los display que utilizamos son de anodo comun, entonces seria todo de manera inversa |
Alfredo_Ocegueda | 0:95d34170f70b | 96 | case 0: |
Alfredo_Ocegueda | 0:95d34170f70b | 97 | dis_1=~63; |
Alfredo_Ocegueda | 0:95d34170f70b | 98 | break; |
Alfredo_Ocegueda | 0:95d34170f70b | 99 | case 1: |
Alfredo_Ocegueda | 0:95d34170f70b | 100 | display_1=~6; |
Alfredo_Ocegueda | 0:95d34170f70b | 101 | break; |
Alfredo_Ocegueda | 0:95d34170f70b | 102 | case 2: |
Alfredo_Ocegueda | 0:95d34170f70b | 103 | dis_1=~91; |
Alfredo_Ocegueda | 0:95d34170f70b | 104 | break; |
Alfredo_Ocegueda | 0:95d34170f70b | 105 | case 3: |
Alfredo_Ocegueda | 0:95d34170f70b | 106 | dis_1=~79; |
Alfredo_Ocegueda | 0:95d34170f70b | 107 | break; |
Alfredo_Ocegueda | 0:95d34170f70b | 108 | case 4: |
Alfredo_Ocegueda | 0:95d34170f70b | 109 | dis_1=~102; |
Alfredo_Ocegueda | 0:95d34170f70b | 110 | break; |
Alfredo_Ocegueda | 0:95d34170f70b | 111 | case 5: |
Alfredo_Ocegueda | 0:95d34170f70b | 112 | dis_1=~109; |
Alfredo_Ocegueda | 0:95d34170f70b | 113 | break; |
Alfredo_Ocegueda | 0:95d34170f70b | 114 | case 6: |
Alfredo_Ocegueda | 0:95d34170f70b | 115 | dis_1=~125; |
Alfredo_Ocegueda | 0:95d34170f70b | 116 | break; |
Alfredo_Ocegueda | 0:95d34170f70b | 117 | case 7: |
Alfredo_Ocegueda | 0:95d34170f70b | 118 | dis_1=~7; |
Alfredo_Ocegueda | 0:95d34170f70b | 119 | break; |
Alfredo_Ocegueda | 0:95d34170f70b | 120 | case 8: |
Alfredo_Ocegueda | 0:95d34170f70b | 121 | dis_1=~127; |
Alfredo_Ocegueda | 0:95d34170f70b | 122 | break; |
Alfredo_Ocegueda | 0:95d34170f70b | 123 | case 9: |
Alfredo_Ocegueda | 0:95d34170f70b | 124 | dis_1=~103; |
Alfredo_Ocegueda | 0:95d34170f70b | 125 | break; |
Alfredo_Ocegueda | 0:95d34170f70b | 126 | } |
Alfredo_Ocegueda | 0:95d34170f70b | 127 | return dis_1; |
Alfredo_Ocegueda | 0:95d34170f70b | 128 | } |
Alfredo_Ocegueda | 0:95d34170f70b | 129 | |
Alfredo_Ocegueda | 0:95d34170f70b | 130 | 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 | 131 | switch(decimal){ // debido a que los display que utilizamos son de anodo comun, entonces seria todo de manera inversa |
Alfredo_Ocegueda | 0:95d34170f70b | 132 | case 0: |
Alfredo_Ocegueda | 0:95d34170f70b | 133 | dis_2=~63; |
Alfredo_Ocegueda | 0:95d34170f70b | 134 | break; |
Alfredo_Ocegueda | 0:95d34170f70b | 135 | case 1: |
Alfredo_Ocegueda | 0:95d34170f70b | 136 | dis_2=~6; |
Alfredo_Ocegueda | 0:95d34170f70b | 137 | break; |
Alfredo_Ocegueda | 0:95d34170f70b | 138 | case 2: |
Alfredo_Ocegueda | 0:95d34170f70b | 139 | dis_2=~91; |
Alfredo_Ocegueda | 0:95d34170f70b | 140 | break; |
Alfredo_Ocegueda | 0:95d34170f70b | 141 | case 3: |
Alfredo_Ocegueda | 0:95d34170f70b | 142 | dis_2=~79; |
Alfredo_Ocegueda | 0:95d34170f70b | 143 | break; |
Alfredo_Ocegueda | 0:95d34170f70b | 144 | case 4: |
Alfredo_Ocegueda | 0:95d34170f70b | 145 | dis_2=~102; |
Alfredo_Ocegueda | 0:95d34170f70b | 146 | break; |
Alfredo_Ocegueda | 0:95d34170f70b | 147 | case 5: |
Alfredo_Ocegueda | 0:95d34170f70b | 148 | dis_2=~109; |
Alfredo_Ocegueda | 0:95d34170f70b | 149 | break; |
Alfredo_Ocegueda | 0:95d34170f70b | 150 | case 6: |
Alfredo_Ocegueda | 0:95d34170f70b | 151 | dis_2=~125; |
Alfredo_Ocegueda | 0:95d34170f70b | 152 | break; |
Alfredo_Ocegueda | 0:95d34170f70b | 153 | case 7: |
Alfredo_Ocegueda | 0:95d34170f70b | 154 | dis_2=~7; |
Alfredo_Ocegueda | 0:95d34170f70b | 155 | break; |
Alfredo_Ocegueda | 0:95d34170f70b | 156 | case 8: |
Alfredo_Ocegueda | 0:95d34170f70b | 157 | dis_2=~127; |
Alfredo_Ocegueda | 0:95d34170f70b | 158 | break; |
Alfredo_Ocegueda | 0:95d34170f70b | 159 | case 9: |
Alfredo_Ocegueda | 0:95d34170f70b | 160 | dis_2=~103; |
Alfredo_Ocegueda | 0:95d34170f70b | 161 | break; |
Alfredo_Ocegueda | 0:95d34170f70b | 162 | } |
Alfredo_Ocegueda | 0:95d34170f70b | 163 | return dis_2; |
Alfredo_Ocegueda | 0:95d34170f70b | 164 | } |