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

Dependencies:   C12832 LM75B MMA7660 mbed mbed

Committer:
Efren777
Date:
Tue Jan 10 18:20:02 2017 +0000
Revision:
0:ac0f9392c781
Real time embedded system project

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Efren777 0:ac0f9392c781 1 //project: Real_time embedded system
Efren777 0:ac0f9392c781 2 #include "mbed.h"
Efren777 0:ac0f9392c781 3 #include "C12832.h"
Efren777 0:ac0f9392c781 4 #include "LM75B.h"
Efren777 0:ac0f9392c781 5 #include "MMA7660.h"
Efren777 0:ac0f9392c781 6
Efren777 0:ac0f9392c781 7 // Using Arduino pin notation
Efren777 0:ac0f9392c781 8 C12832 lcd(D11, D13, D12, D7, D10);
Efren777 0:ac0f9392c781 9
Efren777 0:ac0f9392c781 10 //Temperature measurement sensor set up
Efren777 0:ac0f9392c781 11 LM75B tem(D14,D15);
Efren777 0:ac0f9392c781 12
Efren777 0:ac0f9392c781 13 //joystick
Efren777 0:ac0f9392c781 14 DigitalIn up(A2);
Efren777 0:ac0f9392c781 15 DigitalIn down(A3);
Efren777 0:ac0f9392c781 16 DigitalIn left(A4);
Efren777 0:ac0f9392c781 17 DigitalIn right(A5);
Efren777 0:ac0f9392c781 18 DigitalIn center(D4);
Efren777 0:ac0f9392c781 19
Efren777 0:ac0f9392c781 20 //two Potentiometers
Efren777 0:ac0f9392c781 21 AnalogIn pot1 (A0);
Efren777 0:ac0f9392c781 22 AnalogIn pot2 (A1);
Efren777 0:ac0f9392c781 23
Efren777 0:ac0f9392c781 24 //3 Axis Accelerometer
Efren777 0:ac0f9392c781 25 MMA7660 MMA(D14,D15);
Efren777 0:ac0f9392c781 26
Efren777 0:ac0f9392c781 27 //led on shiled
Efren777 0:ac0f9392c781 28 PwmOut r (D5);
Efren777 0:ac0f9392c781 29 PwmOut b (D8);
Efren777 0:ac0f9392c781 30 PwmOut g (D9);
Efren777 0:ac0f9392c781 31
Efren777 0:ac0f9392c781 32 //temperature value store in x1,2,3,4
Efren777 0:ac0f9392c781 33 float a=0; //temperature store in a
Efren777 0:ac0f9392c781 34 float x1=0,x2=0,x3=0,x4=0;
Efren777 0:ac0f9392c781 35
Efren777 0:ac0f9392c781 36 //y axis point of each point need to plot on lcd
Efren777 0:ac0f9392c781 37 int y1=20,y2=20,y3=20,y4=20;
Efren777 0:ac0f9392c781 38
Efren777 0:ac0f9392c781 39 void counter (void);
Efren777 0:ac0f9392c781 40 void findy (void);
Efren777 0:ac0f9392c781 41 float d=0;//distance between each y-axis point on plot
Efren777 0:ac0f9392c781 42 float dyarray[18];
Efren777 0:ac0f9392c781 43 float x1array[18],x2array[18],x3array[18],x4array[18];
Efren777 0:ac0f9392c781 44 float x1min=0,x2min=0,x3min=0,x4min=0;
Efren777 0:ac0f9392c781 45
Efren777 0:ac0f9392c781 46 //find max and min for y axis
Efren777 0:ac0f9392c781 47 void findmax(void);
Efren777 0:ac0f9392c781 48 void findmin(void);
Efren777 0:ac0f9392c781 49 float xarray[]= {x1,x2,x3,x4};
Efren777 0:ac0f9392c781 50 float max=0;//max number of x1,2,3,4
Efren777 0:ac0f9392c781 51 float min=0;//min number of x1,2,3,4
Efren777 0:ac0f9392c781 52 //plot funciton
Efren777 0:ac0f9392c781 53 void plot(void);
Efren777 0:ac0f9392c781 54
Efren777 0:ac0f9392c781 55 //menu
Efren777 0:ac0f9392c781 56 int menu =0;//this integer to wtich menu
Efren777 0:ac0f9392c781 57 void joystick (void);//use joystick to change menu
Efren777 0:ac0f9392c781 58
Efren777 0:ac0f9392c781 59 //Highest tem and lowest tem
Efren777 0:ac0f9392c781 60 void temdata(void);
Efren777 0:ac0f9392c781 61 int nod=0;//number of data
Efren777 0:ac0f9392c781 62 int highlow=0;
Efren777 0:ac0f9392c781 63 float hightem=0,lowtem=0;
Efren777 0:ac0f9392c781 64
Efren777 0:ac0f9392c781 65 //timer
Efren777 0:ac0f9392c781 66 Timer t;
Efren777 0:ac0f9392c781 67 int main()
Efren777 0:ac0f9392c781 68 {
Efren777 0:ac0f9392c781 69 r=1;
Efren777 0:ac0f9392c781 70 b=1;
Efren777 0:ac0f9392c781 71 g=1;
Efren777 0:ac0f9392c781 72 lcd.cls();//clear screen
Efren777 0:ac0f9392c781 73 t.start();//start timer
Efren777 0:ac0f9392c781 74 while(1) {
Efren777 0:ac0f9392c781 75 joystick();//detect any movement at joystick
Efren777 0:ac0f9392c781 76 temdata();//collecting temperature data
Efren777 0:ac0f9392c781 77 switch (menu) {//using swtich menu to show different case on screen
Efren777 0:ac0f9392c781 78 case 0://title 1
Efren777 0:ac0f9392c781 79 lcd.cls();
Efren777 0:ac0f9392c781 80 lcd.locate(0,0);
Efren777 0:ac0f9392c781 81 lcd.printf("Real Time Embeded System");
Efren777 0:ac0f9392c781 82 lcd.locate(0,18);
Efren777 0:ac0f9392c781 83 lcd.printf("Scroll with Joystick");
Efren777 0:ac0f9392c781 84 wait(1);
Efren777 0:ac0f9392c781 85 break;
Efren777 0:ac0f9392c781 86 case 1://title 2
Efren777 0:ac0f9392c781 87 lcd.cls();
Efren777 0:ac0f9392c781 88 lcd.locate(0,0);
Efren777 0:ac0f9392c781 89 lcd.printf("Project: Temprature Plot");
Efren777 0:ac0f9392c781 90 lcd.locate(0,18);
Efren777 0:ac0f9392c781 91 lcd.printf("Student No.170411");
Efren777 0:ac0f9392c781 92 wait(1);
Efren777 0:ac0f9392c781 93 break;
Efren777 0:ac0f9392c781 94 case 2:// showing temperature and plot for latest four result
Efren777 0:ac0f9392c781 95 lcd.cls();
Efren777 0:ac0f9392c781 96 lcd.locate(0,0);
Efren777 0:ac0f9392c781 97 lcd.printf("Tem:");
Efren777 0:ac0f9392c781 98 //print temperature
Efren777 0:ac0f9392c781 99 lcd.locate(21,0);
Efren777 0:ac0f9392c781 100 lcd.printf("%.1f\n",x1);
Efren777 0:ac0f9392c781 101
Efren777 0:ac0f9392c781 102 lcd.locate(46,0);
Efren777 0:ac0f9392c781 103 lcd.printf("%.1f\n",x2);
Efren777 0:ac0f9392c781 104
Efren777 0:ac0f9392c781 105 lcd.locate(71,0);
Efren777 0:ac0f9392c781 106 lcd.printf("%.1f\n",x3);
Efren777 0:ac0f9392c781 107
Efren777 0:ac0f9392c781 108 lcd.locate(96,0);
Efren777 0:ac0f9392c781 109 lcd.printf("%.1f\n",x4);
Efren777 0:ac0f9392c781 110 plot();//plot diagram
Efren777 0:ac0f9392c781 111 counter();//shift data from right to left and store latest data at x4
Efren777 0:ac0f9392c781 112 wait(1);
Efren777 0:ac0f9392c781 113 break;
Efren777 0:ac0f9392c781 114 case 3://show how much time taken and how many data collect from temperature sensor
Efren777 0:ac0f9392c781 115 lcd.cls();
Efren777 0:ac0f9392c781 116 lcd.locate(0,0);
Efren777 0:ac0f9392c781 117 lcd.printf("Time taken: %.2f s",t.read());
Efren777 0:ac0f9392c781 118 lcd.locate(0,17);
Efren777 0:ac0f9392c781 119 lcd.printf("Number of data collect: %i",nod);
Efren777 0:ac0f9392c781 120 wait(1);
Efren777 0:ac0f9392c781 121 break;
Efren777 0:ac0f9392c781 122 case 4:// show highest temperature
Efren777 0:ac0f9392c781 123 lcd.cls();
Efren777 0:ac0f9392c781 124 lcd.locate(0,0);
Efren777 0:ac0f9392c781 125 lcd.printf("Hightest temprature so far: ");
Efren777 0:ac0f9392c781 126 lcd.locate(0,18);
Efren777 0:ac0f9392c781 127 lcd.printf("Tem: %.2f",hightem);
Efren777 0:ac0f9392c781 128 wait(1);
Efren777 0:ac0f9392c781 129 break;
Efren777 0:ac0f9392c781 130 case 5:// show lowest temperature
Efren777 0:ac0f9392c781 131 lcd.cls();
Efren777 0:ac0f9392c781 132 lcd.locate(0,0);
Efren777 0:ac0f9392c781 133 lcd.printf("Lowest temprature so far: ");
Efren777 0:ac0f9392c781 134 lcd.locate(0,18);
Efren777 0:ac0f9392c781 135 lcd.printf("Tem: %.2f",lowtem);
Efren777 0:ac0f9392c781 136 wait(1);
Efren777 0:ac0f9392c781 137 break;
Efren777 0:ac0f9392c781 138 }//switch
Efren777 0:ac0f9392c781 139 }//while
Efren777 0:ac0f9392c781 140 }//main
Efren777 0:ac0f9392c781 141 void joystick()//detect two button at joystick (up and down)
Efren777 0:ac0f9392c781 142 {
Efren777 0:ac0f9392c781 143 //change "menu" to change menu at switch
Efren777 0:ac0f9392c781 144 if (down==1) {
Efren777 0:ac0f9392c781 145 menu=menu+1;
Efren777 0:ac0f9392c781 146 }
Efren777 0:ac0f9392c781 147 if (up==1) {
Efren777 0:ac0f9392c781 148 menu=menu-1;
Efren777 0:ac0f9392c781 149 }
Efren777 0:ac0f9392c781 150 //use those if statement to create a close loop between menu=0 to menu=5
Efren777 0:ac0f9392c781 151 if (menu>5) {
Efren777 0:ac0f9392c781 152 menu=0;
Efren777 0:ac0f9392c781 153 }
Efren777 0:ac0f9392c781 154 if (menu<0) {
Efren777 0:ac0f9392c781 155 menu=5;
Efren777 0:ac0f9392c781 156 }
Efren777 0:ac0f9392c781 157
Efren777 0:ac0f9392c781 158 }
Efren777 0:ac0f9392c781 159 void temdata()
Efren777 0:ac0f9392c781 160 {
Efren777 0:ac0f9392c781 161 a=tem.temp();//get current temperature and store to a
Efren777 0:ac0f9392c781 162 nod=nod+1;//counter (nod) count how many data collect from sensor
Efren777 0:ac0f9392c781 163 if (highlow==0) {//when collect first data, store first temperature value to hightem and lowtem
Efren777 0:ac0f9392c781 164 hightem=a;
Efren777 0:ac0f9392c781 165 lowtem=a;
Efren777 0:ac0f9392c781 166 highlow=1;//set highlow to 1, so this function will only run once
Efren777 0:ac0f9392c781 167 }
Efren777 0:ac0f9392c781 168 if (hightem<=a) {//store highest temprature value into hightem
Efren777 0:ac0f9392c781 169 hightem=a;
Efren777 0:ac0f9392c781 170 }
Efren777 0:ac0f9392c781 171 if (lowtem>=a) {//store lowest temprature value into lowtem
Efren777 0:ac0f9392c781 172 lowtem=a;
Efren777 0:ac0f9392c781 173 }
Efren777 0:ac0f9392c781 174 }
Efren777 0:ac0f9392c781 175 void counter()//shift data from right to left
Efren777 0:ac0f9392c781 176 {
Efren777 0:ac0f9392c781 177 x1=x2;
Efren777 0:ac0f9392c781 178 x2=x3;
Efren777 0:ac0f9392c781 179 x3=x4;
Efren777 0:ac0f9392c781 180 x4=a;
Efren777 0:ac0f9392c781 181 }
Efren777 0:ac0f9392c781 182 void plot()
Efren777 0:ac0f9392c781 183 {
Efren777 0:ac0f9392c781 184 //plot diagram
Efren777 0:ac0f9392c781 185 findy();//find y value at y axis of each data (x1,2,3,4)
Efren777 0:ac0f9392c781 186 lcd.line(100,y4,76,y3,1);
Efren777 0:ac0f9392c781 187 lcd.line(76,y3,50,y2,1);
Efren777 0:ac0f9392c781 188 lcd.line(50,y2,27,y1,1);
Efren777 0:ac0f9392c781 189 }
Efren777 0:ac0f9392c781 190 void findy()
Efren777 0:ac0f9392c781 191 {
Efren777 0:ac0f9392c781 192 findmax();//find maximum value from x1,2,3,4
Efren777 0:ac0f9392c781 193 findmin();//find minimum value from x1,2,3,4
Efren777 0:ac0f9392c781 194 d=(max-min)/18;//caculate different between each point at y-axis
Efren777 0:ac0f9392c781 195 //y-axis point writen in yarray
Efren777 0:ac0f9392c781 196 int yarray[] = {30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12};
Efren777 0:ac0f9392c781 197 int i;
Efren777 0:ac0f9392c781 198 for (i=0; i<18; i=i+1) {//using for loop to find y value for each x
Efren777 0:ac0f9392c781 199 dyarray[i]=min+i*d;//this array store temperature map according to four x temperature and 18 y axis
Efren777 0:ac0f9392c781 200 //x1
Efren777 0:ac0f9392c781 201 x1array[i]=x1-dyarray[i];//find different between x1 and dyarray
Efren777 0:ac0f9392c781 202 if (x1array[i]<0) {//store absolute vaue of x1array
Efren777 0:ac0f9392c781 203 x1array[i]=-x1array[i];
Efren777 0:ac0f9392c781 204 }
Efren777 0:ac0f9392c781 205 if (i==0) {//store first x1array to x1min
Efren777 0:ac0f9392c781 206 x1min=x1array[i];
Efren777 0:ac0f9392c781 207 }
Efren777 0:ac0f9392c781 208 if (x1array[i]<=x1min) {//find minimum value of x1array,
Efren777 0:ac0f9392c781 209 y1=yarray[i];//store corresponding y into y1
Efren777 0:ac0f9392c781 210 x1min=x1array[i];
Efren777 0:ac0f9392c781 211 }
Efren777 0:ac0f9392c781 212 //x2
Efren777 0:ac0f9392c781 213 x2array[i]=x2-dyarray[i];
Efren777 0:ac0f9392c781 214 if (x2array[i]<0) {
Efren777 0:ac0f9392c781 215 x2array[i]=-x2array[i];
Efren777 0:ac0f9392c781 216 }
Efren777 0:ac0f9392c781 217 if (i==0) {
Efren777 0:ac0f9392c781 218 x2min=x2array[i];
Efren777 0:ac0f9392c781 219 }
Efren777 0:ac0f9392c781 220 if (x2array[i]<=x2min) {
Efren777 0:ac0f9392c781 221 y2=yarray[i];
Efren777 0:ac0f9392c781 222 x2min=x2array[i];
Efren777 0:ac0f9392c781 223 }
Efren777 0:ac0f9392c781 224 //x3
Efren777 0:ac0f9392c781 225 x3array[i]=x3-dyarray[i];
Efren777 0:ac0f9392c781 226 if (x3array[i]<0) {
Efren777 0:ac0f9392c781 227 x3array[i]=-x3array[i];
Efren777 0:ac0f9392c781 228 }
Efren777 0:ac0f9392c781 229 if (i==0) {
Efren777 0:ac0f9392c781 230 x3min=x3array[i];
Efren777 0:ac0f9392c781 231 }
Efren777 0:ac0f9392c781 232 if (x3array[i]<=x3min) {
Efren777 0:ac0f9392c781 233 y3=yarray[i];
Efren777 0:ac0f9392c781 234 x3min=x3array[i];
Efren777 0:ac0f9392c781 235 }
Efren777 0:ac0f9392c781 236 //x4
Efren777 0:ac0f9392c781 237 x4array[i]=x4-dyarray[i];
Efren777 0:ac0f9392c781 238 if (x4array[i]<0) {
Efren777 0:ac0f9392c781 239 x4array[i]=-x4array[i];
Efren777 0:ac0f9392c781 240 }
Efren777 0:ac0f9392c781 241 if (i==0) {
Efren777 0:ac0f9392c781 242 x4min=x4array[i];
Efren777 0:ac0f9392c781 243 }
Efren777 0:ac0f9392c781 244 if (x4array[i]<=x4min) {
Efren777 0:ac0f9392c781 245 y4=yarray[i];
Efren777 0:ac0f9392c781 246 x4min=x4array[i];
Efren777 0:ac0f9392c781 247 }
Efren777 0:ac0f9392c781 248 }
Efren777 0:ac0f9392c781 249 }
Efren777 0:ac0f9392c781 250
Efren777 0:ac0f9392c781 251 void findmax()
Efren777 0:ac0f9392c781 252 {
Efren777 0:ac0f9392c781 253 max=x1;
Efren777 0:ac0f9392c781 254 int i;
Efren777 0:ac0f9392c781 255 float xarray[]= {x1,x2,x3,x4};
Efren777 0:ac0f9392c781 256 for(i=0; i<4; i=i+1) {
Efren777 0:ac0f9392c781 257 if (xarray[i]>max) {
Efren777 0:ac0f9392c781 258 max=xarray[i];
Efren777 0:ac0f9392c781 259 }
Efren777 0:ac0f9392c781 260 }
Efren777 0:ac0f9392c781 261 }
Efren777 0:ac0f9392c781 262
Efren777 0:ac0f9392c781 263 void findmin()
Efren777 0:ac0f9392c781 264 {
Efren777 0:ac0f9392c781 265 min=x1;
Efren777 0:ac0f9392c781 266 int i;
Efren777 0:ac0f9392c781 267 float xarray[]= {x1,x2,x3,x4};
Efren777 0:ac0f9392c781 268 for(i=0; i<4; i=i+1) {
Efren777 0:ac0f9392c781 269 if (xarray[i]<min) {
Efren777 0:ac0f9392c781 270 min=xarray[i];
Efren777 0:ac0f9392c781 271 }
Efren777 0:ac0f9392c781 272 }
Efren777 0:ac0f9392c781 273 }