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.
Dependencies: mbed tsi_sensor DS1820
Revision 6:3ebdc74fd68f, committed 2019-05-30
- Comitter:
- Franmaver
- Date:
- Thu May 30 22:43:23 2019 +0000
- Parent:
- 5:ea823404aea8
- Commit message:
- TP1_ejer1
Changed in this revision
| DS1820.lib | Show annotated file Show diff for this revision Revisions of this file |
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/DS1820.lib Wed May 22 13:53:10 2019 +0000 +++ b/DS1820.lib Thu May 30 22:43:23 2019 +0000 @@ -1,1 +1,1 @@ -http://mbed.org/users/Sissors/code/DS1820/#c591209285e9 +https://os.mbed.com/teams/samdean/code/DS1820/#08c7dd8ccb4c
--- a/main.cpp Wed May 22 13:53:10 2019 +0000
+++ b/main.cpp Thu May 30 22:43:23 2019 +0000
@@ -1,10 +1,11 @@
-
#include "mbed.h"
#include "DS1820.h"
#include "tsi_sensor.h"
-DS1820 probe(PTB0);
-
+//defino entradas
+DS1820 probe(PTD4);
+AnalogIn preset(PTC1);
+DigitalIn sensor_cooler(PTA12);
/* This defines will be replaced by PinNames soon */
#if defined (TARGET_KL25Z) || defined (TARGET_KL46Z)
@@ -17,18 +18,230 @@
#error TARGET NOT DEFINED
#endif
-PwmOut salida1(LED_RED);
-TSIAnalogSlider tsi(ELEC0, ELEC1, 40);
-DigitalOut verde(LED_GREEN);
-DigitalOut azul(LED_BLUE);
+//general
+enum maquina_de_estados_general {inicio1, lazo_abierto, lazo_cerrado};
+maquina_de_estados_general maquina_general;
+void funcion_general();
+int pulsador = 0;
+
+//lazo_cerrado
+enum maquina_de_estados_lazo_cerrado {inicio2, detecto_valor_temp, cooler_200rpm, cooler_vel_max, cooler_vel_aumenta_lineal};
+maquina_de_estados_lazo_cerrado maquina_lazo_cerrado;
+void funcion_lazo_cerrado();
+float detecto_temp();
+int cambio_a_lazo_cerrado = 0;
+float temperatura = 0.0;
+float rpm = 0;
+float duty = 0;
+float valor = 0.0;
+
+//lazo abierto
+enum maquina_de_estados_lazo_abierto {inicio3, detecto_valor_pote, vario_vel_cooler};
+maquina_de_estados_lazo_abierto maquina_lazo_abierto;
+void funcion_lazo_abierto();
+int cambio_a_lazo_abierto = 0;
+
+//ticker
+Ticker tiempo;
+int contador = 0;
+int a = 0;
+
+
+PwmOut salida1(PTB3);//defino el cooler como salida
+TSIAnalogSlider tsi(ELEC0, ELEC1, 40);//defino TSI
-
-int main() {
+//defino variables para poder medir las RPM
+int cuento_rpm() ;
+int rpm_tot = 0;
+int rpmm = 0;
+int contador2 = 0;
+
+//funcion para saber las RPM
+void funcion_tiempo()
+{
+ contador2++;
+ rpmm = rpm_tot*60;//rpm_tot en 1 segundo, multiplico por 60 para que sea un minuto (RPM)
+ rpm_tot = 0;
+}
+int main()
+{
+ salida1 = 1.0;//comienza el programa con el cooler encendido
+ wait(2);//un wait fuera del while, que no afecta el programa
+ tiempo.attach(&funcion_tiempo, 1);
+
while(1) {
- probe.convertTemperature(true, DS1820::all_devices); //Start temperature conversion, wait until ready
- printf("It is %3.1foC\r\n", probe.temperature());
- wait(1);
+ //reconozco los flancos del sensor de RPM
+ if((sensor_cooler == 1) && (a == 0)) {
+ rpm_tot++;
+ a = 1;
+ }
+ else if((sensor_cooler == 0) && (a == 1))
+ a = 0;
+
+ funcion_general();
+ funcion_lazo_cerrado();
+ funcion_lazo_abierto();
}
}
+//funcion que devuelve la temperatura
+float detecto_temp()
+{
+ if(contador2 == 1)
+ probe.convertTemperature(true, DS1820::all_devices); //Start temperature conversion, wait until ready
+ printf(" temperatura: %3.1f", probe.temperature());
+ contador2 = 0;
+ return probe.temperature();
+}
-//#endif
\ No newline at end of file
+//funcion de la máquina de estados general
+void funcion_general()
+{
+ switch(maquina_general) {
+
+ default:
+ maquina_general = inicio1;
+ break;
+
+ case inicio1:
+ //apreto TSI para dar inicio al sistema
+ if(tsi.readPercentage() != 0) {
+ cambio_a_lazo_cerrado = 1;
+ maquina_general = lazo_cerrado;
+ }
+ break;
+
+ case lazo_cerrado:
+ //entrta al if cuando estoy en el modo lazo cerrado
+ //y se presiona el TSI
+ if(cambio_a_lazo_cerrado == 0) {
+ cambio_a_lazo_abierto = 1;
+ maquina_general = lazo_abierto;
+ }
+
+ ///////PARA CAMBIAR DE MODO//////
+ if(tsi.readPercentage() >= 0.5) {
+ cambio_a_lazo_cerrado = 0;
+ maquina_lazo_cerrado = inicio2;
+ }
+ /////////////////////////////////
+ break;
+
+ case lazo_abierto:
+ //entrta al if cuando estoy en el modo lazo abierto
+ //y se presiona el TSI
+ if(cambio_a_lazo_abierto == 0) {
+ cambio_a_lazo_cerrado = 1;
+ maquina_general = lazo_cerrado;
+ }
+
+ ///////PARA CAMBIAR DE MODO//////
+ if((tsi.readPercentage() <= 0.4) && (tsi.readPercentage() != 0)) {
+ cambio_a_lazo_abierto = 0;
+ maquina_lazo_abierto = inicio3;
+ }
+ /////////////////////////////////
+ break;
+ }
+}
+//funcion del modo lazo cerrado
+void funcion_lazo_cerrado()
+{
+ switch (maquina_lazo_cerrado) {
+
+ default:
+ maquina_lazo_cerrado = inicio2;
+ break;
+
+ case inicio2:
+ if (cambio_a_lazo_cerrado == 1) {
+ printf("\n\rLAZO CERRADO\r\n");
+ maquina_lazo_cerrado = detecto_valor_temp;
+ }
+ break;
+
+ case detecto_valor_temp:
+ temperatura = detecto_temp();
+ if(temperatura <= 20) { //cooler 200rpm
+ maquina_lazo_cerrado = cooler_200rpm;
+ }
+ if(temperatura >= 70) { //cooler maximo
+ maquina_lazo_cerrado = cooler_vel_max;
+ }
+ if((temperatura > 20) && (temperatura < 70))//cooler varia
+ maquina_lazo_cerrado = cooler_vel_aumenta_lineal;
+ break;
+
+ case cooler_200rpm:
+ //el cooler a 200RPM
+ salida1.write(0.0222);
+
+ printf(" RPM = %d",rpmm);
+
+ maquina_lazo_cerrado = detecto_valor_temp;
+ break;
+
+ case cooler_vel_max:
+ //cooler a maxima RPM
+ salida1 = 1.0;
+
+ printf("RPM = %d",rpmm);
+
+ maquina_lazo_cerrado = detecto_valor_temp;
+
+ break;
+
+ case cooler_vel_aumenta_lineal:
+ //cooler aumenta segun la temperatura
+ rpm = ((temperatura * 200) / 20);
+
+ duty = ((rpm * 100) / 9000);
+
+ valor = (duty / 10);
+
+ salida1.write(valor);
+
+ printf(" RPM: %f ",rpm);
+
+ maquina_lazo_cerrado = detecto_valor_temp;
+ break;
+ }
+}
+//modo lazo abierto
+void funcion_lazo_abierto()
+{
+ switch(maquina_lazo_abierto) {
+
+ default:
+ maquina_lazo_abierto = inicio3;
+ break;
+
+ case inicio3:
+ if(cambio_a_lazo_abierto == 1) {
+ printf("LAZO_ABIERTO\n");
+ maquina_lazo_abierto = detecto_valor_pote;
+
+ }
+ break;
+
+ case detecto_valor_pote:
+ //si el pote esta por debajo de 0,2 (pasado con el ADC
+ //cooler con 200 RPM
+ if(preset <= 0.0222) {
+ salida1.write(0.222);
+ printf(" RPM: %d",rpmm);
+ } else {
+ maquina_lazo_abierto = vario_vel_cooler;
+ }
+ break;
+
+ case vario_vel_cooler:
+
+ salida1.write(preset);//vario cooler segun preset
+
+ printf(" RPM: %d",rpmm);
+
+ maquina_lazo_abierto = detecto_valor_pote;
+
+ break;
+ }
+}
\ No newline at end of file