ProjetoBB
Dependencies: F7_Ethernet WebSocketClient mbed mcp3008
Fork of Nucleo_F746ZG_Ethernet by
main.cpp@4:7e16324b4d91, 2018-02-07 (annotated)
- Committer:
- arlindonm
- Date:
- Wed Feb 07 11:19:05 2018 +0000
- Revision:
- 4:7e16324b4d91
- Parent:
- 3:0fc17139f828
ProjetoBB070218
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
DieterGraef | 0:f9b6112278fe | 1 | #include "mbed.h" |
DieterGraef | 0:f9b6112278fe | 2 | #include "rtos.h" |
DieterGraef | 0:f9b6112278fe | 3 | #include "EthernetInterface.h" |
DieterGraef | 0:f9b6112278fe | 4 | #include "NTPClient.h" |
arlindonm | 3:0fc17139f828 | 5 | #include "Websocket.h" |
DieterGraef | 0:f9b6112278fe | 6 | #include <stdio.h> |
arlindonm | 3:0fc17139f828 | 7 | #include "SimpleSMTPClient.h" |
arlindonm | 3:0fc17139f828 | 8 | |
arlindonm | 3:0fc17139f828 | 9 | #define SERIAL 4 |
arlindonm | 3:0fc17139f828 | 10 | #define SIGNAL_LEN 256 |
arlindonm | 3:0fc17139f828 | 11 | |
arlindonm | 3:0fc17139f828 | 12 | #define DOMAIN "smtp2go.com" |
arlindonm | 3:0fc17139f828 | 13 | #define SERVER "mail.smtp2go.com"//"aspmx.l.google.com" |
arlindonm | 3:0fc17139f828 | 14 | #define PORT "2525" // Port 25 doesn't require TSL |
arlindonm | 3:0fc17139f828 | 15 | #define USER "arlindonm" |
arlindonm | 3:0fc17139f828 | 16 | #define PWD "SmartMeter" |
arlindonm | 3:0fc17139f828 | 17 | #define FROM_ADDRESS "arlindonm@smtp2go.com" |
arlindonm | 3:0fc17139f828 | 18 | // less than 128 characters. |
arlindonm | 3:0fc17139f828 | 19 | #define TO_ADDRESS "arlindonm@gmail.com" |
arlindonm | 3:0fc17139f828 | 20 | #define SUBJECT "EnergySmartMeter msg" |
arlindonm | 3:0fc17139f828 | 21 | |
arlindonm | 3:0fc17139f828 | 22 | IWDG_HandleTypeDef hiwdg; |
arlindonm | 3:0fc17139f828 | 23 | |
arlindonm | 3:0fc17139f828 | 24 | const char* SERVER_ADDRESS = "200.133.229.238"; |
arlindonm | 3:0fc17139f828 | 25 | //const char* SERVER_ADDRESS = "192.168.1.110"; |
arlindonm | 3:0fc17139f828 | 26 | const int SERVER_PORT = 1080; |
arlindonm | 3:0fc17139f828 | 27 | |
arlindonm | 3:0fc17139f828 | 28 | bool STOPEMAIL = true,flagSendNoBreak=0; |
arlindonm | 3:0fc17139f828 | 29 | |
arlindonm | 3:0fc17139f828 | 30 | Ticker tickerTensaoCorrente; |
arlindonm | 3:0fc17139f828 | 31 | |
arlindonm | 3:0fc17139f828 | 32 | //8 pinos da placa |
arlindonm | 3:0fc17139f828 | 33 | AnalogIn correnteA(PC_2); |
arlindonm | 3:0fc17139f828 | 34 | AnalogIn correnteB(PC_3); |
arlindonm | 3:0fc17139f828 | 35 | //- |
arlindonm | 3:0fc17139f828 | 36 | //tx |
arlindonm | 3:0fc17139f828 | 37 | //rx |
arlindonm | 3:0fc17139f828 | 38 | DigitalOut scale(PD_7); |
arlindonm | 3:0fc17139f828 | 39 | DigitalOut getVoltagem(PE_3); |
arlindonm | 3:0fc17139f828 | 40 | //gnd |
arlindonm | 3:0fc17139f828 | 41 | |
arlindonm | 3:0fc17139f828 | 42 | //4pinos da placa |
arlindonm | 3:0fc17139f828 | 43 | DigitalOut picWatchDog(PC_11); |
arlindonm | 3:0fc17139f828 | 44 | AnalogIn tensaoA(PC_0); |
arlindonm | 3:0fc17139f828 | 45 | DigitalIn noBreak(PD_3); |
arlindonm | 3:0fc17139f828 | 46 | //DigitalIn xxx(PG_2); |
arlindonm | 3:0fc17139f828 | 47 | |
arlindonm | 3:0fc17139f828 | 48 | |
arlindonm | 3:0fc17139f828 | 49 | DigitalOut led1(LED1); |
arlindonm | 3:0fc17139f828 | 50 | DigitalOut led2(LED2); |
arlindonm | 3:0fc17139f828 | 51 | DigitalOut led3(LED3); |
arlindonm | 3:0fc17139f828 | 52 | int cntTick=0; |
arlindonm | 3:0fc17139f828 | 53 | int cntTickHora=0; |
arlindonm | 3:0fc17139f828 | 54 | int cntSinal=0; |
arlindonm | 3:0fc17139f828 | 55 | int cntBK=0; |
arlindonm | 3:0fc17139f828 | 56 | bool flagHorVerao=true,scaleIA=0,scaleIB=0,scaleIC=0; |
arlindonm | 3:0fc17139f828 | 57 | unsigned int energiaA = 0,energiaB=0,energiaC=0; |
arlindonm | 3:0fc17139f828 | 58 | //int vetorTensaoA[62]; |
arlindonm | 3:0fc17139f828 | 59 | //int vetorTensaoB[62]; |
arlindonm | 3:0fc17139f828 | 60 | //int vetorTensaoC[62]; |
arlindonm | 3:0fc17139f828 | 61 | int vetorCorrenteA[62]; |
arlindonm | 3:0fc17139f828 | 62 | int vetorCorrenteB[62]; |
arlindonm | 3:0fc17139f828 | 63 | int vetorCorrenteC[62]; |
arlindonm | 3:0fc17139f828 | 64 | |
arlindonm | 3:0fc17139f828 | 65 | |
arlindonm | 3:0fc17139f828 | 66 | int sinalVA[SIGNAL_LEN]; |
arlindonm | 3:0fc17139f828 | 67 | int sinalVB[SIGNAL_LEN]; |
arlindonm | 3:0fc17139f828 | 68 | int sinalVC[SIGNAL_LEN]; |
arlindonm | 3:0fc17139f828 | 69 | int sinalIA[SIGNAL_LEN]; |
arlindonm | 3:0fc17139f828 | 70 | int sinalIB[SIGNAL_LEN]; |
arlindonm | 3:0fc17139f828 | 71 | int sinalIC[SIGNAL_LEN]; |
arlindonm | 3:0fc17139f828 | 72 | |
arlindonm | 3:0fc17139f828 | 73 | //int rmsVA,rmsVB,rmsVC; |
arlindonm | 3:0fc17139f828 | 74 | int rmsIA,rmsIB,rmsIC; |
arlindonm | 3:0fc17139f828 | 75 | char serBuf[50],strTimeInterrupt[50],strTimeReturn[50],str485[300]; |
arlindonm | 3:0fc17139f828 | 76 | char picCmd; |
arlindonm | 3:0fc17139f828 | 77 | |
arlindonm | 3:0fc17139f828 | 78 | bool EthernetOK=false,flagNoBreak=false; |
arlindonm | 3:0fc17139f828 | 79 | time_t seconds; |
arlindonm | 3:0fc17139f828 | 80 | bool flagSend=false; |
DieterGraef | 0:f9b6112278fe | 81 | |
DieterGraef | 0:f9b6112278fe | 82 | EthernetInterface eth; |
DieterGraef | 0:f9b6112278fe | 83 | |
arlindonm | 3:0fc17139f828 | 84 | TCPSocketServer server; |
arlindonm | 3:0fc17139f828 | 85 | TCPSocketConnection client; |
arlindonm | 3:0fc17139f828 | 86 | bool serverIsListening = false; |
arlindonm | 3:0fc17139f828 | 87 | |
arlindonm | 3:0fc17139f828 | 88 | DigitalOut sw(LED2); |
arlindonm | 3:0fc17139f828 | 89 | |
arlindonm | 3:0fc17139f828 | 90 | RawSerial serial(USBTX,USBRX);//(USBTX,USBRX); //tx,rx |
arlindonm | 3:0fc17139f828 | 91 | RawSerial serialPic(PD_5,PD_6); |
arlindonm | 3:0fc17139f828 | 92 | RawSerial serialRS485(PE_8,PE_7); |
arlindonm | 3:0fc17139f828 | 93 | |
arlindonm | 3:0fc17139f828 | 94 | int cnt=0; |
arlindonm | 3:0fc17139f828 | 95 | |
arlindonm | 3:0fc17139f828 | 96 | string httpHeader; // HTTP header |
arlindonm | 3:0fc17139f828 | 97 | string httpContent; // HTTP content |
arlindonm | 3:0fc17139f828 | 98 | const string HTTP_OK = "HTTP/1.0 200 OK"; |
arlindonm | 3:0fc17139f828 | 99 | |
arlindonm | 3:0fc17139f828 | 100 | NTPClient ntp; |
arlindonm | 3:0fc17139f828 | 101 | |
arlindonm | 3:0fc17139f828 | 102 | |
arlindonm | 3:0fc17139f828 | 103 | void setClock() |
arlindonm | 3:0fc17139f828 | 104 | { |
arlindonm | 3:0fc17139f828 | 105 | |
arlindonm | 3:0fc17139f828 | 106 | int res =ntp.setTime("0.uk.pool.ntp.org"); |
arlindonm | 3:0fc17139f828 | 107 | if ( res == 0) |
arlindonm | 3:0fc17139f828 | 108 | { |
arlindonm | 3:0fc17139f828 | 109 | time_t ctTime; |
arlindonm | 3:0fc17139f828 | 110 | ctTime = time(NULL); |
arlindonm | 3:0fc17139f828 | 111 | //serial.printf("Time is set to : %s \r\n", ctime(&ctTime)); |
arlindonm | 3:0fc17139f828 | 112 | int fusoBR= -10800;//-3*3600 |
arlindonm | 3:0fc17139f828 | 113 | if(flagHorVerao) fusoBR= -7200; |
arlindonm | 3:0fc17139f828 | 114 | set_time(ctTime+ fusoBR); |
arlindonm | 3:0fc17139f828 | 115 | char strtime[80]; |
arlindonm | 3:0fc17139f828 | 116 | time_t seconds; |
arlindonm | 3:0fc17139f828 | 117 | seconds = time(NULL); |
arlindonm | 3:0fc17139f828 | 118 | strftime(strtime, 20, "%D %H:%M:%S\n", localtime(&seconds)); |
arlindonm | 3:0fc17139f828 | 119 | //serial.printf("Hora:%s", strtime); |
arlindonm | 3:0fc17139f828 | 120 | } |
arlindonm | 3:0fc17139f828 | 121 | else |
arlindonm | 3:0fc17139f828 | 122 | { |
arlindonm | 3:0fc17139f828 | 123 | serial.printf("Error getting time \r\n"); |
arlindonm | 3:0fc17139f828 | 124 | } |
arlindonm | 3:0fc17139f828 | 125 | } |
arlindonm | 3:0fc17139f828 | 126 | |
arlindonm | 3:0fc17139f828 | 127 | |
arlindonm | 3:0fc17139f828 | 128 | void getSinal() |
arlindonm | 3:0fc17139f828 | 129 | { |
arlindonm | 3:0fc17139f828 | 130 | |
arlindonm | 3:0fc17139f828 | 131 | for(int j=0;j<SIGNAL_LEN;j++) |
arlindonm | 3:0fc17139f828 | 132 | { |
arlindonm | 3:0fc17139f828 | 133 | getVoltagem=1; |
arlindonm | 3:0fc17139f828 | 134 | sinalVA[j]=(int)1000*tensaoA.read(); |
arlindonm | 3:0fc17139f828 | 135 | sinalVB[j]=(int)1000*tensaoA.read(); |
arlindonm | 3:0fc17139f828 | 136 | sinalVC[j]=(int)1000*tensaoA.read(); |
arlindonm | 3:0fc17139f828 | 137 | getVoltagem=0; |
arlindonm | 3:0fc17139f828 | 138 | sinalIA[j]=(int)1000*correnteA.read(); |
arlindonm | 3:0fc17139f828 | 139 | sinalIB[j]=(int)1000*correnteB.read(); |
arlindonm | 3:0fc17139f828 | 140 | sinalIC[j]=(int)1000*tensaoA.read(); |
arlindonm | 3:0fc17139f828 | 141 | wait_us(240); //4ciclos |
arlindonm | 3:0fc17139f828 | 142 | } |
arlindonm | 3:0fc17139f828 | 143 | } |
arlindonm | 3:0fc17139f828 | 144 | void Rms() |
arlindonm | 3:0fc17139f828 | 145 | { |
arlindonm | 3:0fc17139f828 | 146 | |
arlindonm | 3:0fc17139f828 | 147 | getSinal(); |
arlindonm | 3:0fc17139f828 | 148 | float somaVA=0,somaVB=0,somaVC=0,somaIA=0,somaIB=0,somaIC=0; |
arlindonm | 3:0fc17139f828 | 149 | float dcVA,dcVB,dcVC,dcIA,dcIB,dcIC; |
arlindonm | 3:0fc17139f828 | 150 | //DC |
arlindonm | 3:0fc17139f828 | 151 | for(int j=0;j<SIGNAL_LEN;j++) |
arlindonm | 3:0fc17139f828 | 152 | { |
arlindonm | 3:0fc17139f828 | 153 | //somaVA = somaVA + sinalVA[j]; |
arlindonm | 3:0fc17139f828 | 154 | //somaVB = somaVB + sinalVB[j]; |
arlindonm | 3:0fc17139f828 | 155 | //somaVC = somaVC + sinalVC[j]; |
arlindonm | 3:0fc17139f828 | 156 | somaIA = somaIA + sinalIA[j]; |
arlindonm | 3:0fc17139f828 | 157 | somaIB = somaIB + sinalIB[j]; |
arlindonm | 3:0fc17139f828 | 158 | somaIC = somaIC + sinalIC[j]; |
arlindonm | 3:0fc17139f828 | 159 | } |
arlindonm | 3:0fc17139f828 | 160 | //dcVA = somaVA/SIGNAL_LEN; |
arlindonm | 3:0fc17139f828 | 161 | //dcVB = somaVB/SIGNAL_LEN; |
arlindonm | 3:0fc17139f828 | 162 | //dcVC = somaVC/SIGNAL_LEN; |
arlindonm | 3:0fc17139f828 | 163 | dcIA = somaIA/SIGNAL_LEN; |
arlindonm | 3:0fc17139f828 | 164 | dcIB = somaIB/SIGNAL_LEN; |
arlindonm | 3:0fc17139f828 | 165 | dcIC = somaIC/SIGNAL_LEN; |
arlindonm | 3:0fc17139f828 | 166 | //serial.printf("\ndcIA = %f dcIB = %f",dcIA,dcIB); |
arlindonm | 3:0fc17139f828 | 167 | somaVA=somaVB=somaVC=somaIA=somaIB=somaIC=0; |
arlindonm | 3:0fc17139f828 | 168 | for(int j=0;j<SIGNAL_LEN;j++) |
arlindonm | 3:0fc17139f828 | 169 | { |
arlindonm | 3:0fc17139f828 | 170 | //somaVA = somaVA + ((sinalVA[j]-dcVA) * (sinalVA[j]-dcVA)); |
arlindonm | 3:0fc17139f828 | 171 | //somaVB = somaVB + ((sinalVB[j]-dcVB) * (sinalVB[j]-dcVB)); |
arlindonm | 3:0fc17139f828 | 172 | //somaVC = somaVC + ((sinalVC[j]-dcVC) * (sinalVC[j]-dcVC)); |
arlindonm | 3:0fc17139f828 | 173 | somaIA = somaIA + ((sinalIA[j]-dcIA) * (sinalIA[j]-dcIA)); |
arlindonm | 3:0fc17139f828 | 174 | somaIB = somaIB + ((sinalIB[j]-dcIB) * (sinalIB[j]-dcIB)); |
arlindonm | 3:0fc17139f828 | 175 | somaIC = somaIC + ((sinalIC[j]-dcIC) * (sinalIC[j]-dcIC)); |
arlindonm | 3:0fc17139f828 | 176 | } |
arlindonm | 3:0fc17139f828 | 177 | //serial.printf("\nsomaIA = %f somaIB = %f",somaIA,somaIB); |
arlindonm | 3:0fc17139f828 | 178 | //rmsVA = (int)sqrt(somaVA / SIGNAL_LEN); |
arlindonm | 3:0fc17139f828 | 179 | //rmsVB = (int)sqrt(somaVB / SIGNAL_LEN); |
arlindonm | 3:0fc17139f828 | 180 | //rmsVC = (int)sqrt(somaVC / SIGNAL_LEN); |
arlindonm | 3:0fc17139f828 | 181 | scaleIA=scaleIB=scaleIC=0; |
arlindonm | 3:0fc17139f828 | 182 | rmsIA = (int)sqrt(somaIA / SIGNAL_LEN); |
arlindonm | 3:0fc17139f828 | 183 | if(rmsIA> 50) |
arlindonm | 3:0fc17139f828 | 184 | scaleIA=1; |
arlindonm | 3:0fc17139f828 | 185 | rmsIB = (int)sqrt(somaIB / SIGNAL_LEN); |
arlindonm | 3:0fc17139f828 | 186 | if(rmsIB> 50) |
arlindonm | 3:0fc17139f828 | 187 | scaleIB=1; |
arlindonm | 3:0fc17139f828 | 188 | rmsIC = (int)sqrt(somaIC / SIGNAL_LEN); |
arlindonm | 3:0fc17139f828 | 189 | if(rmsIC> 50) |
arlindonm | 3:0fc17139f828 | 190 | scaleIC=1; |
arlindonm | 3:0fc17139f828 | 191 | //serial.printf("\nrmsIA = %d rmsIB = %d",rmsIA,rmsIB); |
arlindonm | 3:0fc17139f828 | 192 | |
arlindonm | 3:0fc17139f828 | 193 | } |
arlindonm | 3:0fc17139f828 | 194 | void TickTensaoCorrente() |
arlindonm | 3:0fc17139f828 | 195 | { |
arlindonm | 3:0fc17139f828 | 196 | led2=!led2; |
arlindonm | 3:0fc17139f828 | 197 | |
arlindonm | 3:0fc17139f828 | 198 | Rms(); |
arlindonm | 3:0fc17139f828 | 199 | //if(scaleIA||scaleIB||scaleIC) |
arlindonm | 3:0fc17139f828 | 200 | // Rms(); |
arlindonm | 3:0fc17139f828 | 201 | if(rmsIA-4<2)rmsIA=4; |
arlindonm | 3:0fc17139f828 | 202 | if(rmsIB-4<2)rmsIB=4; |
arlindonm | 3:0fc17139f828 | 203 | if(rmsIC-4<2)rmsIC=4; |
arlindonm | 3:0fc17139f828 | 204 | energiaA += rmsIA-4; |
arlindonm | 3:0fc17139f828 | 205 | energiaB += rmsIB-4; |
arlindonm | 3:0fc17139f828 | 206 | energiaC += rmsIC-4; |
arlindonm | 3:0fc17139f828 | 207 | |
arlindonm | 3:0fc17139f828 | 208 | //vetorTensaoA[cntTick]=rmsVA; |
arlindonm | 3:0fc17139f828 | 209 | //vetorTensaoB[cntTick]=rmsVB; |
arlindonm | 3:0fc17139f828 | 210 | //vetorTensaoC[cntTick]=rmsVC; |
arlindonm | 3:0fc17139f828 | 211 | vetorCorrenteA[cntTick]=rmsIA-4; |
arlindonm | 3:0fc17139f828 | 212 | vetorCorrenteB[cntTick]=rmsIB-4; |
arlindonm | 3:0fc17139f828 | 213 | vetorCorrenteC[cntTick]=rmsIC-4; |
arlindonm | 3:0fc17139f828 | 214 | |
arlindonm | 3:0fc17139f828 | 215 | cntTick++; |
arlindonm | 3:0fc17139f828 | 216 | cntTickHora++; |
arlindonm | 3:0fc17139f828 | 217 | if(cntTick>61) cntTick=0; //ERRO |
arlindonm | 3:0fc17139f828 | 218 | |
arlindonm | 3:0fc17139f828 | 219 | |
arlindonm | 3:0fc17139f828 | 220 | |
arlindonm | 3:0fc17139f828 | 221 | } |
arlindonm | 3:0fc17139f828 | 222 | |
arlindonm | 3:0fc17139f828 | 223 | int sendData() |
arlindonm | 3:0fc17139f828 | 224 | { |
arlindonm | 3:0fc17139f828 | 225 | char str[7000]=""; //A conta tem que ser certa!!! |
arlindonm | 3:0fc17139f828 | 226 | TCPSocketConnection socket; |
arlindonm | 3:0fc17139f828 | 227 | while (socket.connect(SERVER_ADDRESS, SERVER_PORT) < 0) |
arlindonm | 3:0fc17139f828 | 228 | { |
arlindonm | 3:0fc17139f828 | 229 | serial.printf("Unable to connect to (%s) on port (%d)\n", SERVER_ADDRESS, SERVER_PORT); |
arlindonm | 3:0fc17139f828 | 230 | wait(1); |
arlindonm | 3:0fc17139f828 | 231 | return -1; |
arlindonm | 3:0fc17139f828 | 232 | } |
arlindonm | 3:0fc17139f828 | 233 | time_t ctTime; |
arlindonm | 3:0fc17139f828 | 234 | ctTime = time(NULL); |
arlindonm | 3:0fc17139f828 | 235 | sprintf(str,"%d;%s;",SERIAL,ctime(&ctTime)); |
arlindonm | 3:0fc17139f828 | 236 | |
arlindonm | 3:0fc17139f828 | 237 | /*strcat(str,"VA;"); //Nao precisa enviar a tensao pois e' quase cte a cada 5s |
arlindonm | 3:0fc17139f828 | 238 | for(int i=0;i<60;i++) |
arlindonm | 3:0fc17139f828 | 239 | sprintf(str,"%s%03d;",str,vetorTensaoA[i]);//tensao cada 5s |
arlindonm | 3:0fc17139f828 | 240 | |
arlindonm | 3:0fc17139f828 | 241 | strcat(str,"VB;"); |
arlindonm | 3:0fc17139f828 | 242 | for(int i=0;i<60;i++) |
arlindonm | 3:0fc17139f828 | 243 | sprintf(str,"%s%03d;",str,vetorTensaoB[i]);//tensao cada 5s |
arlindonm | 3:0fc17139f828 | 244 | |
arlindonm | 3:0fc17139f828 | 245 | strcat(str,"VC;"); |
arlindonm | 3:0fc17139f828 | 246 | for(int i=0;i<60;i++) |
arlindonm | 3:0fc17139f828 | 247 | sprintf(str,"%s%03d;",str,vetorTensaoC[i]);//tensao cada 5s |
arlindonm | 3:0fc17139f828 | 248 | */ |
arlindonm | 3:0fc17139f828 | 249 | // strcat(str,"E"); |
DieterGraef | 0:f9b6112278fe | 250 | |
arlindonm | 3:0fc17139f828 | 251 | sprintf(str,"%s%10d%10d%10d",str,energiaA,energiaB,energiaC); |
arlindonm | 3:0fc17139f828 | 252 | |
arlindonm | 3:0fc17139f828 | 253 | |
arlindonm | 3:0fc17139f828 | 254 | strcat(str,"IA"); |
arlindonm | 3:0fc17139f828 | 255 | for(int i=0;i<60;i++) |
arlindonm | 3:0fc17139f828 | 256 | sprintf(str,"%s%03d",str,vetorCorrenteA[i]);//correntecada 10s |
arlindonm | 3:0fc17139f828 | 257 | |
arlindonm | 3:0fc17139f828 | 258 | strcat(str,"IB"); |
arlindonm | 3:0fc17139f828 | 259 | for(int i=0;i<60;i++) |
arlindonm | 3:0fc17139f828 | 260 | sprintf(str,"%s%03d",str,vetorCorrenteB[i]);//correntecada 10s |
arlindonm | 3:0fc17139f828 | 261 | |
arlindonm | 3:0fc17139f828 | 262 | strcat(str,"IC"); |
arlindonm | 3:0fc17139f828 | 263 | for(int i=0;i<60;i++) |
arlindonm | 3:0fc17139f828 | 264 | sprintf(str,"%s%03d",str,vetorCorrenteC[i]);//correntecada 10s |
arlindonm | 3:0fc17139f828 | 265 | |
arlindonm | 3:0fc17139f828 | 266 | //-------------- |
arlindonm | 3:0fc17139f828 | 267 | |
arlindonm | 3:0fc17139f828 | 268 | getSinal(); |
arlindonm | 3:0fc17139f828 | 269 | sprintf(str,"%sSVA",str); |
arlindonm | 3:0fc17139f828 | 270 | for(int j=0;j<SIGNAL_LEN;j++) |
arlindonm | 3:0fc17139f828 | 271 | sprintf(str,"%s%03d",str,sinalVA[j]);//sinal tensao |
arlindonm | 3:0fc17139f828 | 272 | |
arlindonm | 3:0fc17139f828 | 273 | sprintf(str,"%sSVB",str); |
arlindonm | 3:0fc17139f828 | 274 | for(int j=0;j<SIGNAL_LEN;j++) |
arlindonm | 3:0fc17139f828 | 275 | sprintf(str,"%s%03d",str,sinalVB[j]);//sinal tensao |
arlindonm | 3:0fc17139f828 | 276 | |
arlindonm | 3:0fc17139f828 | 277 | sprintf(str,"%sSVC",str); |
arlindonm | 3:0fc17139f828 | 278 | for(int j=0;j<SIGNAL_LEN;j++) |
arlindonm | 3:0fc17139f828 | 279 | sprintf(str,"%s%03d",str,sinalVC[j]);//sinal tensao |
arlindonm | 3:0fc17139f828 | 280 | |
arlindonm | 3:0fc17139f828 | 281 | //----------------- |
arlindonm | 3:0fc17139f828 | 282 | sprintf(str,"%sSIA",str); |
arlindonm | 3:0fc17139f828 | 283 | for(int j=0;j<SIGNAL_LEN;j++) |
arlindonm | 3:0fc17139f828 | 284 | sprintf(str,"%s%03d",str,sinalIA[j]); |
arlindonm | 3:0fc17139f828 | 285 | |
arlindonm | 3:0fc17139f828 | 286 | sprintf(str,"%sSIB",str); |
arlindonm | 3:0fc17139f828 | 287 | for(int j=0;j<SIGNAL_LEN;j++) |
arlindonm | 3:0fc17139f828 | 288 | sprintf(str,"%s%03d",str,sinalIB[j]); |
arlindonm | 3:0fc17139f828 | 289 | |
arlindonm | 3:0fc17139f828 | 290 | sprintf(str,"%sSIC",str); |
arlindonm | 3:0fc17139f828 | 291 | for(int j=0;j<SIGNAL_LEN;j++) |
arlindonm | 3:0fc17139f828 | 292 | sprintf(str,"%s%03d",str,sinalIC[j]); |
arlindonm | 3:0fc17139f828 | 293 | |
arlindonm | 3:0fc17139f828 | 294 | |
arlindonm | 3:0fc17139f828 | 295 | sprintf(str,"%sRS485%s$\0",str,str485); |
arlindonm | 3:0fc17139f828 | 296 | |
arlindonm | 3:0fc17139f828 | 297 | int ret = socket.send(str, sizeof(str) - 1); |
arlindonm | 3:0fc17139f828 | 298 | serial.printf("Socket send n: %d\n",ret); |
arlindonm | 3:0fc17139f828 | 299 | char buf[256]; |
arlindonm | 3:0fc17139f828 | 300 | int n = socket.receive(buf, 256); |
arlindonm | 3:0fc17139f828 | 301 | buf[n] = '\0'; |
arlindonm | 3:0fc17139f828 | 302 | serial.printf("Received % d message from server: '%s'\n",n, buf); |
arlindonm | 3:0fc17139f828 | 303 | socket.close(); |
arlindonm | 3:0fc17139f828 | 304 | if(buf[0]=='1') |
arlindonm | 3:0fc17139f828 | 305 | STOPEMAIL=false; |
arlindonm | 3:0fc17139f828 | 306 | else |
arlindonm | 3:0fc17139f828 | 307 | STOPEMAIL = true; |
arlindonm | 3:0fc17139f828 | 308 | |
arlindonm | 3:0fc17139f828 | 309 | if(n>=1) |
arlindonm | 3:0fc17139f828 | 310 | return 0; |
arlindonm | 3:0fc17139f828 | 311 | else |
arlindonm | 3:0fc17139f828 | 312 | return -1; |
arlindonm | 3:0fc17139f828 | 313 | |
arlindonm | 3:0fc17139f828 | 314 | } |
arlindonm | 3:0fc17139f828 | 315 | int sendNoBreak() |
arlindonm | 3:0fc17139f828 | 316 | { |
arlindonm | 3:0fc17139f828 | 317 | TCPSocketConnection socket; |
arlindonm | 3:0fc17139f828 | 318 | while (socket.connect(SERVER_ADDRESS, SERVER_PORT) < 0) |
arlindonm | 3:0fc17139f828 | 319 | { |
arlindonm | 3:0fc17139f828 | 320 | serial.printf("Unable to connect to (%s) on port (%d)\n", SERVER_ADDRESS, SERVER_PORT); |
arlindonm | 3:0fc17139f828 | 321 | wait(1); |
arlindonm | 3:0fc17139f828 | 322 | return -1; |
arlindonm | 3:0fc17139f828 | 323 | } |
arlindonm | 3:0fc17139f828 | 324 | char str[256]; |
arlindonm | 3:0fc17139f828 | 325 | |
arlindonm | 3:0fc17139f828 | 326 | sprintf(str,"%d;\nQueda de Energia: %s\nRetorno de Energia: %s$",SERIAL,strTimeInterrupt,strTimeReturn); |
arlindonm | 3:0fc17139f828 | 327 | socket.send(str, sizeof(str) - 1); |
arlindonm | 3:0fc17139f828 | 328 | |
arlindonm | 3:0fc17139f828 | 329 | char buf[256]; |
arlindonm | 3:0fc17139f828 | 330 | int n = socket.receive(buf, 256); |
arlindonm | 3:0fc17139f828 | 331 | buf[n] = '\0'; |
arlindonm | 3:0fc17139f828 | 332 | serial.printf("Received % d message from server: '%s'\n",n, buf); |
arlindonm | 3:0fc17139f828 | 333 | socket.close(); |
arlindonm | 3:0fc17139f828 | 334 | if(buf[0]=='1') |
arlindonm | 3:0fc17139f828 | 335 | STOPEMAIL=false; |
arlindonm | 3:0fc17139f828 | 336 | else |
arlindonm | 3:0fc17139f828 | 337 | STOPEMAIL = true; |
arlindonm | 3:0fc17139f828 | 338 | |
arlindonm | 3:0fc17139f828 | 339 | if(n>=1) |
arlindonm | 3:0fc17139f828 | 340 | { |
arlindonm | 3:0fc17139f828 | 341 | flagSendNoBreak = true; |
arlindonm | 3:0fc17139f828 | 342 | return 0; |
arlindonm | 3:0fc17139f828 | 343 | } |
arlindonm | 3:0fc17139f828 | 344 | else |
arlindonm | 3:0fc17139f828 | 345 | return -1; |
arlindonm | 3:0fc17139f828 | 346 | |
arlindonm | 3:0fc17139f828 | 347 | } |
arlindonm | 3:0fc17139f828 | 348 | int sendEmail() |
arlindonm | 3:0fc17139f828 | 349 | { |
arlindonm | 3:0fc17139f828 | 350 | /*SimpleSMTPClient smtp; |
arlindonm | 3:0fc17139f828 | 351 | int ret; |
arlindonm | 3:0fc17139f828 | 352 | char str[36560]; |
arlindonm | 3:0fc17139f828 | 353 | smtp.setFromAddress(FROM_ADDRESS); |
arlindonm | 3:0fc17139f828 | 354 | smtp.setToAddress(TO_ADDRESS); |
arlindonm | 3:0fc17139f828 | 355 | |
arlindonm | 3:0fc17139f828 | 356 | smtp.setMessage(SUBJECT,"Mensagen enviada por e-mail\n"); |
arlindonm | 3:0fc17139f828 | 357 | |
arlindonm | 3:0fc17139f828 | 358 | time_t ctTime; |
arlindonm | 3:0fc17139f828 | 359 | ctTime = time(NULL); |
arlindonm | 3:0fc17139f828 | 360 | sprintf(str,"Energy Smart Meter - Serial A1%04d.\nHora da placa: %s",SERIAL,ctime(&ctTime)); |
arlindonm | 3:0fc17139f828 | 361 | smtp.addMessage(str); |
arlindonm | 3:0fc17139f828 | 362 | ret = smtp.sendmail(SERVER, USER, PWD, DOMAIN,PORT,SMTP_AUTH_LOGIN); |
arlindonm | 3:0fc17139f828 | 363 | strcpy(str,"VA;"); |
arlindonm | 3:0fc17139f828 | 364 | for(int i=0;i<60;i++) |
arlindonm | 3:0fc17139f828 | 365 | sprintf(str,"%s%03d;",str,vetorTensaoA[i]);//tensao cada 5s |
arlindonm | 3:0fc17139f828 | 366 | smtp.appendMessage(str); |
arlindonm | 3:0fc17139f828 | 367 | strcpy(str,"VB;"); |
arlindonm | 3:0fc17139f828 | 368 | for(int i=0;i<60;i++) |
arlindonm | 3:0fc17139f828 | 369 | sprintf(str,"%s%03d;",str,vetorTensaoB[i]);//tensao cada 5s |
arlindonm | 3:0fc17139f828 | 370 | smtp.appendMessage(str); |
arlindonm | 3:0fc17139f828 | 371 | strcpy(str,"VC;"); |
arlindonm | 3:0fc17139f828 | 372 | for(int i=0;i<60;i++) |
arlindonm | 3:0fc17139f828 | 373 | sprintf(str,"%s%03d;",str,vetorTensaoC[i]);//tensao cada 5s |
arlindonm | 3:0fc17139f828 | 374 | smtp.appendMessage(str); |
arlindonm | 3:0fc17139f828 | 375 | |
arlindonm | 3:0fc17139f828 | 376 | strcpy(str,"IA;"); |
arlindonm | 3:0fc17139f828 | 377 | for(int i=0;i<60;i++) |
arlindonm | 3:0fc17139f828 | 378 | sprintf(str,"%s%03d;",str,vetorCorrenteA[i]);//corrente cada 5s |
arlindonm | 3:0fc17139f828 | 379 | smtp.appendMessage(str); |
arlindonm | 3:0fc17139f828 | 380 | |
arlindonm | 3:0fc17139f828 | 381 | strcpy(str,"IB;"); |
arlindonm | 3:0fc17139f828 | 382 | for(int i=0;i<60;i++) |
arlindonm | 3:0fc17139f828 | 383 | sprintf(str,"%s%03d;",str,vetorCorrenteB[i]);//corrente cada 5s |
arlindonm | 3:0fc17139f828 | 384 | smtp.appendMessage(str); |
arlindonm | 3:0fc17139f828 | 385 | |
arlindonm | 3:0fc17139f828 | 386 | strcpy(str,"IC;"); |
arlindonm | 3:0fc17139f828 | 387 | for(int i=0;i<60;i++) |
arlindonm | 3:0fc17139f828 | 388 | sprintf(str,"%s%03d;",str,vetorCorrenteC[i]);//corrente cada 5s |
arlindonm | 3:0fc17139f828 | 389 | smtp.appendMessage(str); |
arlindonm | 3:0fc17139f828 | 390 | |
arlindonm | 3:0fc17139f828 | 391 | |
arlindonm | 3:0fc17139f828 | 392 | |
arlindonm | 3:0fc17139f828 | 393 | for(int i=0;i<5;i++) |
arlindonm | 3:0fc17139f828 | 394 | { |
arlindonm | 3:0fc17139f828 | 395 | sprintf(str,"SVA%d;",i); |
arlindonm | 3:0fc17139f828 | 396 | for(int j=0;j<SIGNAL_LEN;j++) |
arlindonm | 3:0fc17139f828 | 397 | { |
arlindonm | 3:0fc17139f828 | 398 | sprintf(str,"%s%03d;",str,sinalVA[i][j]);//sinal tensao |
arlindonm | 3:0fc17139f828 | 399 | |
arlindonm | 3:0fc17139f828 | 400 | } |
arlindonm | 3:0fc17139f828 | 401 | smtp.appendMessage(str); |
arlindonm | 3:0fc17139f828 | 402 | } |
arlindonm | 3:0fc17139f828 | 403 | for(int i=0;i<5;i++) |
arlindonm | 3:0fc17139f828 | 404 | { |
arlindonm | 3:0fc17139f828 | 405 | sprintf(str,"SVB%d;",i); |
arlindonm | 3:0fc17139f828 | 406 | for(int j=0;j<SIGNAL_LEN;j++) |
arlindonm | 3:0fc17139f828 | 407 | { |
arlindonm | 3:0fc17139f828 | 408 | sprintf(str,"%s%03d;",str,sinalVB[i][j]);//sinal tensao |
arlindonm | 3:0fc17139f828 | 409 | |
arlindonm | 3:0fc17139f828 | 410 | } |
arlindonm | 3:0fc17139f828 | 411 | smtp.appendMessage(str); |
arlindonm | 3:0fc17139f828 | 412 | } |
arlindonm | 3:0fc17139f828 | 413 | for(int i=0;i<5;i++) |
arlindonm | 3:0fc17139f828 | 414 | { |
arlindonm | 3:0fc17139f828 | 415 | sprintf(str,"SVC%d;",i); |
arlindonm | 3:0fc17139f828 | 416 | for(int j=0;j<SIGNAL_LEN;j++) |
arlindonm | 3:0fc17139f828 | 417 | { |
arlindonm | 3:0fc17139f828 | 418 | sprintf(str,"%s%03d;",str,sinalVC[i][j]);//sinal tensao |
arlindonm | 3:0fc17139f828 | 419 | |
arlindonm | 3:0fc17139f828 | 420 | } |
arlindonm | 3:0fc17139f828 | 421 | smtp.appendMessage(str); |
arlindonm | 3:0fc17139f828 | 422 | } |
arlindonm | 3:0fc17139f828 | 423 | //----------------- |
arlindonm | 3:0fc17139f828 | 424 | for(int i=0;i<5;i++) |
arlindonm | 3:0fc17139f828 | 425 | { |
arlindonm | 3:0fc17139f828 | 426 | sprintf(str,"SIA%d;",i); |
arlindonm | 3:0fc17139f828 | 427 | for(int j=0;j<SIGNAL_LEN;j++) |
arlindonm | 3:0fc17139f828 | 428 | { |
arlindonm | 3:0fc17139f828 | 429 | sprintf(str,"%s%03d;",str,sinalIA[i][j]);//sinal corrente |
arlindonm | 3:0fc17139f828 | 430 | |
arlindonm | 3:0fc17139f828 | 431 | } |
arlindonm | 3:0fc17139f828 | 432 | smtp.appendMessage(str); |
arlindonm | 3:0fc17139f828 | 433 | } |
arlindonm | 3:0fc17139f828 | 434 | for(int i=0;i<5;i++) |
arlindonm | 3:0fc17139f828 | 435 | { |
arlindonm | 3:0fc17139f828 | 436 | sprintf(str,"SIB%d;",i); |
arlindonm | 3:0fc17139f828 | 437 | for(int j=0;j<SIGNAL_LEN;j++) |
arlindonm | 3:0fc17139f828 | 438 | { |
arlindonm | 3:0fc17139f828 | 439 | sprintf(str,"%s%03d;",str,sinalIB[i][j]);//sinal corrente |
arlindonm | 3:0fc17139f828 | 440 | |
arlindonm | 3:0fc17139f828 | 441 | } |
arlindonm | 3:0fc17139f828 | 442 | smtp.appendMessage(str); |
arlindonm | 3:0fc17139f828 | 443 | } |
arlindonm | 3:0fc17139f828 | 444 | for(int i=0;i<5;i++) |
arlindonm | 3:0fc17139f828 | 445 | { |
arlindonm | 3:0fc17139f828 | 446 | sprintf(str,"SIC%d;",i); |
arlindonm | 3:0fc17139f828 | 447 | for(int j=0;j<SIGNAL_LEN;j++) |
arlindonm | 3:0fc17139f828 | 448 | { |
arlindonm | 3:0fc17139f828 | 449 | sprintf(str,"%s%03d;",str,sinalIC[i][j]);//sinal corrente |
arlindonm | 3:0fc17139f828 | 450 | |
arlindonm | 3:0fc17139f828 | 451 | } |
arlindonm | 3:0fc17139f828 | 452 | smtp.appendMessage(str); |
arlindonm | 3:0fc17139f828 | 453 | } |
arlindonm | 3:0fc17139f828 | 454 | |
arlindonm | 3:0fc17139f828 | 455 | |
arlindonm | 3:0fc17139f828 | 456 | smtp.endMessage(); |
arlindonm | 3:0fc17139f828 | 457 | if (ret) |
arlindonm | 3:0fc17139f828 | 458 | { |
arlindonm | 3:0fc17139f828 | 459 | serial.printf("E-mail Transmission Error\r\n"); |
arlindonm | 3:0fc17139f828 | 460 | return -1; |
arlindonm | 3:0fc17139f828 | 461 | } |
arlindonm | 3:0fc17139f828 | 462 | else |
arlindonm | 3:0fc17139f828 | 463 | { |
arlindonm | 3:0fc17139f828 | 464 | serial.printf("E-mail Transmission OK\r\n"); |
arlindonm | 3:0fc17139f828 | 465 | return 0; |
arlindonm | 3:0fc17139f828 | 466 | }*/ |
arlindonm | 3:0fc17139f828 | 467 | } |
arlindonm | 3:0fc17139f828 | 468 | |
arlindonm | 3:0fc17139f828 | 469 | void SerialPicReceiver() |
arlindonm | 3:0fc17139f828 | 470 | { |
arlindonm | 3:0fc17139f828 | 471 | int i=0; |
arlindonm | 3:0fc17139f828 | 472 | char c; |
arlindonm | 3:0fc17139f828 | 473 | led1=!led1; |
arlindonm | 3:0fc17139f828 | 474 | while(1) |
arlindonm | 3:0fc17139f828 | 475 | { |
arlindonm | 3:0fc17139f828 | 476 | //if(!serialPic.readable()) |
arlindonm | 3:0fc17139f828 | 477 | // break; |
arlindonm | 3:0fc17139f828 | 478 | c=serialPic.getc(); |
arlindonm | 3:0fc17139f828 | 479 | serBuf[i++] = c; |
arlindonm | 3:0fc17139f828 | 480 | if(c=='\n'||i>49) break; |
arlindonm | 3:0fc17139f828 | 481 | |
arlindonm | 3:0fc17139f828 | 482 | } |
arlindonm | 3:0fc17139f828 | 483 | |
arlindonm | 3:0fc17139f828 | 484 | |
arlindonm | 3:0fc17139f828 | 485 | } |
arlindonm | 3:0fc17139f828 | 486 | void SerialRS485Receiver() |
arlindonm | 3:0fc17139f828 | 487 | { |
arlindonm | 3:0fc17139f828 | 488 | int i=0; |
arlindonm | 3:0fc17139f828 | 489 | char c; |
arlindonm | 3:0fc17139f828 | 490 | led1=!led1; |
arlindonm | 3:0fc17139f828 | 491 | while(1) |
arlindonm | 3:0fc17139f828 | 492 | { |
arlindonm | 3:0fc17139f828 | 493 | //if(!serialPic.readable()) |
arlindonm | 3:0fc17139f828 | 494 | // break; |
arlindonm | 3:0fc17139f828 | 495 | c=serialRS485.getc(); |
arlindonm | 3:0fc17139f828 | 496 | str485[i++] = c; |
arlindonm | 3:0fc17139f828 | 497 | if(c=='\n'||i>258) break; |
arlindonm | 3:0fc17139f828 | 498 | |
arlindonm | 3:0fc17139f828 | 499 | } |
arlindonm | 3:0fc17139f828 | 500 | |
arlindonm | 3:0fc17139f828 | 501 | |
arlindonm | 3:0fc17139f828 | 502 | } |
arlindonm | 3:0fc17139f828 | 503 | void BackUpRam() |
arlindonm | 3:0fc17139f828 | 504 | { |
arlindonm | 3:0fc17139f828 | 505 | serial.printf("BackUpRam:%d",++cntBK); |
arlindonm | 3:0fc17139f828 | 506 | } |
DieterGraef | 0:f9b6112278fe | 507 | int main() |
DieterGraef | 0:f9b6112278fe | 508 | { |
arlindonm | 3:0fc17139f828 | 509 | serial.baud(115200); |
arlindonm | 3:0fc17139f828 | 510 | serialPic.baud(9600); |
arlindonm | 3:0fc17139f828 | 511 | |
arlindonm | 3:0fc17139f828 | 512 | led2=1; |
arlindonm | 3:0fc17139f828 | 513 | |
arlindonm | 3:0fc17139f828 | 514 | |
arlindonm | 3:0fc17139f828 | 515 | |
arlindonm | 3:0fc17139f828 | 516 | |
arlindonm | 3:0fc17139f828 | 517 | serial.printf("*** ENERGY SMART METER ***\r\n"); |
arlindonm | 3:0fc17139f828 | 518 | serial.printf("Serial: %04d\n",SERIAL); |
DieterGraef | 0:f9b6112278fe | 519 | |
DieterGraef | 0:f9b6112278fe | 520 | if(eth.init()!=0) //for DHCP Server |
DieterGraef | 0:f9b6112278fe | 521 | { |
DieterGraef | 0:f9b6112278fe | 522 | //if(eth.init(IP,MASK,GATEWAY)!=0) { //for Static IP Address |
arlindonm | 3:0fc17139f828 | 523 | serial.printf("EthernetInterface Initialize Error \r\n"); |
arlindonm | 3:0fc17139f828 | 524 | led3=1; |
arlindonm | 3:0fc17139f828 | 525 | wait(2); |
arlindonm | 3:0fc17139f828 | 526 | NVIC_SystemReset(); |
DieterGraef | 0:f9b6112278fe | 527 | |
DieterGraef | 0:f9b6112278fe | 528 | } |
arlindonm | 3:0fc17139f828 | 529 | |
DieterGraef | 0:f9b6112278fe | 530 | if(eth.connect()!=0) |
DieterGraef | 0:f9b6112278fe | 531 | { |
arlindonm | 3:0fc17139f828 | 532 | serial.printf("EthernetInterface Connect Error \r\n"); |
arlindonm | 3:0fc17139f828 | 533 | led3=1; |
arlindonm | 3:0fc17139f828 | 534 | wait(2); |
arlindonm | 3:0fc17139f828 | 535 | NVIC_SystemReset(); |
arlindonm | 3:0fc17139f828 | 536 | |
arlindonm | 3:0fc17139f828 | 537 | |
DieterGraef | 0:f9b6112278fe | 538 | } |
arlindonm | 3:0fc17139f828 | 539 | tickerTensaoCorrente.attach(&TickTensaoCorrente,10);//cada 10s |
arlindonm | 3:0fc17139f828 | 540 | |
arlindonm | 3:0fc17139f828 | 541 | |
arlindonm | 3:0fc17139f828 | 542 | serial.printf("IP Address is %s\n", eth.getIPAddress()); |
arlindonm | 3:0fc17139f828 | 543 | // serial.printf("NetMask is %s\n", eth.getNetworkMask()); |
arlindonm | 3:0fc17139f828 | 544 | // serial.printf("Gateway Address is %s\n", eth.getGateway()); |
arlindonm | 3:0fc17139f828 | 545 | //serial.printf("Ethernet Setup OK\n"); |
arlindonm | 3:0fc17139f828 | 546 | //serial.printf("Getting time, 10s timeout. \r\n"); |
arlindonm | 3:0fc17139f828 | 547 | setClock(); |
arlindonm | 3:0fc17139f828 | 548 | int flagE=false,flagD=false; |
arlindonm | 3:0fc17139f828 | 549 | |
arlindonm | 3:0fc17139f828 | 550 | |
arlindonm | 3:0fc17139f828 | 551 | //---------- |
arlindonm | 3:0fc17139f828 | 552 | serialPic.attach(&SerialPicReceiver); |
arlindonm | 3:0fc17139f828 | 553 | serialPic.printf("*");//ler eeprom |
arlindonm | 3:0fc17139f828 | 554 | wait_ms(500); |
arlindonm | 3:0fc17139f828 | 555 | //serial.printf("SB: %s\n",serBuf); |
arlindonm | 3:0fc17139f828 | 556 | char aux[11]; |
arlindonm | 3:0fc17139f828 | 557 | aux[10]=0; |
arlindonm | 3:0fc17139f828 | 558 | for(int i=0;i<10;i++) |
arlindonm | 3:0fc17139f828 | 559 | aux[i] = serBuf[i]; |
arlindonm | 3:0fc17139f828 | 560 | energiaA = atoi(aux); |
arlindonm | 3:0fc17139f828 | 561 | serial.printf("EnergiaA: %d\n",energiaA); |
arlindonm | 3:0fc17139f828 | 562 | for(int i=0;i<10;i++) |
arlindonm | 3:0fc17139f828 | 563 | aux[i] = serBuf[i+10]; |
arlindonm | 3:0fc17139f828 | 564 | energiaB = atoi(aux); |
arlindonm | 3:0fc17139f828 | 565 | serial.printf("EnergiaB: %d\n",energiaB); |
arlindonm | 3:0fc17139f828 | 566 | for(int i=0;i<10;i++) |
arlindonm | 3:0fc17139f828 | 567 | aux[i] = serBuf[i+20]; |
arlindonm | 3:0fc17139f828 | 568 | energiaC = atoi(aux); |
arlindonm | 3:0fc17139f828 | 569 | serial.printf("EnergiaC: %d\n",energiaC); |
arlindonm | 3:0fc17139f828 | 570 | |
arlindonm | 3:0fc17139f828 | 571 | |
arlindonm | 3:0fc17139f828 | 572 | for(int i=0;i<8;i++) |
arlindonm | 3:0fc17139f828 | 573 | aux[i] = serBuf[i+30]; |
arlindonm | 3:0fc17139f828 | 574 | aux[8]=0; |
arlindonm | 3:0fc17139f828 | 575 | sprintf(strTimeInterrupt,"%s ",aux); |
arlindonm | 3:0fc17139f828 | 576 | |
arlindonm | 3:0fc17139f828 | 577 | for(int i=0;i<2;i++) |
arlindonm | 3:0fc17139f828 | 578 | aux[i] = serBuf[i+38]; |
arlindonm | 3:0fc17139f828 | 579 | aux[2] =0; |
arlindonm | 3:0fc17139f828 | 580 | sprintf(strTimeInterrupt,"%s%s:",strTimeInterrupt,aux); |
arlindonm | 3:0fc17139f828 | 581 | for(int i=0;i<2;i++) |
arlindonm | 3:0fc17139f828 | 582 | aux[i] = serBuf[i+40]; |
arlindonm | 3:0fc17139f828 | 583 | aux[2] =0; |
arlindonm | 3:0fc17139f828 | 584 | sprintf(strTimeInterrupt,"%s%s",strTimeInterrupt,aux); |
arlindonm | 3:0fc17139f828 | 585 | serial.printf("Data Interrupcao de energia:\t%s\n",strTimeInterrupt); |
arlindonm | 3:0fc17139f828 | 586 | //char strtime[30]; |
arlindonm | 3:0fc17139f828 | 587 | time_t seconds; |
arlindonm | 3:0fc17139f828 | 588 | seconds = time(NULL); |
arlindonm | 3:0fc17139f828 | 589 | strftime(strTimeReturn, 20, "%D %H:%M\n", localtime(&seconds)); |
arlindonm | 3:0fc17139f828 | 590 | serial.printf("Data Retorno de energia:\t%s\n", strTimeReturn); |
arlindonm | 3:0fc17139f828 | 591 | flagSendNoBreak=false; |
arlindonm | 3:0fc17139f828 | 592 | sendNoBreak(); |
arlindonm | 3:0fc17139f828 | 593 | //------ |
arlindonm | 3:0fc17139f828 | 594 | serialRS485.attach(&SerialRS485Receiver); |
arlindonm | 3:0fc17139f828 | 595 | |
arlindonm | 3:0fc17139f828 | 596 | sprintf(str485,"%s","12345678901234567890123456789012345678901234567890"); |
arlindonm | 3:0fc17139f828 | 597 | while(1) |
DieterGraef | 0:f9b6112278fe | 598 | { |
arlindonm | 3:0fc17139f828 | 599 | if(noBreak==0 &&flagNoBreak==false) |
arlindonm | 3:0fc17139f828 | 600 | { |
arlindonm | 3:0fc17139f828 | 601 | serial.printf("Tensao Baixa\n"); |
arlindonm | 3:0fc17139f828 | 602 | char strtime[14]; |
arlindonm | 3:0fc17139f828 | 603 | time_t seconds; |
arlindonm | 3:0fc17139f828 | 604 | seconds = time(NULL); |
arlindonm | 3:0fc17139f828 | 605 | strftime(strtime, 14, "%D%H%M", localtime(&seconds)); |
arlindonm | 3:0fc17139f828 | 606 | |
arlindonm | 3:0fc17139f828 | 607 | serialPic.printf("%10d%10d%10d%s#",energiaA,energiaB,energiaC,strtime); |
arlindonm | 3:0fc17139f828 | 608 | flagNoBreak=true; |
arlindonm | 3:0fc17139f828 | 609 | led3= 1; |
arlindonm | 3:0fc17139f828 | 610 | } |
arlindonm | 3:0fc17139f828 | 611 | |
arlindonm | 3:0fc17139f828 | 612 | |
arlindonm | 3:0fc17139f828 | 613 | if(cntTick>=60) //60 = 10minutos |
arlindonm | 3:0fc17139f828 | 614 | { |
arlindonm | 3:0fc17139f828 | 615 | |
arlindonm | 3:0fc17139f828 | 616 | tickerTensaoCorrente.detach();//?????????????????? |
arlindonm | 3:0fc17139f828 | 617 | cntTick=0; |
arlindonm | 3:0fc17139f828 | 618 | |
arlindonm | 3:0fc17139f828 | 619 | serial.printf("Send data\n"); |
arlindonm | 3:0fc17139f828 | 620 | //WatchdogRefresh(); |
arlindonm | 3:0fc17139f828 | 621 | picWatchDog =0; |
arlindonm | 3:0fc17139f828 | 622 | flagD = sendData(); |
arlindonm | 3:0fc17139f828 | 623 | picWatchDog =1; |
arlindonm | 3:0fc17139f828 | 624 | if(flagD!=0) //0 = OK |
arlindonm | 3:0fc17139f828 | 625 | { |
arlindonm | 3:0fc17139f828 | 626 | wait(0.1); |
arlindonm | 3:0fc17139f828 | 627 | |
arlindonm | 3:0fc17139f828 | 628 | picWatchDog =0; |
arlindonm | 3:0fc17139f828 | 629 | flagD = sendData(); |
arlindonm | 3:0fc17139f828 | 630 | picWatchDog =1; |
arlindonm | 3:0fc17139f828 | 631 | if(flagD!=0) |
arlindonm | 3:0fc17139f828 | 632 | { |
arlindonm | 3:0fc17139f828 | 633 | |
arlindonm | 3:0fc17139f828 | 634 | if(!STOPEMAIL)//debug |
arlindonm | 3:0fc17139f828 | 635 | { |
arlindonm | 3:0fc17139f828 | 636 | picWatchDog =0; |
arlindonm | 3:0fc17139f828 | 637 | flagE = sendEmail(); |
arlindonm | 3:0fc17139f828 | 638 | picWatchDog =1; |
arlindonm | 3:0fc17139f828 | 639 | if(flagE!=0) |
arlindonm | 3:0fc17139f828 | 640 | { |
arlindonm | 3:0fc17139f828 | 641 | |
arlindonm | 3:0fc17139f828 | 642 | picWatchDog =0; |
arlindonm | 3:0fc17139f828 | 643 | flagE = sendEmail(); |
arlindonm | 3:0fc17139f828 | 644 | picWatchDog =1; |
arlindonm | 3:0fc17139f828 | 645 | } |
arlindonm | 3:0fc17139f828 | 646 | } |
arlindonm | 3:0fc17139f828 | 647 | } |
arlindonm | 3:0fc17139f828 | 648 | } |
arlindonm | 3:0fc17139f828 | 649 | if(flagD !=0 && flagE!=0) |
arlindonm | 3:0fc17139f828 | 650 | BackUpRam(); |
arlindonm | 3:0fc17139f828 | 651 | tickerTensaoCorrente.attach(&TickTensaoCorrente,10);//cada 5s |
arlindonm | 3:0fc17139f828 | 652 | |
arlindonm | 3:0fc17139f828 | 653 | |
arlindonm | 3:0fc17139f828 | 654 | } |
arlindonm | 3:0fc17139f828 | 655 | if(cntTickHora>720)//1hora |
arlindonm | 3:0fc17139f828 | 656 | { |
arlindonm | 3:0fc17139f828 | 657 | cntTickHora=0; |
arlindonm | 3:0fc17139f828 | 658 | if(flagSendNoBreak==false) |
arlindonm | 3:0fc17139f828 | 659 | sendNoBreak(); |
arlindonm | 3:0fc17139f828 | 660 | setClock(); |
arlindonm | 3:0fc17139f828 | 661 | } |
arlindonm | 3:0fc17139f828 | 662 | // if(flagD==0) |
arlindonm | 3:0fc17139f828 | 663 | // led1=!led1; |
arlindonm | 3:0fc17139f828 | 664 | wait_ms(50); |
DieterGraef | 0:f9b6112278fe | 665 | } |
arlindonm | 3:0fc17139f828 | 666 | |
DieterGraef | 0:f9b6112278fe | 667 | |
DieterGraef | 0:f9b6112278fe | 668 | } |