PES 4 - Smart Medication Dispenser / PES4_ProgrammeforDesignReview2

Dependencies:   SDFileSystem mbed

Fork of PES4_Programme by PES 4 - Smart Medication Dispenser

Committer:
aeschsim
Date:
Fri Apr 06 06:55:36 2018 +0000
Revision:
71:3d0a4dbff536
Parent:
70:cc7ed2325202
Child:
76:53a25f1dc2b6
general clean up

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