Final Project for ECE-4180 Fall 2022. Interface with ENS160 AQI sensor and display the readings on uLCD.
Dependencies: 4DGL-uLCD-SE ENS160_Library mbed PinDetect mbed-rtos
main.cpp@11:03f86b377280, 19 months ago (annotated)
- Committer:
- krishnamvs
- Date:
- Thu Dec 08 16:58:55 2022 +0000
- Revision:
- 11:03f86b377280
- Parent:
- 10:112572fbb168
Final
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| krishnamvs | 11:03f86b377280 | 1 | #include "mbed.h" |
| krishnamvs | 11:03f86b377280 | 2 | #include "rtos.h" |
| krishnamvs | 11:03f86b377280 | 3 | #include "uLCD_4DGL.h" |
| krishnamvs | 11:03f86b377280 | 4 | #include "PinDetect.h" |
| krishnamvs | 10:112572fbb168 | 5 | #include "ens160_i2c.h" |
| 4180_1 | 0:cfcf73272647 | 6 | |
| krishnamvs | 10:112572fbb168 | 7 | ENS160 myENS(p9, p10, ENS160_ADDRESS_HIGH); |
| krishnamvs | 10:112572fbb168 | 8 | uLCD_4DGL uLCD(p28,p27,p30); // serial tx, serial rx, reset pin; |
| krishnamvs | 11:03f86b377280 | 9 | PinDetect pb(p8); |
| krishnamvs | 11:03f86b377280 | 10 | Mutex mutex; |
| krishnamvs | 11:03f86b377280 | 11 | |
| krishnamvs | 11:03f86b377280 | 12 | uint8_t volatile aqi; |
| krishnamvs | 11:03f86b377280 | 13 | uint32_t volatile co2,tvoc; |
| krishnamvs | 11:03f86b377280 | 14 | uint8_t volatile current_screen = 0; |
| krishnamvs | 11:03f86b377280 | 15 | |
| krishnamvs | 11:03f86b377280 | 16 | void redrawBG() |
| krishnamvs | 11:03f86b377280 | 17 | { |
| krishnamvs | 11:03f86b377280 | 18 | mutex.lock(); |
| krishnamvs | 11:03f86b377280 | 19 | uLCD.color(WHITE); |
| krishnamvs | 11:03f86b377280 | 20 | uLCD.circle(64,64,64,WHITE); |
| krishnamvs | 11:03f86b377280 | 21 | uLCD.filled_circle(64,64,60,BLUE); |
| krishnamvs | 11:03f86b377280 | 22 | mutex.unlock(); |
| krishnamvs | 11:03f86b377280 | 23 | } |
| krishnamvs | 11:03f86b377280 | 24 | |
| krishnamvs | 11:03f86b377280 | 25 | void getData(void const *args) |
| krishnamvs | 11:03f86b377280 | 26 | { |
| krishnamvs | 11:03f86b377280 | 27 | while(1) |
| krishnamvs | 11:03f86b377280 | 28 | { |
| krishnamvs | 11:03f86b377280 | 29 | aqi = myENS.getAQI(); |
| krishnamvs | 11:03f86b377280 | 30 | co2 = myENS.getECO2(); |
| krishnamvs | 11:03f86b377280 | 31 | tvoc = myENS.getTVOC(); |
| krishnamvs | 11:03f86b377280 | 32 | Thread::wait(100); |
| krishnamvs | 11:03f86b377280 | 33 | } |
| krishnamvs | 11:03f86b377280 | 34 | } |
| krishnamvs | 11:03f86b377280 | 35 | |
| krishnamvs | 11:03f86b377280 | 36 | void allScreens() |
| krishnamvs | 11:03f86b377280 | 37 | { |
| krishnamvs | 11:03f86b377280 | 38 | uLCD.text_width(1.75); //4X size text |
| krishnamvs | 11:03f86b377280 | 39 | uLCD.text_height(1.75); |
| krishnamvs | 11:03f86b377280 | 40 | uLCD.locate(6,4); |
| krishnamvs | 11:03f86b377280 | 41 | uLCD.printf("AQI:"); |
| krishnamvs | 11:03f86b377280 | 42 | uLCD.printf("%d",aqi); |
| krishnamvs | 11:03f86b377280 | 43 | uLCD.locate(4,7); |
| krishnamvs | 11:03f86b377280 | 44 | uLCD.printf("C02:"); |
| krishnamvs | 11:03f86b377280 | 45 | uLCD.printf("%d", co2); |
| krishnamvs | 11:03f86b377280 | 46 | uLCD.printf("ppm"); |
| krishnamvs | 11:03f86b377280 | 47 | uLCD.locate(4,10); |
| krishnamvs | 11:03f86b377280 | 48 | uLCD.printf("TVOC:"); |
| krishnamvs | 11:03f86b377280 | 49 | uLCD.printf("%d",tvoc); |
| krishnamvs | 11:03f86b377280 | 50 | uLCD.printf("ppb"); |
| krishnamvs | 11:03f86b377280 | 51 | } |
| krishnamvs | 10:112572fbb168 | 52 | |
| krishnamvs | 11:03f86b377280 | 53 | void AQI() |
| krishnamvs | 11:03f86b377280 | 54 | { |
| krishnamvs | 11:03f86b377280 | 55 | uLCD.text_width(2); //4X size text |
| krishnamvs | 11:03f86b377280 | 56 | uLCD.text_height(2); |
| krishnamvs | 11:03f86b377280 | 57 | uLCD.locate(3,3); |
| krishnamvs | 11:03f86b377280 | 58 | uLCD.printf("AQI\n"); |
| krishnamvs | 11:03f86b377280 | 59 | uLCD.locate(4,4); |
| krishnamvs | 11:03f86b377280 | 60 | uLCD.printf("%d",aqi); |
| krishnamvs | 11:03f86b377280 | 61 | } |
| krishnamvs | 11:03f86b377280 | 62 | |
| krishnamvs | 11:03f86b377280 | 63 | void CO2() |
| krishnamvs | 11:03f86b377280 | 64 | { |
| krishnamvs | 11:03f86b377280 | 65 | uLCD.text_width(2); //4X size text |
| krishnamvs | 11:03f86b377280 | 66 | uLCD.text_height(2); |
| krishnamvs | 11:03f86b377280 | 67 | uLCD.locate(3,3); |
| krishnamvs | 11:03f86b377280 | 68 | uLCD.printf("C02\n"); |
| krishnamvs | 11:03f86b377280 | 69 | uLCD.locate(1,4); |
| krishnamvs | 11:03f86b377280 | 70 | uLCD.printf("%d", co2); |
| krishnamvs | 11:03f86b377280 | 71 | uLCD.printf("ppm"); |
| krishnamvs | 11:03f86b377280 | 72 | } |
| krishnamvs | 10:112572fbb168 | 73 | |
| krishnamvs | 11:03f86b377280 | 74 | void TVOC() |
| krishnamvs | 11:03f86b377280 | 75 | { |
| krishnamvs | 11:03f86b377280 | 76 | uLCD.text_width(2); //4X size text |
| krishnamvs | 11:03f86b377280 | 77 | uLCD.text_height(2); |
| krishnamvs | 11:03f86b377280 | 78 | uLCD.locate(3,3); |
| krishnamvs | 11:03f86b377280 | 79 | uLCD.printf("TVOC\n"); |
| krishnamvs | 11:03f86b377280 | 80 | uLCD.locate(2,4); |
| krishnamvs | 11:03f86b377280 | 81 | uLCD.printf("%d",tvoc); |
| krishnamvs | 11:03f86b377280 | 82 | uLCD.printf("ppb"); |
| krishnamvs | 11:03f86b377280 | 83 | } |
| krishnamvs | 11:03f86b377280 | 84 | |
| krishnamvs | 11:03f86b377280 | 85 | void updateScreen() |
| krishnamvs | 11:03f86b377280 | 86 | { |
| krishnamvs | 11:03f86b377280 | 87 | mutex.lock(); |
| krishnamvs | 11:03f86b377280 | 88 | switch (current_screen) |
| krishnamvs | 11:03f86b377280 | 89 | { |
| krishnamvs | 11:03f86b377280 | 90 | case 0: |
| krishnamvs | 11:03f86b377280 | 91 | allScreens(); |
| krishnamvs | 11:03f86b377280 | 92 | break; |
| krishnamvs | 11:03f86b377280 | 93 | case 1: |
| krishnamvs | 11:03f86b377280 | 94 | AQI(); |
| krishnamvs | 11:03f86b377280 | 95 | break; |
| krishnamvs | 11:03f86b377280 | 96 | case 2: |
| krishnamvs | 11:03f86b377280 | 97 | TVOC(); |
| krishnamvs | 11:03f86b377280 | 98 | break; |
| krishnamvs | 11:03f86b377280 | 99 | case 3: |
| krishnamvs | 11:03f86b377280 | 100 | CO2(); |
| krishnamvs | 11:03f86b377280 | 101 | break; |
| krishnamvs | 11:03f86b377280 | 102 | } |
| krishnamvs | 11:03f86b377280 | 103 | mutex.unlock(); |
| krishnamvs | 11:03f86b377280 | 104 | } |
| krishnamvs | 11:03f86b377280 | 105 | |
| krishnamvs | 11:03f86b377280 | 106 | void pb_hit_callback() |
| krishnamvs | 11:03f86b377280 | 107 | { |
| krishnamvs | 11:03f86b377280 | 108 | current_screen = current_screen + 1; |
| krishnamvs | 11:03f86b377280 | 109 | if (current_screen > 3) |
| krishnamvs | 11:03f86b377280 | 110 | current_screen = 0; |
| krishnamvs | 11:03f86b377280 | 111 | } |
| 4180_1 | 0:cfcf73272647 | 112 | |
| 4180_1 | 2:75727e89a717 | 113 | int main() |
| 4180_1 | 2:75727e89a717 | 114 | { |
| krishnamvs | 11:03f86b377280 | 115 | pb.mode(PullUp); |
| krishnamvs | 11:03f86b377280 | 116 | wait(.001); |
| krishnamvs | 11:03f86b377280 | 117 | pb.attach_deasserted(&pb_hit_callback); |
| krishnamvs | 11:03f86b377280 | 118 | pb.setSampleFrequency(); |
| krishnamvs | 11:03f86b377280 | 119 | Thread t1(getData); |
| krishnamvs | 11:03f86b377280 | 120 | redrawBG(); |
| krishnamvs | 11:03f86b377280 | 121 | uint8_t oldScreen = current_screen; |
| krishnamvs | 11:03f86b377280 | 122 | while(1) |
| krishnamvs | 10:112572fbb168 | 123 | { |
| krishnamvs | 11:03f86b377280 | 124 | if (oldScreen != current_screen) |
| krishnamvs | 10:112572fbb168 | 125 | { |
| krishnamvs | 11:03f86b377280 | 126 | oldScreen = current_screen; |
| krishnamvs | 11:03f86b377280 | 127 | redrawBG(); |
| 4180_1 | 3:454d1f4c8fd7 | 128 | } |
| krishnamvs | 11:03f86b377280 | 129 | updateScreen(); |
| krishnamvs | 11:03f86b377280 | 130 | Thread::wait(1000); |
| krishnamvs | 11:03f86b377280 | 131 | } |
| krishnamvs | 10:112572fbb168 | 132 | } |
