ProjetoBB

Dependencies:   F7_Ethernet WebSocketClient mbed mcp3008

Fork of Nucleo_F746ZG_Ethernet by Dieter Graef

Committer:
arlindonm
Date:
Wed Feb 07 11:19:05 2018 +0000
Revision:
4:7e16324b4d91
Parent:
3:0fc17139f828
ProjetoBB070218

Who changed what in which revision?

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