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

Committer:
krishnamvs
Date:
Thu Dec 08 16:58:55 2022 +0000
Revision:
11:03f86b377280
Parent:
10:112572fbb168
Final

Who changed what in which revision?

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