ESTE PROGRAMA VA A CONTROLAR LAS VARIABLES DE HUMEDAD Y TEMPERATURA SET POINT POR EL USUARIO A TRAVES DE UNA INTERFAZ

Dependencies:   mbed TextLCD Keypad DS1307 DHT11

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 ////////////////////////////////// LIBRERIAS DEL PROYECTO///////////////////////////////////////////////////////
00002 #include "mbed.h"// libreria principal mbed
00003 #include "TextLCD.h"// libreria lcd
00004 #include "Keypad.h"// libreria Keypad
00005 #include "DHT11.h"// libreria sensor de humedad y temperatura
00006 #include "math.h"// libreria matematicas
00007 #include "ds1307.h"// libreria rtc ds1307
00008 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
00009 /////////////////////////////////  CONFIGURACION DE  GPIO ///////////////////////////////////////////////////////
00010 Serial pc(PA_2,PA_3);// configuracion de pines de Tx,Rx de comunicacion serial 
00011 DigitalOut myled(PD_13);// configura salida digital y asigna a myled al pin d13
00012 TextLCD lcd(PB_7,PB_8,PB_15,PB_14,PB_13,PB_12,TextLCD:: LCD16x2);// configuracion de conexion de lcd
00013 Keypad  teclado(PC_8,PC_11,PC_7,PC_6,PB_0,PD_6,PD_7,PB_3);//configuraciones de pines de teclado
00014 DHT11 dato(PC_5);// configuracion de pin de data sensor 
00015 DS1307 my1307(PB_7,PB_8);// configuracion de pines de comunicacion I2C(sda,scl)
00016 Ticker flipper1;// configuracion de funcion ticker(interrupcion) 
00017 Ticker flipper2;// configuracion de funcion ticker(interrupcion)  
00018 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
00019 //////////////////////////     DECLARACION DE VARIABLES GLOBALES ////////////////////////////////////////////////
00020 int rtc=0;
00021 int sec=0;
00022 int mins=0;
00023 int hours=0;
00024 int day=0;
00025 int date=0;
00026 int month=0;
00027 int year=0;
00028 int muestreo;
00029 int z;
00030 char key;// variable usada en el teclado 
00031 int released;// variable usada en el teclado 
00032 int s; // variable usada en rutina sensor 
00033 int temp;//
00034 int temp1;//
00035 int hum;//
00036 int avrtemp;//
00037 int avrhum;//
00038 int conteo;//
00039 //////////////////////////////Declaracion de funciones///////////////////////////////////////////////////////////
00040 void test_rw(int test);
00041 void lecturads1307();
00042 
00043 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
00044 ////////////////////////////////////////// SUB-RUTina lectura DS1307/////////////////////////////////////////////
00045  void lecturads1307(){
00046        my1307.gettime(&sec,&mins,&hours,&day,&date,&month,&year);
00047        pc.printf("DATE:\r"); 
00048        pc.printf("%.2D",day);
00049        pc.printf(":%.2D",month);
00050        pc.printf(":%.2D\r",year);
00051        pc.printf(" %.2D",hours);
00052        pc.printf(":%.2D",mins);
00053        pc.printf(":%.2D\n\r",sec);
00054        }  
00055 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////  
00056 ////////////////////////////////////////// SUB-RUTina INTERRUPCION2/////////////////////////////////////////////
00057 void flip2(){
00058        conteo=conteo + 1;
00059        temp1=dato.readTemperature();
00060        muestreo=muestreo+temp1;
00061     if (conteo==1000){
00062         avrtemp=(muestreo/conteo) ;
00063         pc.printf("*PROMEDIO DE TEMPERATURA: \r");  
00064         pc.printf("%2d C \r ",avrtemp); 
00065         conteo=0;
00066         }
00067 }
00068 
00069 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
00070 ////////////////////////////////////////// SUB-RUTina INTERRUPCION1/////////////////////////////////////////////
00071 void flip1(){
00072     
00073        pc.printf("**********SE REALIZO REGISTRO DE DATOS********** \n\r");    
00074        pc.printf("Temperatura:%d C \r ",dato.readTemperature());
00075        pc.printf("Humedad:%d Hr \r ",dato.readHumidity());
00076        pc.printf("DATE:\r"); 
00077        pc.printf("%.2D",day);
00078        pc.printf(":%.2D",month);
00079        pc.printf(":%.2D\r",year);
00080        pc.printf(" %.2D",hours);
00081        pc.printf(":%.2D",mins);
00082        pc.printf(":%.2D\n\r",sec);
00083        pc.printf("**********FIN DE REGISTRO DE DATOS**********\n\r");    
00084            
00085 }
00086 //////////////////////////////////////////////////////////////////////////////////////////////////////////////
00087 ////////////////////////////////////////// SUB-RUTina test DS1307/////////////////////////////////////////////
00088  void test_rw(int test){
00089         if(test==0) pc.printf("Last R/W operation passed\n\r");
00090         else pc.printf("Last R/W operation failed\n\r");
00091        }  
00092 //////////////////////////////////////////////////////////////////////////////////////////////////////////////  
00093 ///////////////////////// SUB-RUTina DS1307 calibracion de tiempo/////////////////////////////////////////////
00094      void DS1307RTC(){
00095        int junk=0;
00096        sec= 40;
00097        mins= 40;
00098        hours=10;
00099        day=6;
00100        date=15;
00101        month=2;
00102        year=20;
00103        test_rw(my1307.settime(sec,mins,hours,day,date,month,year));
00104        pc.printf("seconds  set are %.2D\n\r",sec);
00105        pc.printf("minutes  set are %.2D\n\r",mins);
00106        pc.printf("hours  set are %.2D\n\r",hours);
00107        pc.printf("day  set are %.2D\n\r",day);
00108        pc.printf("date  set are %.2D\n\r",date);
00109        pc.printf("month  set are %.2D\n\r",month);
00110        pc.printf("year  set are %.2D\n\r",year);
00111        wait(3);
00112        
00113      //while(1){
00114        test_rw(my1307.gettime(&sec,&mins,&hours,&day,&date,&month,&year));
00115        pc.printf("seconds  set are %.2D \n\r",sec);
00116        pc.printf("minutes  set are %.2D\n\r",mins);
00117        pc.printf("hours  set are %.2D\n\r",hours);
00118        pc.printf("day  set are %.2D\n\r",day);
00119        pc.printf("date  set are %.2D\n\r",date);
00120        pc.printf("month  set are %.2D\n\r",month);
00121        pc.printf("year  set are %.2D\n\r",year);
00122        
00123        junk= 0x39;
00124        test_rw(my1307.write(0x20,junk));
00125        pc.printf("Value written to register 0x20 %.2x \n\r",junk);
00126        junk=0;
00127        test_rw(my1307.read(0x20,&junk));
00128        pc.printf("Value read from register 0x20 %.2x \n\r",junk);
00129     wait(1);
00130     rtc=1;
00131     //}     
00132             //}          
00133     }
00134           
00135 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
00136 ////////////////////////////////////////// SUB-RUTina keypad////////////////////////////////////////////////////
00137      void keypad1(){
00138       // while(1){
00139         key=teclado.ReadKey();
00140         if(key== '\0')
00141           released=1;
00142         if((key!= '\0')&& (released==1)){
00143             lcd.printf("%c\n",key);
00144             released=0;
00145             }     
00146             //}          
00147     }
00148           
00149 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
00150 ////////////////////////////////////////// SUB-RUTina SENSORE DHT11/////////////////////////////////////////////
00151      void sensor(){
00152         s=dato.readData();
00153         if (s != DHT11::OK){
00154             lcd.printf("ERROR SENSOR\r\n");
00155         }    
00156         else{
00157            lcd.cls();
00158            return;
00159         }
00160         pc.printf("Temperatura:%d C \r ",dato.readTemperature());
00161        //lcd.locate(0,1);
00162        //lcd.printf( "Hr:%d hr SP: 75 ",dato.readHumidity());
00163        pc.printf("Humedad:%d Hr \r ",dato.readHumidity());
00164     }
00165           
00166 ////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
00167 ////////////////////////////////////////// SUB-RUTINA MENU///////////////////////////////////////////////////
00168  void menu(){
00169       //char tr;
00170       while(1){
00171         key=teclado.ReadKey();  
00172         keypad1();
00173         if(key=='D' ){
00174         lcd.cls();
00175         return;
00176         }
00177         //tr=key;
00178         //void inicial(); 
00179         lcd.locate(0,0);// LOCALIZA INICIO DE TEXTO EN COLUMNAS  Y FILAS
00180         lcd.printf( "      Menu  " );
00181         lcd.locate(0,1);
00182        // lcd.printf( "  Configuracion " );
00183         //lcd.printf("%c\n", tr );
00184         //wait(3);
00185         //lcd.cls();//borra caracters
00186         if((key!= '\0')&& (released==1)){
00187             lcd.printf("%c\n",key);
00188             released=0;
00189             }          
00190        }           
00191           
00192     }
00193           
00194 ///////////////////////////////////////////////////////////////////////////////////////////////////////
00195 //////////////////////////////////// SUB-RUTINA INICIAL ///////////////////////////////////////////////
00196  void inicial(){
00197    while(1){
00198         //lcd.cls();
00199         //keypad1();
00200         
00201        //if ( key=='A'){
00202          //lcd.cls();                        //borra caracters
00203          //menu();
00204          //}
00205          
00206        sensor();
00207        lecturads1307();    
00208        //temp:dato.readTemperature();
00209        //hum: dato.readHumidity();   
00210        //lcd.locate(0,0);                   // LOCALIZA INICIO DE TEXTO EN COLUMNAS  Y FILAS
00211        //lcd.printf( "T :%d C  SP: 40",dato.readTemperature());
00212        //pc.printf("Temperatura:%d C \r ",dato.readTemperature());
00213        //lcd.locate(0,1);
00214        //lcd.printf( "Hr:%d hr SP: 75 ",dato.readHumidity());
00215        //pc.printf("Humedad:%d Hr \r ",dato.readHumidity());
00216        wait(1);
00217             
00218         }                                 // cierra while
00219 }                                        //  cierra rutina
00220 
00221 /////////////////////////////////////////////////////////////////////////////////////////////////////
00222 //////////////////////////////////// RUTINA  PRINCIPAL //////////////////////////////////////////////
00223 int main() {
00224     z=0;
00225     conteo=0;
00226     muestreo=0;
00227     avrtemp=0;
00228     avrhum=0;
00229     released=1;
00230     //lcd.printf("helllooo people");// escribe caracteres en el lcd 
00231     flipper1.attach(&flip1,20.0);
00232     flipper2.attach(&flip2,0.001);
00233     while(1) {
00234         
00235         //if (rtc==0) DS1307RTC();
00236    //  lcd.cls();//borra caracters
00237       //lcd.locate(0,0);// LOCALIZA INICIO DE TEXTO EN COLUMNAS  Y FILAS
00238       //lcd.printf( "    Proyecto " );
00239       pc.printf("PROYECTO TUTORIA\n\r " );
00240       //lcd.locate(0,1);
00241       //lcd.printf( "    Tutoria " );
00242       //pc.printf("Tutoria \n\r ");
00243        wait(3);
00244       //lcd.cls();//borra caracters
00245       //lcd.locate(0,0);
00246       //lcd.printf( "    Sistemas " );
00247       pc.printf("SISTEMAS MICROPROCESADOS \n\r ");
00248       pc.printf("GEOVANNY GARCIA \n\r ");
00249       
00250       lcd.locate(0,1);
00251       lcd.printf( "Microprocesados " );
00252       //pc.printf("MICROPORCESADOS \n\r ");
00253       wait(2);
00254       //lcd.cls();//borra caracters
00255       inicial();
00256      
00257       }      
00258         
00259     }
00260      
00261 ///////////////////////////////////////////////////////////////////////////////////////////////////////
00262 
00263 
00264