til TT

Dependencies:   EthernetInterface ThingCloud mbed-rtos mbed

main.cpp

Committer:
gert_lauritsen
Date:
2016-07-28
Revision:
2:20a840e0ff72
Parent:
1:4e7bedad6920

File content as of revision 2:20a840e0ff72:

#include "mbed.h"
#include "EthernetInterface.h"
#include "thingspeak.h"

#define apikey1 "29KO1SSTACFU295A"
#define apikey2 "262BP2WZLBS2VHWV"

EthernetInterface eth;
char* thingSpeakKey1 = apikey1;
char* thingSpeakKey2 = apikey2;
Serial pc(USBTX, USBRX);     // serial comms over usb back to console
Serial extpc(p28,p27);
Serial Radio(p9,p10);
THINGSPEAK Channel;
DigitalOut led(LED1);
DigitalOut flowindi(LED2);

AnalogIn transmitter(p15);
AnalogIn amb(p16);
InterruptIn flow(p17);
AnalogIn vand(p18);
AnalogIn retur(p19);
AnalogIn oltemp(p20);

int flowCount;
char InBuff[100];
char *p;

float Tryk;
float Flow;
float AmbiantTemp,AmbiantTemp2;
float WaterTemp;
float MidtTemp; //2
float ReturTemp;
float BeerTemp,BeerTemp2;
float PumpeEnde; //2
float SlangeEnde;

size_t parse ( char *line, char *list[], size_t size )
{
    char   *p;
    size_t n;

    p = line;
    n = 0;
    for ( ; ; ) {
        /* Ditch leading commas */
        while ( *p == ' ' )
            p++;
        /* Nothing of use */
        if ( *p == '\0' )
            return n;
        /* Save the string */
        list[n++] = p;
        /* Find the next field */
        while ( *p != ' ' && *p != '\0' )
            p++;
        /* Nothing else of use or too many fields */
        if ( *p == '\0' || n >= size )
            return n;
        /* Split the field */
        *p++ = '\0';
    }
}


void GetData()
{
    Timer t;
    char *list[4];
    char a,ch;
    char waiting;
    p=&InBuff[0];
    Radio.printf("!");
    waiting=1;
    a=0;
    led=1;
    t.start();
    while (waiting) {
        if (t.read_ms()>1000) {
            Radio.printf("!");
            t.reset();
            t.start();
            a=0;
            pc.printf("Retry\r\n");
        }
        if (Radio.readable()) {
            ch=Radio.getc();
            if ((ch!=0x0A) && (ch!=0x0D)) InBuff[a++]=ch;
            if (ch==0x0D) {
                InBuff[a]=0;

                t.stop();
                led=0;
                //pc.printf("%s\r\n",InBuff);
                
                if (parse(p,list,100)==4) {
                    AmbiantTemp2=atof(list[0]);
                    MidtTemp=atof(list[1]);
                    BeerTemp2=atof(list[2]);
                    SlangeEnde=atof(list[3]);
                    waiting=0;
                }
                else {
                    pc.printf("decodeError\r\n");
                    waiting=0;
                 /*   Radio.printf("!");
                    t.reset();
                    t.start();
                    a=0;
                    p=&InBuff[0];*/
                }    

                // sscanf(InBuff,"%f %f %f %f",AmbiantTemp2,MidtTemp,BeerTemp2,SlangeEnde);
                //pc.printf("%f %f %f %f\r\n",AmbiantTemp2,MidtTemp,BeerTemp2,SlangeEnde);
            }
        }
    }
    led=0;
}

void readAnalog()
{
    Flow=(float)flowCount/(17*1200);
    Tryk=(transmitter.read()*3.3-0.597)*4,16;
    AmbiantTemp=(amb.read()*3.3-0.25)/0.028;
    WaterTemp=(vand.read()*3.3-0.25)/0.028;
    ReturTemp=(retur.read()*3.3-0.25)/0.028;
    BeerTemp=(oltemp.read()*3.3-0.25)/0.028;
    Channel.AddFloat(AmbiantTemp);
    Channel.AddFloat(AmbiantTemp2);
    Channel.AddFloat(WaterTemp);
    Channel.AddFloat(MidtTemp);
    Channel.AddFloat(ReturTemp);
    Channel.AddFloat(Flow);
    Channel.SendData(thingSpeakKey1);
    Channel.AddFloat(PumpeEnde);
    Channel.AddFloat(SlangeEnde);
    Channel.AddFloat(BeerTemp2);
    Channel.AddFloat(BeerTemp);
    Channel.SendData(thingSpeakKey2);
    flowCount=0;
    extpc.printf("T1 %.2f T2 %.2f Wt1 %.2f Wt2 %.2f Wt3 %.2f Flow %.2f Tr1 %.2f Tr2 %.2f B2 %.2f B1 %.2f \r\n",AmbiantTemp,AmbiantTemp2,WaterTemp,MidtTemp,ReturTemp,Flow,PumpeEnde,SlangeEnde,BeerTemp2,BeerTemp);
    pc.printf("T1 %.2f T2 %.2f Wt1 %.2f Wt2 %.2f Wt3 %.2f Flow %.2f Tr1 %.2f Tr2 %.2f B2 %.2f B1 %.2f \r\n",AmbiantTemp,AmbiantTemp2,WaterTemp,MidtTemp,ReturTemp,Flow,PumpeEnde,SlangeEnde,BeerTemp2,BeerTemp);
}

void flowcounter()
{
    flowCount++; //tæller
    flowindi=!flowindi;
}

int main()
{
    pc.printf("\n\r---------------------------------------------------------------\n\r");
    eth.init(); //Use DHCP
    eth.connect();
    pc.printf("IP Address is %s\n\r", eth.getIPAddress());
    flow.fall(&flowcounter);
    while(1) {
        GetData();
        readAnalog();
        wait(17);
    }
}