Gabriel Lopez
/
TP1 - Ejercicio1
Ejercicio realizado por: HU, Julian y LOPEZ, Gabriel.
main.cpp@0:2cc6f1868496, 2019-06-27 (annotated)
- Committer:
- GabiLopez
- Date:
- Thu Jun 27 19:35:17 2019 +0000
- Revision:
- 0:2cc6f1868496
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
GabiLopez | 0:2cc6f1868496 | 1 | //Incluyo las librerias a utilizar |
GabiLopez | 0:2cc6f1868496 | 2 | #include "mbed.h" |
GabiLopez | 0:2cc6f1868496 | 3 | #include "DS1820.h" |
GabiLopez | 0:2cc6f1868496 | 4 | |
GabiLopez | 0:2cc6f1868496 | 5 | DS1820 probe(A0); //Defino el pin digital de entrada del sensor de temperatura. A0=PTB0. |
GabiLopez | 0:2cc6f1868496 | 6 | AnalogIn preset(A1); //Defino el pin de entrada analógico del preset. A1=PTB1. |
GabiLopez | 0:2cc6f1868496 | 7 | |
GabiLopez | 0:2cc6f1868496 | 8 | InterruptIn cooler(PTD4); // Defino la interrupcion de entrada para la salida del sensor hall |
GabiLopez | 0:2cc6f1868496 | 9 | |
GabiLopez | 0:2cc6f1868496 | 10 | DigitalIn pulsador(PTC7); //Defino la entrada digital del pulsador. |
GabiLopez | 0:2cc6f1868496 | 11 | PwmOut motor(PTA13); //Salida PWM para alimentar el motor con su interfaz. |
GabiLopez | 0:2cc6f1868496 | 12 | |
GabiLopez | 0:2cc6f1868496 | 13 | Ticker pulso; //Ticker utilziado para detectar si se presiono el pulsador. |
GabiLopez | 0:2cc6f1868496 | 14 | Ticker llamo; //Ticker utilziado para llamar a uno de los lazos cada cierto tiempo. |
GabiLopez | 0:2cc6f1868496 | 15 | |
GabiLopez | 0:2cc6f1868496 | 16 | |
GabiLopez | 0:2cc6f1868496 | 17 | void velocidad(); //Prototipo de la funcion velocidad. |
GabiLopez | 0:2cc6f1868496 | 18 | void detector(); //Prototipo de la funcion detector. |
GabiLopez | 0:2cc6f1868496 | 19 | void lazo(); //Prototipo de la funcion lazo. |
GabiLopez | 0:2cc6f1868496 | 20 | |
GabiLopez | 0:2cc6f1868496 | 21 | //Defino todas las variables: |
GabiLopez | 0:2cc6f1868496 | 22 | int verificacion=0, modo=0, rebote=0; |
GabiLopez | 0:2cc6f1868496 | 23 | int vuelta=0, pulsos=0, temperatura=0; |
GabiLopez | 0:2cc6f1868496 | 24 | |
GabiLopez | 0:2cc6f1868496 | 25 | |
GabiLopez | 0:2cc6f1868496 | 26 | int main() |
GabiLopez | 0:2cc6f1868496 | 27 | { |
GabiLopez | 0:2cc6f1868496 | 28 | //Habilito las interrupciones. |
GabiLopez | 0:2cc6f1868496 | 29 | __enable_irq(); |
GabiLopez | 0:2cc6f1868496 | 30 | //Cada vez que recibe un flanco ascendente del motor, interrumpe. |
GabiLopez | 0:2cc6f1868496 | 31 | cooler.rise(&velocidad); |
GabiLopez | 0:2cc6f1868496 | 32 | //Cada 10ms se fija el estado del pulsador. |
GabiLopez | 0:2cc6f1868496 | 33 | pulso.attach(&detector,0.01); |
GabiLopez | 0:2cc6f1868496 | 34 | //R de pull-up interno |
GabiLopez | 0:2cc6f1868496 | 35 | pulsador.mode(PullUp); |
GabiLopez | 0:2cc6f1868496 | 36 | //Cada un segundos, se llama a la funcion lazo. |
GabiLopez | 0:2cc6f1868496 | 37 | llamo.attach(&lazo, 1); |
GabiLopez | 0:2cc6f1868496 | 38 | //En el while (true) no hay nada. |
GabiLopez | 0:2cc6f1868496 | 39 | while(true) {} |
GabiLopez | 0:2cc6f1868496 | 40 | } |
GabiLopez | 0:2cc6f1868496 | 41 | |
GabiLopez | 0:2cc6f1868496 | 42 | //Funcion que detecta si se presiona el pulsador ademas de eliminarle el rebote. |
GabiLopez | 0:2cc6f1868496 | 43 | void detector() |
GabiLopez | 0:2cc6f1868496 | 44 | { |
GabiLopez | 0:2cc6f1868496 | 45 | if (pulsador==0 && verificacion==0) { |
GabiLopez | 0:2cc6f1868496 | 46 | verificacion=1; |
GabiLopez | 0:2cc6f1868496 | 47 | rebote=4; |
GabiLopez | 0:2cc6f1868496 | 48 | } |
GabiLopez | 0:2cc6f1868496 | 49 | if (pulsador==0 && verificacion==1) { |
GabiLopez | 0:2cc6f1868496 | 50 | if (rebote>0) |
GabiLopez | 0:2cc6f1868496 | 51 | rebote--; |
GabiLopez | 0:2cc6f1868496 | 52 | } |
GabiLopez | 0:2cc6f1868496 | 53 | if(rebote==0 && verificacion==1 && pulsador==1) { |
GabiLopez | 0:2cc6f1868496 | 54 | verificacion=0; |
GabiLopez | 0:2cc6f1868496 | 55 | modo=!modo; //Invierte el modo de operacion de lazo cerrado a abierto y viceversa. |
GabiLopez | 0:2cc6f1868496 | 56 | } |
GabiLopez | 0:2cc6f1868496 | 57 | } |
GabiLopez | 0:2cc6f1868496 | 58 | |
GabiLopez | 0:2cc6f1868496 | 59 | void lazo() |
GabiLopez | 0:2cc6f1868496 | 60 | { |
GabiLopez | 0:2cc6f1868496 | 61 | vuelta=pulsos/2*60; //El micro recibe dos pulsos del sensor hall del motor cada vez que da una vuelta. |
GabiLopez | 0:2cc6f1868496 | 62 | |
GabiLopez | 0:2cc6f1868496 | 63 | if (modo==0) { //Cuando el modo es el de lazo abierto |
GabiLopez | 0:2cc6f1868496 | 64 | probe.convertTemperature(false, DS1820::all_devices); //Obtiene la temperatura y la almacena en probe.temperature |
GabiLopez | 0:2cc6f1868496 | 65 | temperatura = probe.temperature(); //Guardo dicha temperatura en otra variable |
GabiLopez | 0:2cc6f1868496 | 66 | printf("%3.1f grados", probe.temperature()); //Imprimo la temperatura |
GabiLopez | 0:2cc6f1868496 | 67 | printf(" %1.2f porciento",preset.read()*100); //Espacios de decoracion e imprimo el porcentaje de PWM |
GabiLopez | 0:2cc6f1868496 | 68 | printf(" %d rpm\n",vuelta); //Espacios de decoracion e imprimo las rpm |
GabiLopez | 0:2cc6f1868496 | 69 | if (preset<0.1) { //Si el valor del preset es menor al 10%, apago el motor |
GabiLopez | 0:2cc6f1868496 | 70 | motor=1; |
GabiLopez | 0:2cc6f1868496 | 71 | } else { //En caso contrario |
GabiLopez | 0:2cc6f1868496 | 72 | motor=1-preset.read(); //El motor es controlado por PWM por el preset. |
GabiLopez | 0:2cc6f1868496 | 73 | if (preset>0.95) { //Y si la entrada es mayor al 95%, la velocidad del motor máxima |
GabiLopez | 0:2cc6f1868496 | 74 | motor=0; //(Velocidad máxima) |
GabiLopez | 0:2cc6f1868496 | 75 | } |
GabiLopez | 0:2cc6f1868496 | 76 | } |
GabiLopez | 0:2cc6f1868496 | 77 | } |
GabiLopez | 0:2cc6f1868496 | 78 | if (modo==1) { //Cuando el modo es el de lazo cerrado |
GabiLopez | 0:2cc6f1868496 | 79 | probe.convertTemperature(false, DS1820::all_devices); //Obtiene la temperatura y la almacena en probe.temperature |
GabiLopez | 0:2cc6f1868496 | 80 | temperatura = probe.temperature(); //Guardo dicha temperatura en otra variable |
GabiLopez | 0:2cc6f1868496 | 81 | printf("%3.1f grados", probe.temperature()); //Espacios de decoracion e imprimo la temperatura. |
GabiLopez | 0:2cc6f1868496 | 82 | printf(" %d rpm\n",vuelta); //Espacios de decoracion e imprimo las rpm. |
GabiLopez | 0:2cc6f1868496 | 83 | |
GabiLopez | 0:2cc6f1868496 | 84 | if (temperatura>=20 && temperatura<=70) //Si la temperatura es mayor a 20 y menor a 70, una cuenta determina la velocidad |
GabiLopez | 0:2cc6f1868496 | 85 | motor=1-((0.0178*temperatura)-0.246); //(Esta es la cuenta) |
GabiLopez | 0:2cc6f1868496 | 86 | |
GabiLopez | 0:2cc6f1868496 | 87 | if (temperatura<20) //Cuando la temperatura es menor a 20, se apaga el motor |
GabiLopez | 0:2cc6f1868496 | 88 | motor=1; //Motor apagado |
GabiLopez | 0:2cc6f1868496 | 89 | |
GabiLopez | 0:2cc6f1868496 | 90 | if (temperatura>70) //Si la temperatura es mayor a 70 grados |
GabiLopez | 0:2cc6f1868496 | 91 | motor=0; //El motor gira a la maxima velocidad |
GabiLopez | 0:2cc6f1868496 | 92 | } |
GabiLopez | 0:2cc6f1868496 | 93 | vuelta=0; //Reseteo la variable vueltas para que empiece a contar nuevamente |
GabiLopez | 0:2cc6f1868496 | 94 | pulsos=0; //Reseteo la variable pulsos para que empiece a contar nuevamente |
GabiLopez | 0:2cc6f1868496 | 95 | } |
GabiLopez | 0:2cc6f1868496 | 96 | |
GabiLopez | 0:2cc6f1868496 | 97 | //Se entra a esta funcion cada vez que el motor da media vuelta. |
GabiLopez | 0:2cc6f1868496 | 98 | void velocidad() |
GabiLopez | 0:2cc6f1868496 | 99 | { |
GabiLopez | 0:2cc6f1868496 | 100 | pulsos++; //Suma uno a la variable "pulsos" que luego va a ser dividida. |
GabiLopez | 0:2cc6f1868496 | 101 | |
GabiLopez | 0:2cc6f1868496 | 102 | if (modo==0) { |
GabiLopez | 0:2cc6f1868496 | 103 | if (preset<0.1) { //Si el valor del preset es menor al 10%, apago el motor |
GabiLopez | 0:2cc6f1868496 | 104 | motor=1; |
GabiLopez | 0:2cc6f1868496 | 105 | } else { //En caso contrario |
GabiLopez | 0:2cc6f1868496 | 106 | motor=1-preset.read(); //El motor es controlado por PWM por el preset. |
GabiLopez | 0:2cc6f1868496 | 107 | if (preset>0.95) { //Y si la entrada es mayor al 95%, la velocidad del motor máxima |
GabiLopez | 0:2cc6f1868496 | 108 | motor=0; //(Velocidad máxima) |
GabiLopez | 0:2cc6f1868496 | 109 | } |
GabiLopez | 0:2cc6f1868496 | 110 | } |
GabiLopez | 0:2cc6f1868496 | 111 | } |
GabiLopez | 0:2cc6f1868496 | 112 | |
GabiLopez | 0:2cc6f1868496 | 113 | if (modo==1) { |
GabiLopez | 0:2cc6f1868496 | 114 | if (temperatura>=20 && temperatura<=70) //Si la temperatura es mayor a 20 y menor a 70, una cuenta determina la velocidad |
GabiLopez | 0:2cc6f1868496 | 115 | motor=1-((0.0178*temperatura)-0.246); //(Esta es la cuenta) |
GabiLopez | 0:2cc6f1868496 | 116 | |
GabiLopez | 0:2cc6f1868496 | 117 | if (temperatura<20) //Cuando la temperatura es menor a 20, se apaga el motor |
GabiLopez | 0:2cc6f1868496 | 118 | motor=1; //Motor apagado |
GabiLopez | 0:2cc6f1868496 | 119 | |
GabiLopez | 0:2cc6f1868496 | 120 | if (temperatura>70) //Si la temperatura es mayor a 70 grados |
GabiLopez | 0:2cc6f1868496 | 121 | motor=0; //El motor gira a la maxima velocidad |
GabiLopez | 0:2cc6f1868496 | 122 | } |
GabiLopez | 0:2cc6f1868496 | 123 | } |
GabiLopez | 0:2cc6f1868496 | 124 | |
GabiLopez | 0:2cc6f1868496 | 125 |