Ejercicio realizado por: HU, Julian y LOPEZ, Gabriel.

Dependencies:   mbed DS1820

Committer:
GabiLopez
Date:
Thu Jun 27 19:35:17 2019 +0000
Revision:
0:2cc6f1868496

        

Who changed what in which revision?

UserRevisionLine numberNew 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