11B_DOGFEEDER

Dependencies:   HX711 MFRC522 mbed

Committer:
Amyrctdp
Date:
Tue Dec 08 20:51:28 2015 +0000
Revision:
1:67bbb9d1523a
Parent:
0:317bb26b7c83
a
;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Amyrctdp 0:317bb26b7c83 1 #include "mbed.h"
Amyrctdp 0:317bb26b7c83 2 #include "MFRC522.h"
Amyrctdp 0:317bb26b7c83 3 #include "HX711.h"
Amyrctdp 0:317bb26b7c83 4 #include <cmath>
Amyrctdp 0:317bb26b7c83 5 #define standard (float)0.001
Amyrctdp 0:317bb26b7c83 6 Timer t_esp;
Amyrctdp 0:317bb26b7c83 7 Serial pc(USBTX, USBRX);
Amyrctdp 0:317bb26b7c83 8 Serial esp(D8, D2);
Amyrctdp 0:317bb26b7c83 9 Timer t;
Amyrctdp 0:317bb26b7c83 10 int count,ended,timeout;
Amyrctdp 0:317bb26b7c83 11 char buf[1024];
Amyrctdp 0:317bb26b7c83 12 char snd[255];
Amyrctdp 0:317bb26b7c83 13 char data1[3];
Amyrctdp 0:317bb26b7c83 14 char data2[3];
Amyrctdp 0:317bb26b7c83 15 char data3[3];
Amyrctdp 0:317bb26b7c83 16 char data4[3];
Amyrctdp 0:317bb26b7c83 17 char GET[255] = "GET /update?key=ICJ0ZF8N5NLYLW0B";
Amyrctdp 0:317bb26b7c83 18 char length[255] = "AT+CIPSEND=74\r\n";
Amyrctdp 0:317bb26b7c83 19 char ssid[32] = "KMUTT_WIFI";
Amyrctdp 0:317bb26b7c83 20 char pwd [32] = "";
Amyrctdp 0:317bb26b7c83 21 void SendCMD(),getreply(),ESPconfig(),ESPsetbaudrate();
Amyrctdp 0:317bb26b7c83 22 MFRC522 RfChip(D11, D12, D13, D14,D7);
Amyrctdp 0:317bb26b7c83 23 DigitalOut A4988STEP(D4);
Amyrctdp 0:317bb26b7c83 24 DigitalOut A4988DIR(D3);
Amyrctdp 0:317bb26b7c83 25 HX711 Balance(D5,D6);
Amyrctdp 0:317bb26b7c83 26 int Case1;
Amyrctdp 0:317bb26b7c83 27 int BeforeGram=0;
Amyrctdp 0:317bb26b7c83 28 int AfterGram=0;
Amyrctdp 0:317bb26b7c83 29 int ChangeG=0;
Amyrctdp 0:317bb26b7c83 30 int TotalG = 0;
Amyrctdp 0:317bb26b7c83 31 int TotalOG = 0;
Amyrctdp 0:317bb26b7c83 32
Amyrctdp 0:317bb26b7c83 33 void STEP()
Amyrctdp 0:317bb26b7c83 34 {
Amyrctdp 0:317bb26b7c83 35 A4988DIR = 0;
Amyrctdp 0:317bb26b7c83 36 A4988STEP = 0;
Amyrctdp 0:317bb26b7c83 37 for (int i = 0 ; i<50 ; i++) {
Amyrctdp 0:317bb26b7c83 38 A4988STEP = 1;
Amyrctdp 0:317bb26b7c83 39 wait(0.03);
Amyrctdp 0:317bb26b7c83 40 A4988STEP = 0;
Amyrctdp 0:317bb26b7c83 41 wait(0.03);
Amyrctdp 0:317bb26b7c83 42 }
Amyrctdp 0:317bb26b7c83 43 }
Amyrctdp 0:317bb26b7c83 44
Amyrctdp 0:317bb26b7c83 45 int Rfid()
Amyrctdp 0:317bb26b7c83 46 {
Amyrctdp 0:317bb26b7c83 47 int i = 1,K;
Amyrctdp 0:317bb26b7c83 48 K=0;
Amyrctdp 0:317bb26b7c83 49 while(i == 1) {
Amyrctdp 0:317bb26b7c83 50 K=0;
Amyrctdp 0:317bb26b7c83 51 if ( ! RfChip.PICC_IsNewCardPresent()) {
Amyrctdp 0:317bb26b7c83 52 //pc.printf("IT IS UnReadable \n");
Amyrctdp 0:317bb26b7c83 53 wait_ms(500);
Amyrctdp 0:317bb26b7c83 54 break;
Amyrctdp 0:317bb26b7c83 55 }
Amyrctdp 0:317bb26b7c83 56 if (RfChip.PICC_ReadCardSerial()) {
Amyrctdp 0:317bb26b7c83 57 pc.printf("Readable \n");
Amyrctdp 0:317bb26b7c83 58 wait_ms(500);
Amyrctdp 0:317bb26b7c83 59 K = 1;
Amyrctdp 0:317bb26b7c83 60 }
Amyrctdp 0:317bb26b7c83 61 i=0;
Amyrctdp 0:317bb26b7c83 62 }
Amyrctdp 0:317bb26b7c83 63 return K;
Amyrctdp 0:317bb26b7c83 64 }
Amyrctdp 0:317bb26b7c83 65
Amyrctdp 0:317bb26b7c83 66 int GetGram()
Amyrctdp 0:317bb26b7c83 67 {
Amyrctdp 0:317bb26b7c83 68 long value;
Amyrctdp 0:317bb26b7c83 69 long valueTare;
Amyrctdp 0:317bb26b7c83 70 float kilo;
Amyrctdp 0:317bb26b7c83 71 float kilo2=0,condition;
Amyrctdp 0:317bb26b7c83 72 int gram = 0;
Amyrctdp 0:317bb26b7c83 73 int x = 0;
Amyrctdp 0:317bb26b7c83 74 int state,j=0;
Amyrctdp 0:317bb26b7c83 75 float diff_kilo;
Amyrctdp 0:317bb26b7c83 76 valueTare = 8960566;
Amyrctdp 0:317bb26b7c83 77 for(int i = 0 ; i<1 ; i++) {
Amyrctdp 0:317bb26b7c83 78 wait_ms(1000);
Amyrctdp 0:317bb26b7c83 79 value = Balance.getValue();
Amyrctdp 0:317bb26b7c83 80 kilo = (((float)value-(float)valueTare)/143200);
Amyrctdp 0:317bb26b7c83 81 kilo= abs (kilo);
Amyrctdp 0:317bb26b7c83 82 diff_kilo=kilo - kilo2;
Amyrctdp 0:317bb26b7c83 83 diff_kilo = abs(diff_kilo);
Amyrctdp 0:317bb26b7c83 84 wait(0.5);
Amyrctdp 0:317bb26b7c83 85 //pc.printf("diff ; %f \n",diff_kilo && gram==0);
Amyrctdp 0:317bb26b7c83 86
Amyrctdp 0:317bb26b7c83 87 if(kilo > standard) {
Amyrctdp 0:317bb26b7c83 88 gram = kilo* (float)70.4014 ;//convert to gram
Amyrctdp 0:317bb26b7c83 89 } else if(kilo < standard) {
Amyrctdp 0:317bb26b7c83 90 gram=0;
Amyrctdp 0:317bb26b7c83 91 } else if(kilo<kilo2 && diff_kilo > standard && state!=0) {
Amyrctdp 0:317bb26b7c83 92 pc.printf("kg old = %.2f\n",gram);
Amyrctdp 0:317bb26b7c83 93 gram = gram-condition ;
Amyrctdp 0:317bb26b7c83 94 j=0;
Amyrctdp 0:317bb26b7c83 95 pc.printf("kg new = %.2f\n",gram);
Amyrctdp 0:317bb26b7c83 96 pc.printf("condition = %d\n",condition);
Amyrctdp 0:317bb26b7c83 97 } else if(diff_kilo > standard && gram !=0 && kilo>kilo2) {
Amyrctdp 0:317bb26b7c83 98 condition = gram;
Amyrctdp 0:317bb26b7c83 99 gram = condition + (diff_kilo* (float)70.4014) ;
Amyrctdp 0:317bb26b7c83 100 state=j+1;
Amyrctdp 0:317bb26b7c83 101 i++;
Amyrctdp 0:317bb26b7c83 102 }
Amyrctdp 0:317bb26b7c83 103 //pc.printf("Valeur : %ld Poids : %.3f RPoids : %.3f\n",value,kilo,kilo2);
Amyrctdp 0:317bb26b7c83 104 //pc.printf("Gram : %d g \n",gram);
Amyrctdp 0:317bb26b7c83 105 x = gram;
Amyrctdp 0:317bb26b7c83 106 gram = 0;
Amyrctdp 0:317bb26b7c83 107 kilo2=kilo;
Amyrctdp 0:317bb26b7c83 108 }
Amyrctdp 0:317bb26b7c83 109 return x;
Amyrctdp 0:317bb26b7c83 110 }
Amyrctdp 0:317bb26b7c83 111
Amyrctdp 0:317bb26b7c83 112 int main()
Amyrctdp 0:317bb26b7c83 113 {
Amyrctdp 0:317bb26b7c83 114 pc.baud(9600);
Amyrctdp 0:317bb26b7c83 115 esp.baud(9600);
Amyrctdp 0:317bb26b7c83 116 RfChip.PCD_Init();
Amyrctdp 0:317bb26b7c83 117 int II;
Amyrctdp 0:317bb26b7c83 118 int GG=0;
Amyrctdp 0:317bb26b7c83 119 while(1) {
Amyrctdp 0:317bb26b7c83 120 II = Rfid();
Amyrctdp 0:317bb26b7c83 121 printf("II State =%d \n",II);
Amyrctdp 0:317bb26b7c83 122 printf("Main Gram = %d \n",GG);
Amyrctdp 0:317bb26b7c83 123 switch(II){
Amyrctdp 0:317bb26b7c83 124 case 1 :
Amyrctdp 0:317bb26b7c83 125 int OG = 0;
Amyrctdp 0:317bb26b7c83 126 int SG=0;
Amyrctdp 0:317bb26b7c83 127 int count = 20;
Amyrctdp 0:317bb26b7c83 128 BeforeGram = GetGram(); // Memory First
Amyrctdp 0:317bb26b7c83 129 TotalOG = TotalG;
Amyrctdp 0:317bb26b7c83 130 do{
Amyrctdp 0:317bb26b7c83 131 OG = GG;
Amyrctdp 0:317bb26b7c83 132 GG = GetGram();
Amyrctdp 0:317bb26b7c83 133 SG = OG - GG ;
Amyrctdp 0:317bb26b7c83 134 if(SG == 0){ count--; }
Amyrctdp 0:317bb26b7c83 135 printf("SG = %d \n",SG);
Amyrctdp 0:317bb26b7c83 136 printf("count = %d \n",count);
Amyrctdp 0:317bb26b7c83 137 }while(count != 0);
Amyrctdp 0:317bb26b7c83 138 AfterGram = GG; // Memory Last
Amyrctdp 0:317bb26b7c83 139 ChangeG = BeforeGram - AfterGram;
Amyrctdp 0:317bb26b7c83 140 TotalOG = ChangeG + TotalOG;
Amyrctdp 0:317bb26b7c83 141 printf("Before gram :%d\n",BeforeGram);
Amyrctdp 0:317bb26b7c83 142 printf("After gram :%d\n",AfterGram);
Amyrctdp 0:317bb26b7c83 143 printf("Change gram :%d\n",ChangeG);
Amyrctdp 0:317bb26b7c83 144 pc.printf("B=%d,A=%d,C=%d,T=%d,",BeforeGram,AfterGram,ChangeG,TotalOG);
Amyrctdp 0:317bb26b7c83 145 ESPconfig();
Amyrctdp 0:317bb26b7c83 146 break;
Amyrctdp 0:317bb26b7c83 147 // }
Amyrctdp 0:317bb26b7c83 148 case 0 :
Amyrctdp 0:317bb26b7c83 149 printf("UnReadable \n");
Amyrctdp 0:317bb26b7c83 150
Amyrctdp 0:317bb26b7c83 151 // else if(II == 0) {
Amyrctdp 0:317bb26b7c83 152 if(GG < 100) {
Amyrctdp 0:317bb26b7c83 153 printf("Step \n");
Amyrctdp 0:317bb26b7c83 154 STEP();
Amyrctdp 0:317bb26b7c83 155 break;}
Amyrctdp 0:317bb26b7c83 156 // }
Amyrctdp 0:317bb26b7c83 157
Amyrctdp 0:317bb26b7c83 158
Amyrctdp 0:317bb26b7c83 159 }
Amyrctdp 0:317bb26b7c83 160 GG = GetGram();
Amyrctdp 0:317bb26b7c83 161 TotalG = TotalOG;
Amyrctdp 0:317bb26b7c83 162 printf("Total = %d \n",TotalG);
Amyrctdp 0:317bb26b7c83 163 }
Amyrctdp 0:317bb26b7c83 164 }
Amyrctdp 0:317bb26b7c83 165 void ESPconfig()
Amyrctdp 0:317bb26b7c83 166 {
Amyrctdp 0:317bb26b7c83 167
Amyrctdp 0:317bb26b7c83 168 wait(5);
Amyrctdp 0:317bb26b7c83 169 //wait(2);
Amyrctdp 0:317bb26b7c83 170 strcpy(snd,"AT\r\n");
Amyrctdp 0:317bb26b7c83 171 SendCMD();
Amyrctdp 0:317bb26b7c83 172 timeout=3;
Amyrctdp 0:317bb26b7c83 173 getreply();
Amyrctdp 0:317bb26b7c83 174 pc.printf(buf);
Amyrctdp 0:317bb26b7c83 175
Amyrctdp 0:317bb26b7c83 176 wait(2);
Amyrctdp 0:317bb26b7c83 177 pc.printf("\f---------- Starting ESP Config ----------\r\n\n");
Amyrctdp 0:317bb26b7c83 178
Amyrctdp 0:317bb26b7c83 179 pc.printf("---------- Reset & get Firmware ----------\r\n");
Amyrctdp 0:317bb26b7c83 180 strcpy(snd,"AT+RST\r\n");
Amyrctdp 0:317bb26b7c83 181 SendCMD();
Amyrctdp 0:317bb26b7c83 182 timeout=3;
Amyrctdp 0:317bb26b7c83 183 getreply();
Amyrctdp 0:317bb26b7c83 184 pc.printf(buf);
Amyrctdp 0:317bb26b7c83 185
Amyrctdp 0:317bb26b7c83 186 wait(2);
Amyrctdp 0:317bb26b7c83 187
Amyrctdp 0:317bb26b7c83 188 // set CWMODE to 1=Station,2=AP,3=BOTH, default mode 1 (Station)
Amyrctdp 0:317bb26b7c83 189 pc.printf("\n---------- Setting Mode ----------\r\n");
Amyrctdp 0:317bb26b7c83 190 strcpy(snd, "AT+CWMODE=1\r\n");
Amyrctdp 0:317bb26b7c83 191 SendCMD();
Amyrctdp 0:317bb26b7c83 192 timeout=5;
Amyrctdp 0:317bb26b7c83 193 getreply();
Amyrctdp 0:317bb26b7c83 194 pc.printf(buf);
Amyrctdp 0:317bb26b7c83 195
Amyrctdp 0:317bb26b7c83 196 wait(2);
Amyrctdp 0:317bb26b7c83 197
Amyrctdp 0:317bb26b7c83 198 // set CIPMUX to 0=Single,1=Multi
Amyrctdp 0:317bb26b7c83 199 pc.printf("\n---------- Setting Connection Mode ----------\r\n");
Amyrctdp 0:317bb26b7c83 200 strcpy(snd, "AT+CIPMUX=0\r\n");
Amyrctdp 0:317bb26b7c83 201 SendCMD();
Amyrctdp 0:317bb26b7c83 202 timeout=3;
Amyrctdp 0:317bb26b7c83 203 getreply();
Amyrctdp 0:317bb26b7c83 204 pc.printf(buf);
Amyrctdp 0:317bb26b7c83 205
Amyrctdp 0:317bb26b7c83 206 wait(2);
Amyrctdp 0:317bb26b7c83 207
Amyrctdp 0:317bb26b7c83 208 pc.printf("\n---------- Connecting to AP ----------\r\n");
Amyrctdp 0:317bb26b7c83 209 pc.printf("ssid = %s pwd = %s\r\n",ssid,pwd);
Amyrctdp 0:317bb26b7c83 210 strcpy(snd, "AT+CWJAP=\"");
Amyrctdp 0:317bb26b7c83 211 strcat(snd, ssid);
Amyrctdp 0:317bb26b7c83 212 strcat(snd, "\",\"");
Amyrctdp 0:317bb26b7c83 213 strcat(snd, pwd);
Amyrctdp 0:317bb26b7c83 214 strcat(snd, "\"\r\n");
Amyrctdp 0:317bb26b7c83 215 SendCMD();
Amyrctdp 0:317bb26b7c83 216 timeout=10;
Amyrctdp 0:317bb26b7c83 217 getreply();
Amyrctdp 0:317bb26b7c83 218 pc.printf(buf);
Amyrctdp 0:317bb26b7c83 219
Amyrctdp 0:317bb26b7c83 220 wait(2);
Amyrctdp 0:317bb26b7c83 221
Amyrctdp 0:317bb26b7c83 222 pc.printf("\n---------- Get Connection Status ----------\r\n");
Amyrctdp 0:317bb26b7c83 223 strcpy(snd, "AT+CIPSTATUS\r\n");
Amyrctdp 0:317bb26b7c83 224 SendCMD();
Amyrctdp 0:317bb26b7c83 225 timeout=3;
Amyrctdp 0:317bb26b7c83 226 getreply();
Amyrctdp 0:317bb26b7c83 227 pc.printf(buf);
Amyrctdp 0:317bb26b7c83 228
Amyrctdp 0:317bb26b7c83 229 pc.printf("\n---------- SEND COMMAND ----------\r\n");
Amyrctdp 0:317bb26b7c83 230 strcpy(snd,"AT+CIPSTART=\"TCP\",\"184.106.153.149\",80\r\n");
Amyrctdp 0:317bb26b7c83 231 SendCMD();
Amyrctdp 0:317bb26b7c83 232 timeout=5;
Amyrctdp 0:317bb26b7c83 233 getreply();
Amyrctdp 0:317bb26b7c83 234 pc.printf(buf);
Amyrctdp 0:317bb26b7c83 235
Amyrctdp 0:317bb26b7c83 236 sprintf(data1, "%d",BeforeGram);
Amyrctdp 0:317bb26b7c83 237 strcat(GET,"&field1=");
Amyrctdp 0:317bb26b7c83 238 strcat(GET,data1);
Amyrctdp 0:317bb26b7c83 239
Amyrctdp 0:317bb26b7c83 240 sprintf(data2, "%d",AfterGram);
Amyrctdp 0:317bb26b7c83 241 strcat(GET,"&field2=");
Amyrctdp 0:317bb26b7c83 242 strcat(GET,data2);
Amyrctdp 0:317bb26b7c83 243
Amyrctdp 0:317bb26b7c83 244 sprintf(data3, "%d",ChangeG);
Amyrctdp 0:317bb26b7c83 245 strcat(GET,"&field3=");
Amyrctdp 0:317bb26b7c83 246 strcat(GET,data3);
Amyrctdp 0:317bb26b7c83 247
Amyrctdp 0:317bb26b7c83 248 sprintf(data4, "%d",TotalOG);
Amyrctdp 0:317bb26b7c83 249 strcat(GET,"&field4=");
Amyrctdp 0:317bb26b7c83 250 strcat(GET,data4);
Amyrctdp 0:317bb26b7c83 251
Amyrctdp 0:317bb26b7c83 252
Amyrctdp 0:317bb26b7c83 253 strcat(GET,"\r\n");
Amyrctdp 0:317bb26b7c83 254
Amyrctdp 0:317bb26b7c83 255
Amyrctdp 0:317bb26b7c83 256 strcpy(snd,length);
Amyrctdp 0:317bb26b7c83 257 SendCMD();
Amyrctdp 0:317bb26b7c83 258 timeout=2;
Amyrctdp 0:317bb26b7c83 259 getreply();
Amyrctdp 0:317bb26b7c83 260 pc.printf(buf);
Amyrctdp 0:317bb26b7c83 261
Amyrctdp 0:317bb26b7c83 262 strcpy(snd,GET);
Amyrctdp 0:317bb26b7c83 263 SendCMD();
Amyrctdp 0:317bb26b7c83 264 timeout=10;
Amyrctdp 0:317bb26b7c83 265 getreply();
Amyrctdp 0:317bb26b7c83 266 pc.printf(buf);
Amyrctdp 0:317bb26b7c83 267
Amyrctdp 0:317bb26b7c83 268 wait(60);
Amyrctdp 0:317bb26b7c83 269
Amyrctdp 0:317bb26b7c83 270 pc.printf("\n---------- END ----------\r\n");
Amyrctdp 0:317bb26b7c83 271
Amyrctdp 0:317bb26b7c83 272 }
Amyrctdp 0:317bb26b7c83 273 void SendCMD()
Amyrctdp 0:317bb26b7c83 274 {
Amyrctdp 0:317bb26b7c83 275 esp.printf("%s", snd);
Amyrctdp 0:317bb26b7c83 276 }
Amyrctdp 0:317bb26b7c83 277
Amyrctdp 0:317bb26b7c83 278 void getreply()
Amyrctdp 0:317bb26b7c83 279 {
Amyrctdp 0:317bb26b7c83 280 memset(buf, '\0', sizeof(buf));
Amyrctdp 0:317bb26b7c83 281 t_esp.start();
Amyrctdp 0:317bb26b7c83 282 ended=0;
Amyrctdp 0:317bb26b7c83 283 count=0;
Amyrctdp 0:317bb26b7c83 284 while(!ended)
Amyrctdp 0:317bb26b7c83 285 {
Amyrctdp 0:317bb26b7c83 286 if(esp.readable())
Amyrctdp 0:317bb26b7c83 287 {
Amyrctdp 0:317bb26b7c83 288 buf[count] = esp.getc();
Amyrctdp 0:317bb26b7c83 289 count++;
Amyrctdp 0:317bb26b7c83 290 }
Amyrctdp 0:317bb26b7c83 291 if(t_esp.read() > timeout) {
Amyrctdp 0:317bb26b7c83 292 ended = 1;
Amyrctdp 0:317bb26b7c83 293 t_esp.stop();
Amyrctdp 0:317bb26b7c83 294 t_esp.reset();
Amyrctdp 0:317bb26b7c83 295 }
Amyrctdp 0:317bb26b7c83 296 }
Amyrctdp 0:317bb26b7c83 297 }