11B_DOGFEEDER

Dependencies:   HX711 MFRC522 mbed

main.cpp

Committer:
Amyrctdp
Date:
2015-12-08
Revision:
0:317bb26b7c83

File content as of revision 0:317bb26b7c83:

#include "mbed.h"
#include "MFRC522.h"
#include "HX711.h"
#include <cmath>
#define standard (float)0.001
Timer t_esp;
Serial pc(USBTX, USBRX);
Serial esp(D8, D2);
Timer t;
int  count,ended,timeout;
char buf[1024];
char snd[255];
char data1[3];
char data2[3];
char data3[3];
char data4[3];
char GET[255] = "GET /update?key=ICJ0ZF8N5NLYLW0B";
char length[255] = "AT+CIPSEND=74\r\n";
char ssid[32] = "KMUTT_WIFI";
char pwd [32] = "";
void SendCMD(),getreply(),ESPconfig(),ESPsetbaudrate();
MFRC522    RfChip(D11, D12, D13, D14,D7);
DigitalOut A4988STEP(D4);
DigitalOut A4988DIR(D3);
HX711 Balance(D5,D6);
int Case1;
int BeforeGram=0;
int AfterGram=0;
int ChangeG=0;
int TotalG = 0;
int TotalOG = 0;

void STEP()
{
    A4988DIR = 0;
    A4988STEP = 0;
    for (int i = 0 ; i<50 ; i++) {
        A4988STEP = 1;
        wait(0.03);
        A4988STEP = 0;
        wait(0.03);
    }
}

int Rfid()
{
    int i = 1,K;
    K=0;
    while(i == 1) {
        K=0;
        if ( ! RfChip.PICC_IsNewCardPresent()) {
            //pc.printf("IT IS UnReadable \n");
            wait_ms(500);
            break;
        }
        if (RfChip.PICC_ReadCardSerial()) {
            pc.printf("Readable \n");
            wait_ms(500);
            K = 1;
        }
        i=0;
    }
    return K;
}

int GetGram()
{
    long value;
    long valueTare;
    float kilo;
    float kilo2=0,condition;
    int gram = 0;
    int x = 0;
    int state,j=0;
    float diff_kilo;
    valueTare = 8960566; 
    for(int i = 0 ; i<1 ; i++) {
        wait_ms(1000);
        value = Balance.getValue();
        kilo = (((float)value-(float)valueTare)/143200);
        kilo= abs (kilo);
        diff_kilo=kilo - kilo2;
        diff_kilo = abs(diff_kilo);
        wait(0.5);
        //pc.printf("diff ; %f \n",diff_kilo && gram==0);

        if(kilo > standard) {
            gram = kilo* (float)70.4014 ;//convert to gram
        } else if(kilo < standard) {
            gram=0;
        } else if(kilo<kilo2 && diff_kilo > standard && state!=0) {
            pc.printf("kg old = %.2f\n",gram);
            gram = gram-condition ;
            j=0;
            pc.printf("kg new = %.2f\n",gram);
            pc.printf("condition  = %d\n",condition);
        } else if(diff_kilo > standard && gram !=0 && kilo>kilo2) {
            condition = gram;
            gram = condition + (diff_kilo* (float)70.4014) ;
            state=j+1;
            i++;
        }
        //pc.printf("Valeur : %ld          Poids : %.3f       RPoids : %.3f\n",value,kilo,kilo2);
        //pc.printf("Gram : %d g        \n",gram);
        x = gram;
        gram = 0;
        kilo2=kilo;
    }
    return x;
}

