PES 4 - Smart Medication Dispenser / PES4_ProgrammeforDesignReview2

Dependencies:   SDFileSystem mbed

Fork of PES4_Programme by PES 4 - Smart Medication Dispenser

Committer:
itslinear
Date:
Fri Apr 06 06:51:47 2018 +0000
Revision:
72:172b40dd16ee
Parent:
61:086bcd5ca968
Child:
73:7fd3701def5b
added stuff

Who changed what in which revision?

UserRevisionLine numberNew contents of line
cittecla 3:94026b29e994 1 #include "main.h"
aeschsim 59:1867088695f3 2 #define FADESPEED 5
aeschsim 59:1867088695f3 3 #define DEMOTIME 5
itslinear 17:bbafd216e059 4
cittecla 52:701d0c2f47d7 5 int state = 44;
cittecla 41:f054a83f9556 6 int oldState;
cittecla 2:72886e996098 7
cittecla 2:72886e996098 8 Serial pc(USBTX, USBRX); // tx, rx
aeschsim 40:b5e533e1e033 9
aeschsim 60:7554e4272b3b 10 DigitalIn lichtschranke(PC_5);
aeschsim 60:7554e4272b3b 11 InterruptIn userButton1(PB_5);
aeschsim 60:7554e4272b3b 12 InterruptIn userButton2(PB_4);
aeschsim 60:7554e4272b3b 13 DigitalIn glasDetection(PA_10);
aeschsim 60:7554e4272b3b 14 PwmOut summer(PC_8);
aeschsim 59:1867088695f3 15
aeschsim 40:b5e533e1e033 16 /* PWM Test Tool */
aeschsim 40:b5e533e1e033 17 int channel;
aeschsim 40:b5e533e1e033 18 int dutyCycle;
cittecla 55:bdab541f434d 19 int day;
cittecla 55:bdab541f434d 20 int moment;
cittecla 55:bdab541f434d 21 s_user user[2];
cittecla 2:72886e996098 22
aeschsim 59:1867088695f3 23 /* Demo Tool */
aeschsim 59:1867088695f3 24 uint32_t color = 0;
aeschsim 59:1867088695f3 25 int colorTime = 0;
aeschsim 59:1867088695f3 26 int r,b,g;
aeschsim 59:1867088695f3 27
itslinear 72:172b40dd16ee 28 /* SD write Test*/
itslinear 72:172b40dd16ee 29
itslinear 72:172b40dd16ee 30 s_time medicationTime;
itslinear 72:172b40dd16ee 31 medicationTime.hour = 15;
itslinear 72:172b40dd16ee 32 medicationTime.minute = 30;
itslinear 72:172b40dd16ee 33
itslinear 72:172b40dd16ee 34 s_time outputTime;
itslinear 72:172b40dd16ee 35 outputTime.day = getTime().day;
itslinear 72:172b40dd16ee 36 outputTime.month = getTime().month;
itslinear 72:172b40dd16ee 37 outputTime.year = getTime().year;
itslinear 72:172b40dd16ee 38 outputTime.hour = getTime().hour;
itslinear 72:172b40dd16ee 39 outputTime.minute = getTime().minute;
itslinear 72:172b40dd16ee 40
itslinear 72:172b40dd16ee 41 s_medContainer medication;
itslinear 72:172b40dd16ee 42 medication.container[0] = 1;
itslinear 72:172b40dd16ee 43 medication.container[1] = 2;
itslinear 72:172b40dd16ee 44 medication.container[2] = 2;
itslinear 72:172b40dd16ee 45 medication.container[3] = 1;
itslinear 72:172b40dd16ee 46 medication.container[4] = 1;
itslinear 72:172b40dd16ee 47 medication.container[5] = 2;
itslinear 72:172b40dd16ee 48
itslinear 72:172b40dd16ee 49 int success = 1;
itslinear 72:172b40dd16ee 50 char user = 0;
itslinear 72:172b40dd16ee 51
aeschsim 60:7554e4272b3b 52 void summ(void)
aeschsim 60:7554e4272b3b 53 {
aeschsim 60:7554e4272b3b 54 if(summer.read()>0) {
aeschsim 60:7554e4272b3b 55 summer.write(0.0f);
aeschsim 60:7554e4272b3b 56 } else {
aeschsim 60:7554e4272b3b 57 summer.write(0.5f);
aeschsim 60:7554e4272b3b 58 }
aeschsim 60:7554e4272b3b 59 }
aeschsim 60:7554e4272b3b 60
aeschsim 60:7554e4272b3b 61
cittecla 2:72886e996098 62 int main()
cittecla 2:72886e996098 63 {
cittecla 2:72886e996098 64 pc.baud(460800);
cittecla 2:72886e996098 65 printf("start...\r\n");
cittecla 2:72886e996098 66
aeschsim 34:9d6dd3a12641 67 while(1) {
cittecla 41:f054a83f9556 68 if(state != oldState) {
cittecla 58:cda5298c9b7f 69 printf("\r\nstate: %d\r\n",state);
cittecla 41:f054a83f9556 70 oldState = state;
aeschsim 34:9d6dd3a12641 71 }
aeschsim 34:9d6dd3a12641 72 switch (state) {
aeschsim 34:9d6dd3a12641 73 case 0:
aeschsim 34:9d6dd3a12641 74 printf("Hello World");
aeschsim 40:b5e533e1e033 75 state = 47;
aeschsim 34:9d6dd3a12641 76 break;
aeschsim 34:9d6dd3a12641 77 case 1:
aeschsim 34:9d6dd3a12641 78 break;
aeschsim 34:9d6dd3a12641 79 case 2:
aeschsim 34:9d6dd3a12641 80 break;
aeschsim 34:9d6dd3a12641 81 case 3:
aeschsim 34:9d6dd3a12641 82 break;
cittecla 2:72886e996098 83
aeschsim 34:9d6dd3a12641 84 case 10:
aeschsim 34:9d6dd3a12641 85 break;
aeschsim 34:9d6dd3a12641 86 case 11:
aeschsim 34:9d6dd3a12641 87 break;
cittecla 2:72886e996098 88
aeschsim 34:9d6dd3a12641 89 case 15:
aeschsim 34:9d6dd3a12641 90 break;
aeschsim 34:9d6dd3a12641 91 case 16:
aeschsim 34:9d6dd3a12641 92 break;
aeschsim 34:9d6dd3a12641 93 case 17:
aeschsim 34:9d6dd3a12641 94 break;
aeschsim 34:9d6dd3a12641 95
aeschsim 34:9d6dd3a12641 96 case 25:
aeschsim 34:9d6dd3a12641 97 break;
aeschsim 34:9d6dd3a12641 98 case 26:
aeschsim 34:9d6dd3a12641 99 break;
aeschsim 34:9d6dd3a12641 100 case 27:
aeschsim 34:9d6dd3a12641 101 break;
aeschsim 34:9d6dd3a12641 102 case 28:
aeschsim 34:9d6dd3a12641 103 break;
cittecla 2:72886e996098 104
cittecla 2:72886e996098 105
aeschsim 34:9d6dd3a12641 106 case 35:
aeschsim 34:9d6dd3a12641 107 break;
aeschsim 34:9d6dd3a12641 108 case 36:
aeschsim 34:9d6dd3a12641 109 break;
aeschsim 34:9d6dd3a12641 110 case 37:
aeschsim 34:9d6dd3a12641 111 break;
aeschsim 34:9d6dd3a12641 112 case 38:
aeschsim 34:9d6dd3a12641 113 break;
aeschsim 27:bf0577ecfa6e 114
aeschsim 40:b5e533e1e033 115 /**************************************************************/
aeschsim 40:b5e533e1e033 116 /* Test Zone */
cittecla 53:1c61cadbcb35 117
cittecla 52:701d0c2f47d7 118 /* init PWM board */
cittecla 52:701d0c2f47d7 119 case 44:
cittecla 55:bdab541f434d 120 printf("Init PWM\r\n");
cittecla 53:1c61cadbcb35 121 initPWM(50);
cittecla 53:1c61cadbcb35 122 enableOutput();
cittecla 52:701d0c2f47d7 123 state = 47;
cittecla 52:701d0c2f47d7 124 break;
aeschsim 40:b5e533e1e033 125
aeschsim 40:b5e533e1e033 126 /* Time test tool: set Time */
aeschsim 34:9d6dd3a12641 127 case 45:
aeschsim 34:9d6dd3a12641 128 s_time time;
aeschsim 34:9d6dd3a12641 129 time.second = 30;
aeschsim 34:9d6dd3a12641 130 time.minute = 53;
aeschsim 34:9d6dd3a12641 131 time.hour = 12;
aeschsim 34:9d6dd3a12641 132 time.day = 27;
aeschsim 34:9d6dd3a12641 133 time.weekday = 2;
aeschsim 34:9d6dd3a12641 134 time.month = 3;
aeschsim 34:9d6dd3a12641 135 time.year = 18;
cittecla 55:bdab541f434d 136 printf("set now time\r\n");
aeschsim 34:9d6dd3a12641 137 setTime(&time);
cittecla 55:bdab541f434d 138 printf("read time: %02d:%02d:%02d, %02d.%02d.20%02d, weekday: %d\r\n",time.hour, time.minute, time.second, time.day, time.month, time.year, time.weekday);
aeschsim 40:b5e533e1e033 139 state = 47;
cittecla 55:bdab541f434d 140 printf("change state to: %d\r\n",state);
aeschsim 34:9d6dd3a12641 141 break;
aeschsim 40:b5e533e1e033 142
aeschsim 40:b5e533e1e033 143 /* Time test tool: get Time */
aeschsim 34:9d6dd3a12641 144 case 46:
aeschsim 34:9d6dd3a12641 145 wait(5);
aeschsim 34:9d6dd3a12641 146 time = getTime();
cittecla 55:bdab541f434d 147 printf("read time: %02d:%02d:%02d, %02d.%02d.20%02d, weekday: %d\r\n",time.hour, time.minute, time.second, time.day, time.month, time.year, time.weekday);
aeschsim 40:b5e533e1e033 148 state = 47;
aeschsim 40:b5e533e1e033 149 break;
aeschsim 40:b5e533e1e033 150
aeschsim 40:b5e533e1e033 151 /* Console State Switch */
aeschsim 40:b5e533e1e033 152 case 47:
cittecla 55:bdab541f434d 153 printf("\n\rState Switch: Enter next State: \n\r");
cittecla 55:bdab541f434d 154 printf("45\tset Time\n\r46\tread Time\n\r47\tState Switch\n\r48\tServo Board Test Tool\n\r49\tenable servo output\n\r50\tdisable servo output\n\r51\ttest SD Card\n\r52\tread medication\n\r53\tMedication display test tool\n\r");
aeschsim 40:b5e533e1e033 155 pc.scanf("%d", &state);
cittecla 55:bdab541f434d 156 printf("Switch to State %d\n\r",state);
aeschsim 40:b5e533e1e033 157 fflush(stdin);
aeschsim 34:9d6dd3a12641 158 break;
aeschsim 40:b5e533e1e033 159
aeschsim 40:b5e533e1e033 160 /* Servo-Board Test Tool */
aeschsim 34:9d6dd3a12641 161 case 48:
cittecla 55:bdab541f434d 162 printf("\n\r\n\rServo-Board Test Tool\n\rEnter Channel Number and then Duty Cycle\n\r");
cittecla 55:bdab541f434d 163 printf("for exit, enter Channel > 15\n\r");
aeschsim 40:b5e533e1e033 164 channel = 0;
aeschsim 40:b5e533e1e033 165 while (channel < 16) {
cittecla 55:bdab541f434d 166 printf("Channel Number: ");
aeschsim 40:b5e533e1e033 167 pc.scanf("%d", &channel);
cittecla 55:bdab541f434d 168 printf("\r\nchannel: %d\n\rDuty Cycle 0..4095: ",channel);
aeschsim 40:b5e533e1e033 169 pc.scanf("%d", &dutyCycle);
cittecla 55:bdab541f434d 170 printf("\n\r%d\n\r",dutyCycle);
aeschsim 46:cdc24a24e4e3 171 setPWM((char)channel, (int)dutyCycle);
aeschsim 40:b5e533e1e033 172 fflush(stdin);
aeschsim 40:b5e533e1e033 173 }
cittecla 55:bdab541f434d 174 printf("leave Servo-Board Test Tool\n\r");
aeschsim 40:b5e533e1e033 175 state = 47;
aeschsim 40:b5e533e1e033 176 break;
aeschsim 40:b5e533e1e033 177
aeschsim 40:b5e533e1e033 178 case 49:
cittecla 42:ba59ed6a2a06 179 enableOutput();
cittecla 55:bdab541f434d 180 printf("Servo output enabled\r\n\n");
aeschsim 40:b5e533e1e033 181 state = 47;
aeschsim 34:9d6dd3a12641 182 break;
cittecla 2:72886e996098 183
aeschsim 34:9d6dd3a12641 184 case 50:
cittecla 42:ba59ed6a2a06 185 disableOutput();
cittecla 55:bdab541f434d 186 printf("Servo output disabled\r\n\n");
aeschsim 40:b5e533e1e033 187 state = 47;
aeschsim 40:b5e533e1e033 188 break;
cittecla 53:1c61cadbcb35 189
cittecla 42:ba59ed6a2a06 190 case 51:
cittecla 52:701d0c2f47d7 191 testSd();
cittecla 55:bdab541f434d 192 printf("\rSD Card test finished\r\n\n");
cittecla 55:bdab541f434d 193 state = 47;
cittecla 55:bdab541f434d 194 break;
cittecla 58:cda5298c9b7f 195
cittecla 58:cda5298c9b7f 196
cittecla 55:bdab541f434d 197 case 52:
cittecla 56:218601547d13 198 user[1] = readMedication(1);
cittecla 56:218601547d13 199 if(user[1].valid) {
cittecla 56:218601547d13 200 printf("\rread successful\r\n\n");
cittecla 55:bdab541f434d 201 } else {
cittecla 55:bdab541f434d 202 printf("\rread failed\r\n\n");
cittecla 55:bdab541f434d 203 }
cittecla 42:ba59ed6a2a06 204 state = 47;
cittecla 53:1c61cadbcb35 205 break;
cittecla 55:bdab541f434d 206
cittecla 55:bdab541f434d 207 case 53:
cittecla 56:218601547d13 208 if(user[1].valid == false) {
cittecla 57:79fed71031da 209 printf("\r\nNo valid data in struct, try to run case 52\r\n\n");
cittecla 55:bdab541f434d 210 } else {
cittecla 55:bdab541f434d 211 printf("\r\nMedication display test tool:\r\n");
cittecla 55:bdab541f434d 212 printf("Enter Day (0..6) and Moment (0..4)\r\nTo exit enter Day > 6:\r\n");
cittecla 55:bdab541f434d 213 day = 0;
cittecla 55:bdab541f434d 214 while (day < 7) {
cittecla 55:bdab541f434d 215 printf("\r\nDay Number: ");
cittecla 55:bdab541f434d 216 pc.scanf("%d", &day);
cittecla 55:bdab541f434d 217 if(day < 7) {
cittecla 55:bdab541f434d 218 printf("\r\nDay: %d\n\rMoment 0..3: ",day);
cittecla 55:bdab541f434d 219 pc.scanf("%d", &moment);
cittecla 55:bdab541f434d 220 printf("\r\nMedication for weekday %d Moment %d is ",day,moment);
cittecla 55:bdab541f434d 221 for(int i=0; i<6; i++) {
cittecla 56:218601547d13 222 printf("%d", user[1].medication.day[day].moment[moment].medContainer.container[i]);
cittecla 55:bdab541f434d 223 }
cittecla 58:cda5298c9b7f 224 printf("\r\nThe alarm clock is set for %02d:%02d",user[1].medication.day[day].moment[moment].time.hour,user[1].medication.day[day].moment[moment].time.minute);
cittecla 55:bdab541f434d 225 }
cittecla 55:bdab541f434d 226 printf("\r\n");
cittecla 55:bdab541f434d 227 fflush(stdin);
cittecla 55:bdab541f434d 228 }
cittecla 55:bdab541f434d 229 printf("exit Tool\n\r");
cittecla 55:bdab541f434d 230 }
cittecla 56:218601547d13 231 state = 47;
cittecla 56:218601547d13 232 break;
cittecla 58:cda5298c9b7f 233 case 54:
cittecla 58:cda5298c9b7f 234 writeMedication(0,user[1]);
cittecla 58:cda5298c9b7f 235 state = 47;
cittecla 58:cda5298c9b7f 236 break;
aeschsim 59:1867088695f3 237 case 55:
aeschsim 59:1867088695f3 238 /* Demo Tool */
PESGruppe1 61:086bcd5ca968 239 enableOutput();
PESGruppe1 61:086bcd5ca968 240 printf("Servo output enabled\r\n\n");
PESGruppe1 61:086bcd5ca968 241 //summer.period_us(500);
PESGruppe1 61:086bcd5ca968 242 //summer.write(0.5f);
PESGruppe1 61:086bcd5ca968 243 //wait(3);
PESGruppe1 61:086bcd5ca968 244 //summer.write(0.0f);
PESGruppe1 61:086bcd5ca968 245
PESGruppe1 61:086bcd5ca968 246 //userButton1.fall(&summ);
aeschsim 60:7554e4272b3b 247
PESGruppe1 61:086bcd5ca968 248 color = 0xFFFFFF;
PESGruppe1 61:086bcd5ca968 249 colorTime = 0;
aeschsim 60:7554e4272b3b 250
PESGruppe1 61:086bcd5ca968 251 setLED(0,color);
PESGruppe1 61:086bcd5ca968 252 wait(5);
PESGruppe1 61:086bcd5ca968 253 printf("start loop\n\r");
aeschsim 59:1867088695f3 254 while(colorTime < DEMOTIME) {
PESGruppe1 61:086bcd5ca968 255 printf("fade1\n\r");
aeschsim 60:7554e4272b3b 256 for(r = 0; r <= 255; r++) {
aeschsim 59:1867088695f3 257 color &= 0x00FFFF;
PESGruppe1 61:086bcd5ca968 258 color |= (r<<16);
PESGruppe1 61:086bcd5ca968 259 printf("color = %d\n\r",color);
PESGruppe1 61:086bcd5ca968 260 setLED(0,color);
aeschsim 59:1867088695f3 261 wait_ms(FADESPEED);
aeschsim 59:1867088695f3 262 }
PESGruppe1 61:086bcd5ca968 263 printf("fade2");
aeschsim 60:7554e4272b3b 264 for(b = 255; b >= 0; b--) {
aeschsim 59:1867088695f3 265 color &= 0xFFFF00;
PESGruppe1 61:086bcd5ca968 266 color |= b;
PESGruppe1 61:086bcd5ca968 267 setLED(0,color);
aeschsim 59:1867088695f3 268 wait_ms(FADESPEED);
aeschsim 59:1867088695f3 269 }
PESGruppe1 61:086bcd5ca968 270 printf("fade3");
aeschsim 60:7554e4272b3b 271 for(g = 0; g <= 255; g++) {
aeschsim 59:1867088695f3 272 color &= 0xFF00FF;
PESGruppe1 61:086bcd5ca968 273 color |= (g<<8);
PESGruppe1 61:086bcd5ca968 274 setLED(0,color);
aeschsim 59:1867088695f3 275 wait_ms(FADESPEED);
aeschsim 59:1867088695f3 276 }
aeschsim 59:1867088695f3 277 for(r = 255; r > 0; r--) {
aeschsim 59:1867088695f3 278 color &= 0x00FFFF;
PESGruppe1 61:086bcd5ca968 279 color |= (r<<16);
PESGruppe1 61:086bcd5ca968 280 setLED(0,color);
aeschsim 59:1867088695f3 281 wait_ms(FADESPEED);
aeschsim 59:1867088695f3 282 }
aeschsim 59:1867088695f3 283 for(b = 0; b <= 255; b++) {
aeschsim 59:1867088695f3 284 color &= 0xFFFF00;
PESGruppe1 61:086bcd5ca968 285 color |= b;
PESGruppe1 61:086bcd5ca968 286 setLED(0,color);
aeschsim 59:1867088695f3 287 wait_ms(FADESPEED);
aeschsim 59:1867088695f3 288 }
aeschsim 59:1867088695f3 289 for (g = 255; g > 0; g--) {
aeschsim 59:1867088695f3 290 color &= 0xFF00FF;
PESGruppe1 61:086bcd5ca968 291 color |= (g<<8);
PESGruppe1 61:086bcd5ca968 292 setLED(0,color);
aeschsim 59:1867088695f3 293 wait_ms(FADESPEED);
aeschsim 59:1867088695f3 294 }
aeschsim 59:1867088695f3 295 colorTime++;
aeschsim 59:1867088695f3 296 }
PESGruppe1 61:086bcd5ca968 297 printf("exit demo");
aeschsim 59:1867088695f3 298
aeschsim 59:1867088695f3 299 break;
itslinear 72:172b40dd16ee 300
itslinear 72:172b40dd16ee 301 case 60
itslinear 72:172b40dd16ee 302 printf("write_medProtocol\n\r");
itslinear 72:172b40dd16ee 303 write_medProtocol(medicationTime, outputTime, medication, success, user);
itslinear 72:172b40dd16ee 304
itslinear 72:172b40dd16ee 305 break;
itslinear 72:172b40dd16ee 306
itslinear 72:172b40dd16ee 307 case 61
itslinear 72:172b40dd16ee 308
itslinear 72:172b40dd16ee 309 break;
itslinear 72:172b40dd16ee 310
itslinear 72:172b40dd16ee 311 case 62
itslinear 72:172b40dd16ee 312
itslinear 72:172b40dd16ee 313 break;
itslinear 72:172b40dd16ee 314
aeschsim 40:b5e533e1e033 315 default:
aeschsim 40:b5e533e1e033 316 state = 47; /* Go to State Switch */
aeschsim 34:9d6dd3a12641 317 break;
aeschsim 34:9d6dd3a12641 318 }
cittecla 2:72886e996098 319 }
cittecla 55:bdab541f434d 320 printf("exit while 1 loop");
cittecla 2:72886e996098 321 }