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 | } |