int main()
{
    pc.baud(9600);
   esp.baud(9600);
    RfChip.PCD_Init();
    int II;
    int GG=0;
    while(1) {
        II = Rfid();
        printf("II State =%d \n",II);
        printf("Main Gram = %d \n",GG);
        switch(II){
            case 1 :
            int OG = 0; 
            int SG=0;
            int count = 20;
            BeforeGram = GetGram(); // Memory First
            TotalOG = TotalG;
            do{
            OG = GG;
            GG = GetGram();
            SG = OG - GG ;
            if(SG == 0){ count--; }
            printf("SG = %d \n",SG);
            printf("count = %d \n",count);
            }while(count != 0);
            AfterGram = GG; // Memory Last
            ChangeG = BeforeGram - AfterGram;
            TotalOG = ChangeG + TotalOG;
            printf("Before gram :%d\n",BeforeGram);
            printf("After gram :%d\n",AfterGram);
            printf("Change gram :%d\n",ChangeG);
            pc.printf("B=%d,A=%d,C=%d,T=%d,",BeforeGram,AfterGram,ChangeG,TotalOG);
            ESPconfig();
            break;
       // }
            case 0 :
            printf("UnReadable \n");
         
       // else if(II == 0) {
            if(GG < 100) {
                printf("Step \n");
                STEP();
                break;}
         //   }
                
            
        }
       GG = GetGram();
       TotalG = TotalOG;
       printf("Total = %d \n",TotalG);
    }
}
void ESPconfig()
{
    
    wait(5);
    //wait(2);
    strcpy(snd,"AT\r\n");
    SendCMD();
    timeout=3;
    getreply();
    pc.printf(buf);
    
    wait(2);
    pc.printf("\f---------- Starting ESP Config ----------\r\n\n");

    pc.printf("---------- Reset & get Firmware ----------\r\n");
    strcpy(snd,"AT+RST\r\n");
    SendCMD();
    timeout=3;
    getreply();
    pc.printf(buf);

    wait(2);

    // set CWMODE to 1=Station,2=AP,3=BOTH, default mode 1 (Station)
    pc.printf("\n---------- Setting Mode ----------\r\n");
    strcpy(snd, "AT+CWMODE=1\r\n");
    SendCMD();
    timeout=5;
    getreply();
    pc.printf(buf);

    wait(2);

    // set CIPMUX to 0=Single,1=Multi
    pc.printf("\n---------- Setting Connection Mode ----------\r\n");
    strcpy(snd, "AT+CIPMUX=0\r\n");
    SendCMD();
    timeout=3;
    getreply();
    pc.printf(buf);

    wait(2);

    pc.printf("\n---------- Connecting to AP ----------\r\n");
    pc.printf("ssid = %s   pwd = %s\r\n",ssid,pwd);
    strcpy(snd, "AT+CWJAP=\"");
    strcat(snd, ssid);
    strcat(snd, "\",\"");
    strcat(snd, pwd);
    strcat(snd, "\"\r\n");
    SendCMD();
    timeout=10;
    getreply();
    pc.printf(buf);

    wait(2);

    pc.printf("\n---------- Get Connection Status ----------\r\n");
    strcpy(snd, "AT+CIPSTATUS\r\n");
    SendCMD();
    timeout=3;
    getreply();
    pc.printf(buf);

        pc.printf("\n---------- SEND COMMAND ----------\r\n");
        strcpy(snd,"AT+CIPSTART=\"TCP\",\"184.106.153.149\",80\r\n");
        SendCMD();
        timeout=5;
        getreply();
        pc.printf(buf);

        sprintf(data1, "%d",BeforeGram);
        strcat(GET,"&field1=");
        strcat(GET,data1);
        
        sprintf(data2, "%d",AfterGram);
        strcat(GET,"&field2=");
        strcat(GET,data2);
        
        sprintf(data3, "%d",ChangeG);
        strcat(GET,"&field3=");
        strcat(GET,data3);
        
        sprintf(data4, "%d",TotalOG);
        strcat(GET,"&field4=");
        strcat(GET,data4);
        
        
        strcat(GET,"\r\n");
        

        strcpy(snd,length);
        SendCMD();
        timeout=2;
        getreply();
        pc.printf(buf);
        
        strcpy(snd,GET);
        SendCMD();
        timeout=10;
        getreply();
        pc.printf(buf);   
        
        wait(60);

        pc.printf("\n---------- END ----------\r\n");
        
}
void SendCMD()
{
    esp.printf("%s", snd);
}

void getreply()
{
    memset(buf, '\0', sizeof(buf));
    t_esp.start();
    ended=0;
    count=0;
    while(!ended)
    {
        if(esp.readable()) 
        {
            buf[count] = esp.getc();
            count++;
        }
        if(t_esp.read() > timeout) {
            ended = 1;
            t_esp.stop();
            t_esp.reset();
        }
    }
}