Real time embedded system project, student no.170411 Project description: temperature plot with switch menu and data collection

Dependencies:   C12832 LM75B MMA7660 mbed mbed

main.cpp

Committer:
Efren777
Date:
2017-01-10
Revision:
0:ac0f9392c781

File content as of revision 0:ac0f9392c781:

//project: Real_time embedded system
#include "mbed.h"
#include "C12832.h"
#include "LM75B.h"
#include "MMA7660.h"

// Using Arduino pin notation
C12832 lcd(D11, D13, D12, D7, D10);

//Temperature measurement sensor set up
LM75B tem(D14,D15);

//joystick
DigitalIn up(A2);
DigitalIn down(A3);
DigitalIn left(A4);
DigitalIn right(A5);
DigitalIn center(D4);

//two Potentiometers
AnalogIn pot1 (A0);
AnalogIn pot2 (A1);

//3 Axis Accelerometer
MMA7660 MMA(D14,D15);

//led on shiled
PwmOut r (D5);
PwmOut b (D8);
PwmOut g (D9);

//temperature value store in x1,2,3,4
float a=0; //temperature store in a
float x1=0,x2=0,x3=0,x4=0;

//y axis point of each point need to plot on lcd
int y1=20,y2=20,y3=20,y4=20;

void counter (void);
void findy (void);
float d=0;//distance between each y-axis point on plot
float dyarray[18];
float x1array[18],x2array[18],x3array[18],x4array[18];
float x1min=0,x2min=0,x3min=0,x4min=0;

//find max and min for y axis
void findmax(void);
void findmin(void);
float xarray[]= {x1,x2,x3,x4};
float max=0;//max number of x1,2,3,4
float min=0;//min number of x1,2,3,4
//plot funciton
void plot(void);

//menu
int menu =0;//this integer to wtich menu
void joystick (void);//use joystick to change menu

//Highest tem and lowest tem
void temdata(void);
int nod=0;//number of data
int highlow=0;
float hightem=0,lowtem=0;

