Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@2:bcf033cefa0e, 2019-07-25 (annotated)
- Committer:
- mehrnaz
- Date:
- Thu Jul 25 15:25:24 2019 +0000
- Revision:
- 2:bcf033cefa0e
- Parent:
- 1:fd5a598caa32
FeNO LCD code, Commented.
Who changed what in which revision?
| User | Revision | Line number | New contents of line | 
|---|---|---|---|
| christodoulos | 0:a13b440d4fd1 | 1 | #include "mbed.h" | 
| mehrnaz | 2:bcf033cefa0e | 2 | #include "pressure.h" | 
| mehrnaz | 1:fd5a598caa32 | 3 | #include "TextLCD.h" | 
| mehrnaz | 2:bcf033cefa0e | 4 | #include "time.h" | 
| mehrnaz | 1:fd5a598caa32 | 5 | |
| mehrnaz | 2:bcf033cefa0e | 6 | ///////////////////////// | 
| mehrnaz | 2:bcf033cefa0e | 7 | // User has to hold his breath for 5 second at a correct amount of pressure | 
| mehrnaz | 2:bcf033cefa0e | 8 | // There is an indicator on the LCD which shows the acceptable boundaries | 
| mehrnaz | 2:bcf033cefa0e | 9 | /////////////////////// | 
| mehrnaz | 2:bcf033cefa0e | 10 | |
| mehrnaz | 2:bcf033cefa0e | 11 | //Serial ttl(PA_0, PA_1); | 
| mehrnaz | 1:fd5a598caa32 | 12 | PwmOut led(PB_6); | 
| mehrnaz | 1:fd5a598caa32 | 13 | TextLCD lcd(PC_8,PC_6,PB_15,PB_14,PB_13,PB_12, TextLCD::LCD16x2); | 
| mehrnaz | 2:bcf033cefa0e | 14 | Timeout t; | 
| mehrnaz | 2:bcf033cefa0e | 15 | |
| mehrnaz | 2:bcf033cefa0e | 16 | int flag1; | 
| mehrnaz | 2:bcf033cefa0e | 17 | float sample2=0; | 
| mehrnaz | 2:bcf033cefa0e | 18 | float sample1; | 
| mehrnaz | 2:bcf033cefa0e | 19 | float delta; | 
| mehrnaz | 2:bcf033cefa0e | 20 | float sample0; | 
| mehrnaz | 2:bcf033cefa0e | 21 | float delta2; | 
| mehrnaz | 2:bcf033cefa0e | 22 | float sample3; | 
| mehrnaz | 2:bcf033cefa0e | 23 | float sample4; | 
| mehrnaz | 2:bcf033cefa0e | 24 | float delta3; | 
| mehrnaz | 2:bcf033cefa0e | 25 | int error1; | 
| mehrnaz | 2:bcf033cefa0e | 26 | int error2; | 
| mehrnaz | 2:bcf033cefa0e | 27 | int U; | 
| mehrnaz | 2:bcf033cefa0e | 28 | |
| mehrnaz | 2:bcf033cefa0e | 29 | // | 
| mehrnaz | 2:bcf033cefa0e | 30 | |
| mehrnaz | 2:bcf033cefa0e | 31 | void okmsg() { | 
| mehrnaz | 2:bcf033cefa0e | 32 | lcd.locate(6,0); | 
| mehrnaz | 2:bcf033cefa0e | 33 | lcd.printf("well done"); | 
| mehrnaz | 2:bcf033cefa0e | 34 | flag1=0; | 
| mehrnaz | 2:bcf033cefa0e | 35 | } | 
| mehrnaz | 2:bcf033cefa0e | 36 | void one() { | 
| mehrnaz | 2:bcf033cefa0e | 37 | printf("1...\n"); | 
| mehrnaz | 2:bcf033cefa0e | 38 | t.attach(&okmsg, 1.0); | 
| mehrnaz | 2:bcf033cefa0e | 39 | } | 
| mehrnaz | 2:bcf033cefa0e | 40 | void two() { | 
| mehrnaz | 2:bcf033cefa0e | 41 | lcd.locate(6,0); | 
| mehrnaz | 2:bcf033cefa0e | 42 | lcd.printf("hold: 2s "); | 
| mehrnaz | 2:bcf033cefa0e | 43 | t.attach(&one, 1.0); | 
| mehrnaz | 2:bcf033cefa0e | 44 | } | 
| mehrnaz | 2:bcf033cefa0e | 45 | void three() { | 
| mehrnaz | 2:bcf033cefa0e | 46 | lcd.locate(6,0); | 
| mehrnaz | 2:bcf033cefa0e | 47 | lcd.printf("hold: 3s "); | 
| mehrnaz | 2:bcf033cefa0e | 48 | t.attach(&two, 1.0); | 
| mehrnaz | 2:bcf033cefa0e | 49 | } | 
| mehrnaz | 2:bcf033cefa0e | 50 | void four() { | 
| mehrnaz | 2:bcf033cefa0e | 51 | lcd.locate(6,0); | 
| mehrnaz | 2:bcf033cefa0e | 52 | lcd.printf("hold: 4s "); | 
| mehrnaz | 2:bcf033cefa0e | 53 | t.attach(&three, 1.0); | 
| mehrnaz | 2:bcf033cefa0e | 54 | } | 
| mehrnaz | 2:bcf033cefa0e | 55 | void five() { | 
| mehrnaz | 2:bcf033cefa0e | 56 | lcd.locate(6,0); | 
| mehrnaz | 2:bcf033cefa0e | 57 | lcd.printf("hold: 5s "); | 
| mehrnaz | 2:bcf033cefa0e | 58 | t.attach(&four, 1.0); | 
| mehrnaz | 2:bcf033cefa0e | 59 | } | 
| mehrnaz | 2:bcf033cefa0e | 60 | void six() { | 
| mehrnaz | 2:bcf033cefa0e | 61 | lcd.locate(6,0); | 
| mehrnaz | 2:bcf033cefa0e | 62 | lcd.printf("hold: 6s "); | 
| mehrnaz | 2:bcf033cefa0e | 63 | t.attach(&five, 1.0); | 
| mehrnaz | 2:bcf033cefa0e | 64 | } | 
| mehrnaz | 2:bcf033cefa0e | 65 | |
| mehrnaz | 2:bcf033cefa0e | 66 | void counting() { | 
| mehrnaz | 2:bcf033cefa0e | 67 | six(); | 
| mehrnaz | 2:bcf033cefa0e | 68 | } | 
| mehrnaz | 2:bcf033cefa0e | 69 | |
| mehrnaz | 2:bcf033cefa0e | 70 | void RED1() { | 
| mehrnaz | 2:bcf033cefa0e | 71 | |
| mehrnaz | 2:bcf033cefa0e | 72 | // At the "Situation 0", which is before breathing into the device, | 
| mehrnaz | 2:bcf033cefa0e | 73 | // we reset everything and ask user to start breathing, set the brightness | 
| mehrnaz | 2:bcf033cefa0e | 74 | // of the LED to the lowest, and detach the timer | 
| mehrnaz | 2:bcf033cefa0e | 75 | |
| mehrnaz | 2:bcf033cefa0e | 76 | sample0=0; | 
| mehrnaz | 2:bcf033cefa0e | 77 | sample2=0; | 
| mehrnaz | 2:bcf033cefa0e | 78 | sample1=0; | 
| mehrnaz | 2:bcf033cefa0e | 79 | sample4=0; | 
| mehrnaz | 2:bcf033cefa0e | 80 | error1=0; | 
| mehrnaz | 2:bcf033cefa0e | 81 | error2=0; | 
| mehrnaz | 2:bcf033cefa0e | 82 | flag1=0; | 
| mehrnaz | 2:bcf033cefa0e | 83 | U=0; | 
| mehrnaz | 2:bcf033cefa0e | 84 | lcd.locate(0,1); | 
| mehrnaz | 2:bcf033cefa0e | 85 | lcd.printf("Start Breathing "); | 
| mehrnaz | 2:bcf033cefa0e | 86 | led.write(0.20f); | 
| mehrnaz | 2:bcf033cefa0e | 87 | t.detach(); | 
| mehrnaz | 2:bcf033cefa0e | 88 | } | 
| mehrnaz | 2:bcf033cefa0e | 89 | |
| mehrnaz | 2:bcf033cefa0e | 90 | void Harder(){ | 
| mehrnaz | 2:bcf033cefa0e | 91 | if (delta2>0 and error1==0) | 
| mehrnaz | 2:bcf033cefa0e | 92 | { | 
| mehrnaz | 2:bcf033cefa0e | 93 | t.detach(); | 
| mehrnaz | 2:bcf033cefa0e | 94 | sample0=0; | 
| mehrnaz | 2:bcf033cefa0e | 95 | sample2=0; | 
| mehrnaz | 2:bcf033cefa0e | 96 | sample1=0; | 
| mehrnaz | 2:bcf033cefa0e | 97 | error1=1; | 
| mehrnaz | 2:bcf033cefa0e | 98 | U=1; //This means that the program is now ready to have the breath in the standard boundaries. | 
| mehrnaz | 2:bcf033cefa0e | 99 | } | 
| mehrnaz | 2:bcf033cefa0e | 100 | } | 
| mehrnaz | 2:bcf033cefa0e | 101 | |
| mehrnaz | 2:bcf033cefa0e | 102 | |
| mehrnaz | 1:fd5a598caa32 | 103 | |
| christodoulos | 0:a13b440d4fd1 | 104 | |
| christodoulos | 0:a13b440d4fd1 | 105 | int main() | 
| christodoulos | 0:a13b440d4fd1 | 106 | { | 
| christodoulos | 0:a13b440d4fd1 | 107 | |
| mehrnaz | 2:bcf033cefa0e | 108 | pressure(); | 
| mehrnaz | 1:fd5a598caa32 | 109 | flow(); | 
| mehrnaz | 2:bcf033cefa0e | 110 | //ttl.baud(9600); | 
| mehrnaz | 2:bcf033cefa0e | 111 | //first we clear lcd | 
| mehrnaz | 1:fd5a598caa32 | 112 | lcd.cls(); | 
| mehrnaz | 2:bcf033cefa0e | 113 | //then we define the location to start showing characters from there | 
| mehrnaz | 2:bcf033cefa0e | 114 | lcd.locate(2,0); //column [0 to 15] , row [0,1] : in first row at the 2nd column I put the first line, | 
| mehrnaz | 2:bcf033cefa0e | 115 | lcd.printf("|"); //to show the first acceptable boundary. | 
| mehrnaz | 2:bcf033cefa0e | 116 | lcd.locate(3,0); //in the same row, 3rd column, I put the second boundary. | 
| mehrnaz | 1:fd5a598caa32 | 117 | lcd.printf("|"); | 
| mehrnaz | 2:bcf033cefa0e | 118 | //lcd.locate(0,1); | 
| mehrnaz | 2:bcf033cefa0e | 119 | //lcd.printf("breathe"); | 
| mehrnaz | 1:fd5a598caa32 | 120 | |
| mehrnaz | 2:bcf033cefa0e | 121 | int ft=0; | 
| christodoulos | 0:a13b440d4fd1 | 122 | while(1) { | 
| mehrnaz | 1:fd5a598caa32 | 123 | |
| mehrnaz | 2:bcf033cefa0e | 124 | //lcd.locate(8,0); | 
| mehrnaz | 2:bcf033cefa0e | 125 | printf("f: %3.2f\n", flow()); | 
| mehrnaz | 1:fd5a598caa32 | 126 | |
| mehrnaz | 2:bcf033cefa0e | 127 | // ttl.printf("flow: %f\n", flow()); | 
| mehrnaz | 2:bcf033cefa0e | 128 | |
| mehrnaz | 2:bcf033cefa0e | 129 | //we're making comparasion using pressure because it was more reliable than flow | 
| mehrnaz | 2:bcf033cefa0e | 130 | |
| mehrnaz | 2:bcf033cefa0e | 131 | ////////////////// SITUATION 0: Before Breathing | 
| mehrnaz | 2:bcf033cefa0e | 132 | if (pressure()<180.32) | 
| mehrnaz | 2:bcf033cefa0e | 133 | { | 
| mehrnaz | 2:bcf033cefa0e | 134 | //calls the following funtion which is defined before the main while loop: | 
| mehrnaz | 2:bcf033cefa0e | 135 | RED1(); | 
| mehrnaz | 2:bcf033cefa0e | 136 | } | 
| mehrnaz | 2:bcf033cefa0e | 137 | |
| mehrnaz | 2:bcf033cefa0e | 138 | |
| mehrnaz | 2:bcf033cefa0e | 139 | ////////////////// SITUATION 1: Starts Breathing | 
| mehrnaz | 2:bcf033cefa0e | 140 | if (pressure()>=180.32 and pressure()<200) | 
| mehrnaz | 1:fd5a598caa32 | 141 | { | 
| mehrnaz | 2:bcf033cefa0e | 142 | sample0=pressure(); | 
| mehrnaz | 2:bcf033cefa0e | 143 | delta2=sample1-sample0; | 
| mehrnaz | 2:bcf033cefa0e | 144 | //Naturally, at the beginning, the breath level goes to the situation 1 before situation 2 | 
| mehrnaz | 2:bcf033cefa0e | 145 | //so we need to enable a flag called U at the following called function | 
| mehrnaz | 2:bcf033cefa0e | 146 | //so it means that the code is ready for the next stage: | 
| mehrnaz | 2:bcf033cefa0e | 147 | Harder(); | 
| mehrnaz | 1:fd5a598caa32 | 148 | lcd.locate(0,1); | 
| mehrnaz | 2:bcf033cefa0e | 149 | lcd.printf("** OK "); | 
| mehrnaz | 2:bcf033cefa0e | 150 | led.write(0.20f); | 
| mehrnaz | 1:fd5a598caa32 | 151 | } | 
| mehrnaz | 2:bcf033cefa0e | 152 | |
| mehrnaz | 2:bcf033cefa0e | 153 | ////////////////// SITUATION 2: Standard level | 
| mehrnaz | 2:bcf033cefa0e | 154 | if (pressure()>=200 and pressure()<208.44) | 
| mehrnaz | 2:bcf033cefa0e | 155 | { | 
| mehrnaz | 2:bcf033cefa0e | 156 | sample1=pressure(); | 
| mehrnaz | 2:bcf033cefa0e | 157 | delta=sample2-sample1; | 
| mehrnaz | 2:bcf033cefa0e | 158 | |
| mehrnaz | 2:bcf033cefa0e | 159 | //If breath level has already reached the previous situation and now is in this situation, | 
| mehrnaz | 2:bcf033cefa0e | 160 | //then it is in a standard level and user has to keep it for 5 seconds | 
| mehrnaz | 2:bcf033cefa0e | 161 | |
| mehrnaz | 2:bcf033cefa0e | 162 | if (U==1){ | 
| mehrnaz | 2:bcf033cefa0e | 163 | //the following function activates a series of 7 other functions respectively. | 
| mehrnaz | 2:bcf033cefa0e | 164 | counting(); | 
| mehrnaz | 2:bcf033cefa0e | 165 | U=0; | 
| mehrnaz | 2:bcf033cefa0e | 166 | } | 
| mehrnaz | 2:bcf033cefa0e | 167 | if (flag1==0 and delta < 0) | 
| mehrnaz | 2:bcf033cefa0e | 168 | { | 
| mehrnaz | 2:bcf033cefa0e | 169 | flag1=1; | 
| mehrnaz | 2:bcf033cefa0e | 170 | //the following function activates a series of 7 other functions respectively. | 
| mehrnaz | 2:bcf033cefa0e | 171 | counting(); | 
| mehrnaz | 2:bcf033cefa0e | 172 | } | 
| mehrnaz | 2:bcf033cefa0e | 173 | lcd.locate(0,1); | 
| mehrnaz | 2:bcf033cefa0e | 174 | lcd.printf("*** Good "); | 
| mehrnaz | 2:bcf033cefa0e | 175 | led.write(0.40f); | 
| mehrnaz | 2:bcf033cefa0e | 176 | } | 
| mehrnaz | 2:bcf033cefa0e | 177 | |
| mehrnaz | 2:bcf033cefa0e | 178 | ////////////////// SITUATION 3: Perfect level | 
| mehrnaz | 2:bcf033cefa0e | 179 | if (pressure()>=208.44 and pressure()<238.48) | 
| mehrnaz | 1:fd5a598caa32 | 180 | { | 
| mehrnaz | 1:fd5a598caa32 | 181 | lcd.locate(0,1); | 
| mehrnaz | 2:bcf033cefa0e | 182 | lcd.printf("**** Perfect "); | 
| mehrnaz | 2:bcf033cefa0e | 183 | led.write(0.60f); | 
| mehrnaz | 2:bcf033cefa0e | 184 | sample2=pressure(); | 
| mehrnaz | 1:fd5a598caa32 | 185 | } | 
| mehrnaz | 2:bcf033cefa0e | 186 | |
| mehrnaz | 2:bcf033cefa0e | 187 | ////////////////// SITUATION 4: Standard level | 
| mehrnaz | 2:bcf033cefa0e | 188 | if (pressure()>=238.248 and pressure()<270.55) | 
| mehrnaz | 1:fd5a598caa32 | 189 | { | 
| mehrnaz | 2:bcf033cefa0e | 190 | sample3=pressure(); | 
| mehrnaz | 2:bcf033cefa0e | 191 | delta3=sample4-sample3; | 
| mehrnaz | 2:bcf033cefa0e | 192 | if(delta3>0){ | 
| mehrnaz | 2:bcf033cefa0e | 193 | counting(); | 
| mehrnaz | 2:bcf033cefa0e | 194 | sample4=0; | 
| mehrnaz | 2:bcf033cefa0e | 195 | } | 
| mehrnaz | 1:fd5a598caa32 | 196 | lcd.locate(0,1); | 
| mehrnaz | 2:bcf033cefa0e | 197 | lcd.printf("***** Good "); | 
| mehrnaz | 1:fd5a598caa32 | 198 | led.write(0.80f); | 
| mehrnaz | 1:fd5a598caa32 | 199 | } | 
| mehrnaz | 2:bcf033cefa0e | 200 | |
| mehrnaz | 2:bcf033cefa0e | 201 | ////////////////// SITUATION 5: Too hard level | 
| mehrnaz | 2:bcf033cefa0e | 202 | if (pressure()>=270.55) | 
| mehrnaz | 1:fd5a598caa32 | 203 | { | 
| mehrnaz | 2:bcf033cefa0e | 204 | sample4=pressure(); | 
| mehrnaz | 2:bcf033cefa0e | 205 | if (error2==0){ | 
| mehrnaz | 2:bcf033cefa0e | 206 | sample0=0; | 
| mehrnaz | 2:bcf033cefa0e | 207 | sample2=0; | 
| mehrnaz | 2:bcf033cefa0e | 208 | sample1=0; | 
| mehrnaz | 2:bcf033cefa0e | 209 | t.detach(); | 
| mehrnaz | 2:bcf033cefa0e | 210 | error2=1; | 
| mehrnaz | 2:bcf033cefa0e | 211 | } | 
| mehrnaz | 1:fd5a598caa32 | 212 | lcd.locate(0,1); | 
| mehrnaz | 2:bcf033cefa0e | 213 | lcd.printf("Breathe softer "); | 
| mehrnaz | 1:fd5a598caa32 | 214 | led.write(1.00f); | 
| mehrnaz | 1:fd5a598caa32 | 215 | } | 
| mehrnaz | 1:fd5a598caa32 | 216 | // lcd.printf("%f\n", flow()); | 
| mehrnaz | 2:bcf033cefa0e | 217 | wait (0.1); | 
| mehrnaz | 1:fd5a598caa32 | 218 | |
| christodoulos | 0:a13b440d4fd1 | 219 | } | 
| christodoulos | 0:a13b440d4fd1 | 220 | } |