Arlindo Montagnoli / Mbed 2 deprecated ProjetoBB

Dependencies:   F7_Ethernet WebSocketClient mbed mcp3008

Fork of Nucleo_F746ZG_Ethernet by Dieter Graef

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "rtos.h"
00003 #include "EthernetInterface.h"
00004 #include "NTPClient.h"
00005 #include "Websocket.h"
00006 #include <stdio.h>
00007 #include "SimpleSMTPClient.h"
00008 
00009 #define SERIAL 4
00010 #define SIGNAL_LEN 256
00011 
00012 #define DOMAIN "smtp2go.com"
00013 #define SERVER "mail.smtp2go.com"//"aspmx.l.google.com" 
00014 #define PORT "2525" // Port 25 doesn't require TSL
00015 #define USER "arlindonm"
00016 #define PWD "SmartMeter"
00017 #define FROM_ADDRESS "arlindonm@smtp2go.com"
00018 // less than 128 characters.
00019 #define TO_ADDRESS "arlindonm@gmail.com" 
00020 #define SUBJECT "EnergySmartMeter msg"
00021 
00022 IWDG_HandleTypeDef hiwdg;
00023 
00024 const char* SERVER_ADDRESS = "200.133.229.238";
00025 //const char* SERVER_ADDRESS = "192.168.1.110";
00026 const int SERVER_PORT = 1080;
00027 
00028 bool STOPEMAIL = true,flagSendNoBreak=0;
00029 
00030 Ticker tickerTensaoCorrente;
00031 
00032 //8 pinos da placa
00033 AnalogIn correnteA(PC_2);
00034 AnalogIn correnteB(PC_3);
00035 //-
00036 //tx
00037 //rx
00038 DigitalOut scale(PD_7);  
00039 DigitalOut  getVoltagem(PE_3);
00040 //gnd
00041 
00042 //4pinos da placa
00043 DigitalOut  picWatchDog(PC_11);
00044 AnalogIn tensaoA(PC_0);
00045 DigitalIn  noBreak(PD_3);
00046 //DigitalIn   xxx(PG_2);
00047 
00048 
00049 DigitalOut led1(LED1);
00050 DigitalOut led2(LED2);
00051 DigitalOut led3(LED3);
00052 int cntTick=0;
00053 int cntTickHora=0;
00054 int cntSinal=0;
00055 int cntBK=0;
00056 bool flagHorVerao=true,scaleIA=0,scaleIB=0,scaleIC=0;
00057 unsigned int energiaA = 0,energiaB=0,energiaC=0;
00058 //int vetorTensaoA[62];
00059 //int vetorTensaoB[62];
00060 //int vetorTensaoC[62];
00061 int vetorCorrenteA[62];
00062 int vetorCorrenteB[62];
00063 int vetorCorrenteC[62];
00064 
00065 
00066 int sinalVA[SIGNAL_LEN];
00067 int sinalVB[SIGNAL_LEN];
00068 int sinalVC[SIGNAL_LEN];
00069 int sinalIA[SIGNAL_LEN];
00070 int sinalIB[SIGNAL_LEN];
00071 int sinalIC[SIGNAL_LEN];
00072 
00073 //int rmsVA,rmsVB,rmsVC;
00074 int rmsIA,rmsIB,rmsIC;
00075 char serBuf[50],strTimeInterrupt[50],strTimeReturn[50],str485[300];
00076 char picCmd;
00077 
00078 bool EthernetOK=false,flagNoBreak=false;
00079     time_t seconds;
00080 bool flagSend=false;
00081 
00082 EthernetInterface eth;
00083 
00084 TCPSocketServer     server;
00085 TCPSocketConnection client;
00086 bool serverIsListening = false;
00087 
00088 DigitalOut sw(LED2); 
00089 
00090 RawSerial serial(USBTX,USBRX);//(USBTX,USBRX); //tx,rx
00091 RawSerial serialPic(PD_5,PD_6);
00092 RawSerial serialRS485(PE_8,PE_7);
00093 
00094 int cnt=0;
00095 
00096 string              httpHeader;     // HTTP header
00097 string              httpContent;    // HTTP content
00098 const string        HTTP_OK = "HTTP/1.0 200 OK";
00099 
00100 NTPClient ntp;
00101 
00102 
00103 void setClock()
00104 {
00105     
00106     int res =ntp.setTime("0.uk.pool.ntp.org");
00107     if ( res == 0)
00108     {
00109         time_t ctTime;
00110         ctTime = time(NULL);
00111         //serial.printf("Time is set to : %s \r\n", ctime(&ctTime));
00112         int fusoBR= -10800;//-3*3600 
00113         if(flagHorVerao) fusoBR= -7200;
00114         set_time(ctTime+ fusoBR);
00115         char strtime[80];
00116         time_t seconds;
00117         seconds = time(NULL);
00118         strftime(strtime, 20, "%D %H:%M:%S\n", localtime(&seconds));
00119         //serial.printf("Hora:%s", strtime);
00120     }
00121     else
00122     {
00123         serial.printf("Error getting time \r\n");
00124     }        
00125 }
00126 
00127 
00128 void getSinal()
00129 {
00130 
00131     for(int j=0;j<SIGNAL_LEN;j++)
00132     {
00133         getVoltagem=1;
00134         sinalVA[j]=(int)1000*tensaoA.read();
00135         sinalVB[j]=(int)1000*tensaoA.read();        
00136         sinalVC[j]=(int)1000*tensaoA.read();
00137         getVoltagem=0;
00138         sinalIA[j]=(int)1000*correnteA.read();
00139         sinalIB[j]=(int)1000*correnteB.read();
00140         sinalIC[j]=(int)1000*tensaoA.read();
00141         wait_us(240);  //4ciclos           
00142     }
00143 }
00144 void Rms()
00145 {
00146     
00147     getSinal();
00148     float somaVA=0,somaVB=0,somaVC=0,somaIA=0,somaIB=0,somaIC=0;
00149     float dcVA,dcVB,dcVC,dcIA,dcIB,dcIC;
00150     //DC
00151     for(int j=0;j<SIGNAL_LEN;j++)
00152     {
00153         //somaVA = somaVA + sinalVA[j];
00154         //somaVB = somaVB + sinalVB[j];
00155         //somaVC = somaVC + sinalVC[j];
00156         somaIA = somaIA + sinalIA[j];
00157         somaIB = somaIB + sinalIB[j];
00158         somaIC = somaIC + sinalIC[j];
00159     }
00160     //dcVA = somaVA/SIGNAL_LEN;
00161     //dcVB = somaVB/SIGNAL_LEN;
00162     //dcVC = somaVC/SIGNAL_LEN;
00163     dcIA = somaIA/SIGNAL_LEN;
00164     dcIB = somaIB/SIGNAL_LEN;
00165     dcIC = somaIC/SIGNAL_LEN;
00166     //serial.printf("\ndcIA = %f  dcIB = %f",dcIA,dcIB);
00167     somaVA=somaVB=somaVC=somaIA=somaIB=somaIC=0;
00168     for(int j=0;j<SIGNAL_LEN;j++)
00169     {
00170         //somaVA = somaVA + ((sinalVA[j]-dcVA) * (sinalVA[j]-dcVA));
00171         //somaVB = somaVB + ((sinalVB[j]-dcVB) * (sinalVB[j]-dcVB));
00172         //somaVC = somaVC + ((sinalVC[j]-dcVC) * (sinalVC[j]-dcVC));
00173         somaIA = somaIA + ((sinalIA[j]-dcIA) * (sinalIA[j]-dcIA));
00174         somaIB = somaIB + ((sinalIB[j]-dcIB) * (sinalIB[j]-dcIB));
00175         somaIC = somaIC + ((sinalIC[j]-dcIC) * (sinalIC[j]-dcIC));
00176     }
00177      //serial.printf("\nsomaIA = %f  somaIB = %f",somaIA,somaIB);
00178     //rmsVA =  (int)sqrt(somaVA / SIGNAL_LEN);
00179     //rmsVB =  (int)sqrt(somaVB / SIGNAL_LEN);
00180     //rmsVC =  (int)sqrt(somaVC / SIGNAL_LEN);
00181     scaleIA=scaleIB=scaleIC=0;
00182     rmsIA =  (int)sqrt(somaIA / SIGNAL_LEN);
00183     if(rmsIA> 50)
00184         scaleIA=1;
00185     rmsIB =  (int)sqrt(somaIB / SIGNAL_LEN);
00186     if(rmsIB> 50)
00187         scaleIB=1;    
00188     rmsIC =  (int)sqrt(somaIC / SIGNAL_LEN);
00189     if(rmsIC> 50)
00190         scaleIC=1;
00191     //serial.printf("\nrmsIA = %d  rmsIB = %d",rmsIA,rmsIB);
00192         
00193 }
00194 void TickTensaoCorrente()
00195 {
00196     led2=!led2;
00197                
00198     Rms();   
00199     //if(scaleIA||scaleIB||scaleIC)
00200     //    Rms();    
00201     if(rmsIA-4<2)rmsIA=4;
00202     if(rmsIB-4<2)rmsIB=4;
00203     if(rmsIC-4<2)rmsIC=4;
00204     energiaA += rmsIA-4;
00205     energiaB += rmsIB-4;
00206     energiaC += rmsIC-4;    
00207        
00208     //vetorTensaoA[cntTick]=rmsVA;
00209     //vetorTensaoB[cntTick]=rmsVB;
00210     //vetorTensaoC[cntTick]=rmsVC;
00211     vetorCorrenteA[cntTick]=rmsIA-4;
00212     vetorCorrenteB[cntTick]=rmsIB-4;
00213     vetorCorrenteC[cntTick]=rmsIC-4;
00214 
00215     cntTick++;
00216     cntTickHora++;
00217     if(cntTick>61) cntTick=0; //ERRO
00218        
00219     
00220 
00221 }
00222 
00223 int sendData()
00224 {
00225      char str[7000]=""; //A conta tem que ser certa!!!
00226      TCPSocketConnection socket;
00227     while (socket.connect(SERVER_ADDRESS, SERVER_PORT) < 0) 
00228     {
00229         serial.printf("Unable to connect to (%s) on port (%d)\n", SERVER_ADDRESS, SERVER_PORT);
00230         wait(1);
00231         return -1;
00232     }  
00233     time_t ctTime;
00234     ctTime = time(NULL);
00235     sprintf(str,"%d;%s;",SERIAL,ctime(&ctTime));
00236     
00237     /*strcat(str,"VA;"); //Nao precisa enviar a tensao pois e' quase cte a cada 5s
00238     for(int i=0;i<60;i++)
00239         sprintf(str,"%s%03d;",str,vetorTensaoA[i]);//tensao cada 5s
00240     
00241     strcat(str,"VB;");
00242     for(int i=0;i<60;i++)
00243         sprintf(str,"%s%03d;",str,vetorTensaoB[i]);//tensao cada 5s
00244     
00245     strcat(str,"VC;");
00246     for(int i=0;i<60;i++)
00247         sprintf(str,"%s%03d;",str,vetorTensaoC[i]);//tensao cada 5s
00248     */    
00249    // strcat(str,"E");
00250 
00251     sprintf(str,"%s%10d%10d%10d",str,energiaA,energiaB,energiaC);
00252     
00253     
00254     strcat(str,"IA");
00255     for(int i=0;i<60;i++)
00256         sprintf(str,"%s%03d",str,vetorCorrenteA[i]);//correntecada 10s   
00257     
00258     strcat(str,"IB");
00259     for(int i=0;i<60;i++)
00260         sprintf(str,"%s%03d",str,vetorCorrenteB[i]);//correntecada 10s
00261         
00262     strcat(str,"IC");
00263     for(int i=0;i<60;i++)
00264         sprintf(str,"%s%03d",str,vetorCorrenteC[i]);//correntecada 10s
00265         
00266     //--------------
00267     
00268     getSinal();
00269     sprintf(str,"%sSVA",str);
00270     for(int j=0;j<SIGNAL_LEN;j++)
00271         sprintf(str,"%s%03d",str,sinalVA[j]);//sinal tensao    
00272     
00273     sprintf(str,"%sSVB",str);
00274     for(int j=0;j<SIGNAL_LEN;j++)
00275         sprintf(str,"%s%03d",str,sinalVB[j]);//sinal tensao   
00276     
00277     sprintf(str,"%sSVC",str);
00278     for(int j=0;j<SIGNAL_LEN;j++)
00279         sprintf(str,"%s%03d",str,sinalVC[j]);//sinal tensao
00280     
00281     //-----------------
00282     sprintf(str,"%sSIA",str);
00283     for(int j=0;j<SIGNAL_LEN;j++)
00284         sprintf(str,"%s%03d",str,sinalIA[j]); 
00285     
00286     sprintf(str,"%sSIB",str);
00287     for(int j=0;j<SIGNAL_LEN;j++)
00288         sprintf(str,"%s%03d",str,sinalIB[j]);
00289     
00290     sprintf(str,"%sSIC",str);
00291     for(int j=0;j<SIGNAL_LEN;j++)
00292         sprintf(str,"%s%03d",str,sinalIC[j]);    
00293     
00294     
00295     sprintf(str,"%sRS485%s$\0",str,str485);      
00296     
00297     int ret = socket.send(str, sizeof(str) - 1);
00298     serial.printf("Socket send n: %d\n",ret);
00299     char buf[256];
00300     int n = socket.receive(buf, 256);
00301     buf[n] = '\0';
00302     serial.printf("Received % d message from server: '%s'\n",n, buf);
00303     socket.close();
00304     if(buf[0]=='1')
00305      STOPEMAIL=false;
00306     else
00307     STOPEMAIL = true; 
00308     
00309     if(n>=1)
00310     return 0; 
00311     else
00312     return -1;
00313     
00314 }
00315 int sendNoBreak()
00316 {
00317      TCPSocketConnection socket;
00318     while (socket.connect(SERVER_ADDRESS, SERVER_PORT) < 0) 
00319     {
00320         serial.printf("Unable to connect to (%s) on port (%d)\n", SERVER_ADDRESS, SERVER_PORT);
00321         wait(1);
00322         return -1;
00323     }  
00324     char str[256];
00325     
00326     sprintf(str,"%d;\nQueda de Energia: %s\nRetorno de Energia: %s$",SERIAL,strTimeInterrupt,strTimeReturn);
00327     socket.send(str, sizeof(str) - 1);
00328     
00329     char buf[256];
00330     int n = socket.receive(buf, 256);
00331     buf[n] = '\0';
00332     serial.printf("Received % d message from server: '%s'\n",n, buf);
00333     socket.close();
00334     if(buf[0]=='1')
00335      STOPEMAIL=false;
00336     else
00337     STOPEMAIL = true; 
00338      
00339     if(n>=1)
00340     {
00341         flagSendNoBreak = true;
00342         return 0; 
00343     }
00344     else
00345     return -1;
00346     
00347 }
00348 int sendEmail()
00349 {   
00350     /*SimpleSMTPClient smtp;
00351     int ret;
00352     char str[36560];
00353     smtp.setFromAddress(FROM_ADDRESS);
00354     smtp.setToAddress(TO_ADDRESS);
00355     
00356     smtp.setMessage(SUBJECT,"Mensagen enviada por e-mail\n");
00357 
00358     time_t ctTime;
00359     ctTime = time(NULL);
00360     sprintf(str,"Energy Smart Meter - Serial A1%04d.\nHora da placa: %s",SERIAL,ctime(&ctTime));
00361     smtp.addMessage(str);
00362     ret = smtp.sendmail(SERVER, USER, PWD, DOMAIN,PORT,SMTP_AUTH_LOGIN);
00363     strcpy(str,"VA;");
00364     for(int i=0;i<60;i++)
00365         sprintf(str,"%s%03d;",str,vetorTensaoA[i]);//tensao cada 5s
00366     smtp.appendMessage(str);
00367     strcpy(str,"VB;");
00368     for(int i=0;i<60;i++)
00369         sprintf(str,"%s%03d;",str,vetorTensaoB[i]);//tensao cada 5s
00370     smtp.appendMessage(str);
00371     strcpy(str,"VC;");
00372     for(int i=0;i<60;i++)
00373         sprintf(str,"%s%03d;",str,vetorTensaoC[i]);//tensao cada 5s
00374     smtp.appendMessage(str);
00375     
00376     strcpy(str,"IA;");
00377     for(int i=0;i<60;i++)
00378         sprintf(str,"%s%03d;",str,vetorCorrenteA[i]);//corrente cada 5s
00379     smtp.appendMessage(str);
00380     
00381     strcpy(str,"IB;");
00382     for(int i=0;i<60;i++)
00383         sprintf(str,"%s%03d;",str,vetorCorrenteB[i]);//corrente cada 5s
00384     smtp.appendMessage(str);
00385     
00386     strcpy(str,"IC;");
00387     for(int i=0;i<60;i++)
00388         sprintf(str,"%s%03d;",str,vetorCorrenteC[i]);//corrente cada 5s
00389     smtp.appendMessage(str);
00390     
00391     
00392     
00393     for(int i=0;i<5;i++)
00394     {
00395     sprintf(str,"SVA%d;",i);
00396     for(int j=0;j<SIGNAL_LEN;j++)
00397     {
00398         sprintf(str,"%s%03d;",str,sinalVA[i][j]);//sinal tensao
00399         
00400     }
00401     smtp.appendMessage(str);
00402     }
00403     for(int i=0;i<5;i++)
00404     {
00405     sprintf(str,"SVB%d;",i);
00406     for(int j=0;j<SIGNAL_LEN;j++)
00407     {
00408         sprintf(str,"%s%03d;",str,sinalVB[i][j]);//sinal tensao
00409         
00410     }
00411     smtp.appendMessage(str);
00412     }
00413     for(int i=0;i<5;i++)
00414     {
00415     sprintf(str,"SVC%d;",i);
00416     for(int j=0;j<SIGNAL_LEN;j++)
00417     {
00418         sprintf(str,"%s%03d;",str,sinalVC[i][j]);//sinal tensao
00419         
00420     }
00421     smtp.appendMessage(str);
00422     }
00423     //-----------------
00424     for(int i=0;i<5;i++)
00425     {
00426     sprintf(str,"SIA%d;",i);
00427     for(int j=0;j<SIGNAL_LEN;j++)
00428     {
00429         sprintf(str,"%s%03d;",str,sinalIA[i][j]);//sinal corrente
00430         
00431     }
00432     smtp.appendMessage(str);
00433     }
00434     for(int i=0;i<5;i++)
00435     {
00436     sprintf(str,"SIB%d;",i);
00437     for(int j=0;j<SIGNAL_LEN;j++)
00438     {
00439         sprintf(str,"%s%03d;",str,sinalIB[i][j]);//sinal corrente
00440         
00441     }
00442     smtp.appendMessage(str);
00443     }
00444     for(int i=0;i<5;i++)
00445     {
00446     sprintf(str,"SIC%d;",i);
00447     for(int j=0;j<SIGNAL_LEN;j++)
00448     {
00449         sprintf(str,"%s%03d;",str,sinalIC[i][j]);//sinal corrente
00450         
00451     }
00452     smtp.appendMessage(str);
00453     }
00454     
00455     
00456    smtp.endMessage();
00457     if (ret) 
00458     {
00459         serial.printf("E-mail Transmission Error\r\n");
00460         return -1;           
00461     } 
00462     else
00463     {
00464         serial.printf("E-mail Transmission OK\r\n");
00465         return 0;
00466     }*/
00467 }
00468 
00469 void SerialPicReceiver()
00470 {
00471         int i=0;
00472         char c;
00473         led1=!led1;
00474         while(1)  
00475         {
00476             //if(!serialPic.readable())
00477             //    break;
00478             c=serialPic.getc();
00479             serBuf[i++] = c;
00480             if(c=='\n'||i>49) break;
00481             
00482         }
00483         
00484         
00485 }
00486 void SerialRS485Receiver()
00487 {
00488         int i=0;
00489         char c;
00490         led1=!led1;
00491         while(1)  
00492         {
00493             //if(!serialPic.readable())
00494             //    break;
00495             c=serialRS485.getc();
00496             str485[i++] = c;
00497             if(c=='\n'||i>258) break;
00498             
00499         }
00500         
00501         
00502 }
00503 void BackUpRam()
00504 {
00505     serial.printf("BackUpRam:%d",++cntBK);
00506 }
00507 int main()
00508 {
00509     serial.baud(115200);
00510     serialPic.baud(9600);
00511     
00512     led2=1;
00513     
00514 
00515  
00516 
00517     serial.printf("*** ENERGY SMART METER ***\r\n");
00518     serial.printf("Serial: %04d\n",SERIAL);
00519 
00520     if(eth.init()!=0)                    //for DHCP Server
00521     {
00522         //if(eth.init(IP,MASK,GATEWAY)!=0) { //for Static IP Address
00523         serial.printf("EthernetInterface Initialize Error \r\n");       
00524         led3=1;
00525         wait(2);
00526         NVIC_SystemReset();
00527 
00528     }
00529 
00530     if(eth.connect()!=0)
00531     {
00532         serial.printf("EthernetInterface Connect Error \r\n");
00533         led3=1;
00534         wait(2);
00535         NVIC_SystemReset();
00536 
00537        
00538     }
00539     tickerTensaoCorrente.attach(&TickTensaoCorrente,10);//cada 10s
00540     
00541     
00542     serial.printf("IP Address is %s\n", eth.getIPAddress());
00543  //   serial.printf("NetMask is %s\n", eth.getNetworkMask());
00544  //   serial.printf("Gateway Address is %s\n", eth.getGateway());
00545     //serial.printf("Ethernet Setup OK\n");
00546     //serial.printf("Getting time, 10s timeout. \r\n");
00547     setClock();
00548     int flagE=false,flagD=false;
00549 
00550 
00551 //----------
00552    serialPic.attach(&SerialPicReceiver);
00553    serialPic.printf("*");//ler eeprom
00554    wait_ms(500);
00555    //serial.printf("SB: %s\n",serBuf);
00556    char aux[11];
00557    aux[10]=0;
00558    for(int i=0;i<10;i++)
00559     aux[i] =  serBuf[i];
00560    energiaA = atoi(aux); 
00561    serial.printf("EnergiaA: %d\n",energiaA); 
00562    for(int i=0;i<10;i++)
00563     aux[i] =  serBuf[i+10];
00564    energiaB = atoi(aux); 
00565    serial.printf("EnergiaB: %d\n",energiaB); 
00566    for(int i=0;i<10;i++)
00567     aux[i] =  serBuf[i+20];
00568    energiaC = atoi(aux); 
00569    serial.printf("EnergiaC: %d\n",energiaC); 
00570    
00571    
00572    for(int i=0;i<8;i++)
00573     aux[i] =  serBuf[i+30];
00574     aux[8]=0;
00575     sprintf(strTimeInterrupt,"%s ",aux);
00576     
00577    for(int i=0;i<2;i++)
00578     aux[i] =  serBuf[i+38];
00579     aux[2] =0; 
00580     sprintf(strTimeInterrupt,"%s%s:",strTimeInterrupt,aux);
00581     for(int i=0;i<2;i++)
00582     aux[i] =  serBuf[i+40];
00583     aux[2] =0; 
00584     sprintf(strTimeInterrupt,"%s%s",strTimeInterrupt,aux);
00585    serial.printf("Data Interrupcao de energia:\t%s\n",strTimeInterrupt);  
00586     //char strtime[30];
00587     time_t seconds;
00588     seconds = time(NULL);
00589     strftime(strTimeReturn, 20, "%D %H:%M\n", localtime(&seconds));   
00590     serial.printf("Data Retorno de energia:\t%s\n", strTimeReturn);  
00591     flagSendNoBreak=false;
00592     sendNoBreak();
00593 //------
00594     serialRS485.attach(&SerialRS485Receiver);
00595     
00596     sprintf(str485,"%s","12345678901234567890123456789012345678901234567890");
00597     while(1)
00598     {
00599          if(noBreak==0 &&flagNoBreak==false)
00600         {
00601             serial.printf("Tensao Baixa\n");
00602             char strtime[14];
00603             time_t seconds;
00604             seconds = time(NULL);
00605             strftime(strtime, 14, "%D%H%M", localtime(&seconds));
00606             
00607             serialPic.printf("%10d%10d%10d%s#",energiaA,energiaB,energiaC,strtime);
00608             flagNoBreak=true;
00609             led3= 1;
00610         }
00611         
00612    
00613         if(cntTick>=60) //60 = 10minutos
00614         {  
00615                   
00616             tickerTensaoCorrente.detach();//??????????????????            
00617             cntTick=0; 
00618             
00619             serial.printf("Send data\n");  
00620             //WatchdogRefresh();   
00621             picWatchDog =0;
00622             flagD = sendData();
00623             picWatchDog =1;
00624             if(flagD!=0)  //0 = OK
00625             {
00626                 wait(0.1);
00627                                 
00628                 picWatchDog =0;
00629                 flagD = sendData();
00630                 picWatchDog =1;
00631                 if(flagD!=0)
00632                 {
00633                     
00634                     if(!STOPEMAIL)//debug
00635                     {
00636                       picWatchDog =0;
00637                       flagE = sendEmail();
00638                       picWatchDog =1;
00639                     if(flagE!=0)
00640                     {
00641                     
00642                         picWatchDog =0;
00643                         flagE = sendEmail();                        
00644                         picWatchDog =1;
00645                     }
00646                     }
00647                 }
00648             }
00649             if(flagD !=0 && flagE!=0)
00650                 BackUpRam();            
00651             tickerTensaoCorrente.attach(&TickTensaoCorrente,10);//cada 5s
00652             
00653             
00654         }
00655         if(cntTickHora>720)//1hora
00656         {
00657             cntTickHora=0;
00658             if(flagSendNoBreak==false)
00659                 sendNoBreak();
00660             setClock();        
00661         }
00662       //  if(flagD==0)
00663       //      led1=!led1;
00664         wait_ms(50);
00665     }
00666     
00667 
00668 }