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@0:ac0f9392c781, 2017-01-10 (annotated)
- 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?
User | Revision | Line number | New 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 | } |