//timer
Timer t;
int main()
{
    r=1;
    b=1;
    g=1;
    lcd.cls();//clear screen
    t.start();//start timer
    while(1) {
        joystick();//detect any movement at joystick
        temdata();//collecting temperature data
        switch (menu) {//using swtich menu to show different case on screen
            case 0://title 1
                lcd.cls();
                lcd.locate(0,0);
                lcd.printf("Real Time Embeded System");
                lcd.locate(0,18);
                lcd.printf("Scroll with Joystick");
                wait(1);
                break;
            case 1://title 2
                lcd.cls();
                lcd.locate(0,0);
                lcd.printf("Project: Temprature Plot");
                lcd.locate(0,18);
                lcd.printf("Student No.170411");
                wait(1);
                break;
            case 2:// showing temperature and plot for latest four result
                lcd.cls();
                lcd.locate(0,0);
                lcd.printf("Tem:");
                //print temperature
                lcd.locate(21,0);
                lcd.printf("%.1f\n",x1);

                lcd.locate(46,0);
                lcd.printf("%.1f\n",x2);

                lcd.locate(71,0);
                lcd.printf("%.1f\n",x3);

                lcd.locate(96,0);
                lcd.printf("%.1f\n",x4);
                plot();//plot diagram
                counter();//shift data from right to left and store latest data at x4
                wait(1);
                break;
            case 3://show how much time taken and how many data collect from temperature sensor
                lcd.cls();
                lcd.locate(0,0);
                lcd.printf("Time taken: %.2f s",t.read());
                lcd.locate(0,17);
                lcd.printf("Number of data collect: %i",nod);
                wait(1);
                break;
            case 4:// show highest temperature
                lcd.cls();
                lcd.locate(0,0);
                lcd.printf("Hightest temprature so far: ");
                lcd.locate(0,18);
                lcd.printf("Tem: %.2f",hightem);
                wait(1);
                break;
            case 5:// show lowest temperature
                lcd.cls();
                lcd.locate(0,0);
                lcd.printf("Lowest temprature so far: ");
                lcd.locate(0,18);
                lcd.printf("Tem: %.2f",lowtem);
                wait(1);
                break;
        }//switch
    }//while
}//main
void joystick()//detect two button at joystick (up and down)
{
    //change "menu" to change menu at switch
    if (down==1) {
        menu=menu+1;
    }
    if (up==1) {
        menu=menu-1;
    }
    //use those if statement to create a close loop between menu=0 to menu=5
    if (menu>5) {
        menu=0;
    }
    if (menu<0) {
        menu=5;
    }

}
void temdata()
{
    a=tem.temp();//get current temperature and store to a
    nod=nod+1;//counter (nod) count how many data collect from sensor
    if (highlow==0) {//when collect first data, store first temperature value to hightem and lowtem
        hightem=a;
        lowtem=a;
        highlow=1;//set highlow to 1, so this function will only run once
    }
    if (hightem<=a) {//store highest temprature value into hightem
        hightem=a;
    }
    if (lowtem>=a) {//store lowest temprature value into lowtem
        lowtem=a;
    }
}
void counter()//shift data from right to left
{
    x1=x2;
    x2=x3;
    x3=x4;
    x4=a;
}
void plot()
{
    //plot diagram
    findy();//find y value at y axis of each data (x1,2,3,4)
    lcd.line(100,y4,76,y3,1);
    lcd.line(76,y3,50,y2,1);
    lcd.line(50,y2,27,y1,1);
}
void findy()
{
    findmax();//find maximum value from x1,2,3,4
    findmin();//find minimum value from x1,2,3,4
    d=(max-min)/18;//caculate different between each point at y-axis
    //y-axis point writen in yarray
    int yarray[] = {30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12};
    int i;
    for (i=0; i<18; i=i+1) {//using for loop to find y value for each x
        dyarray[i]=min+i*d;//this array store temperature map according to four x temperature and 18 y axis
        //x1
        x1array[i]=x1-dyarray[i];//find different between x1 and dyarray
        if (x1array[i]<0) {//store absolute vaue of x1array 
            x1array[i]=-x1array[i];
        }
        if (i==0) {//store first x1array to x1min
            x1min=x1array[i];
        }
        if (x1array[i]<=x1min) {//find minimum value of x1array, 
            y1=yarray[i];//store corresponding y into y1
            x1min=x1array[i];
        }
        //x2
        x2array[i]=x2-dyarray[i];
        if (x2array[i]<0) {
            x2array[i]=-x2array[i];
        }
        if (i==0) {
            x2min=x2array[i];
        }
        if (x2array[i]<=x2min) {
            y2=yarray[i];
            x2min=x2array[i];
        }
        //x3
        x3array[i]=x3-dyarray[i];
        if (x3array[i]<0) {
            x3array[i]=-x3array[i];
        }
        if (i==0) {
            x3min=x3array[i];
        }
        if (x3array[i]<=x3min) {
            y3=yarray[i];
            x3min=x3array[i];
        }
        //x4
        x4array[i]=x4-dyarray[i];
        if (x4array[i]<0) {
            x4array[i]=-x4array[i];
        }
        if (i==0) {
            x4min=x4array[i];
        }
        if (x4array[i]<=x4min) {
            y4=yarray[i];
            x4min=x4array[i];
        }
    }
}

void findmax()
{
    max=x1;
    int i;
    float xarray[]= {x1,x2,x3,x4};
    for(i=0; i<4; i=i+1) {
        if (xarray[i]>max) {
            max=xarray[i];
        }
    }
}

void findmin()
{
    min=x1;
    int i;
    float xarray[]= {x1,x2,x3,x4};
    for(i=0; i<4; i=i+1) {
        if (xarray[i]<min) {
            min=xarray[i];
        }
    }
}