|
|
- #include <Adafruit_GFX.h> // Core graphics library
- #include <MCUFRIEND_kbv.h> // Hardware-specific library
- MCUFRIEND_kbv tft;
-
- #include <Fonts/FreeSans9pt7b.h>
- #include <Fonts/FreeSans12pt7b.h>
- #include <Fonts/FreeSerif12pt7b.h>
-
- #include <FreeDefaultFonts.h>
-
- #define BLACK 0x0000
- #define RED 0xF800
- #define GREEN 0x07E0
- #define WHITE 0xFFFF
- #define GREY 0x8410
-
- #include <math.h>
-
- int DustSensePin = 31;
-
- //globals for ppd42 dust sensor
-
- //unsigned int airreading[100] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
- unsigned long starttime = 0;
- unsigned long sampletime_ms = 10000;//sample 60s == 60000 ;
- unsigned long lowpulseoccupancy = 0;
- unsigned long duration = 0;
- float ratio = 0;
- float concentration = 0;
- unsigned int x = 0;
- unsigned int toplimit = 0;
- unsigned long sum = 0; //highest number possible - 32 bit unsigned, so 4 billion
- unsigned int average = 0;
- //end ppd42
-
-
- int brightnessread = 0;
-
- int cat = 0;
- int resultsread1 = 0;
-
- int screenreadyforprint = 0;
- double count = 0;
-
- void setup(void)
- {
- Serial.begin(9600);
- uint16_t ID = tft.readID();
- if (ID == 0xD3) ID = 0x9481;
- tft.begin(ID);
- tft.setRotation(1);
- tft.WriteCmdData(0x51, 0x00);
- //resultsread1 = tft.readReg(0x52);
- //writeData(0x51);
- pinMode(DustSensePin,INPUT);
- starttime = millis();//get the current time;
-
-
- }
-
- void loop(void)
- {
-
-
-
- if(screenreadyforprint == 0){
- tft.fillScreen(BLACK);
- tft.WriteCmdData(0x51, 0x0000);
- tft.setTextColor(0XFFFF);
- tft.setTextSize(2);
- tft.setCursor(0, 36);
- tft.println("Starting Sensor");
- screenreadyforprint = 1;
- }
-
-
- duration = pulseIn(DustSensePin, LOW, 500000);
-
- lowpulseoccupancy = lowpulseoccupancy + duration;
-
- //tft.println(airreading)
- if ((millis()-starttime) > sampletime_ms)//if the sample time == 30s
- {
- tft.fillScreen(BLACK);
- tft.WriteCmdData(0x51, 0x0000);
- tft.setTextColor(0XFFFF);
- tft.setTextSize(2);
- tft.setCursor(0, 36);
-
- ratio = lowpulseoccupancy/(sampletime_ms*10.0); // Integer percentage 0=>100
- concentration = 1.1*powf(ratio,3)-3.8*powf(ratio,2)+520*ratio+0.62; // using spec sheet curve
- tft.print("Count: ");
- tft.println(count);
- tft.println(lowpulseoccupancy);
- //tft.print(",");
- tft.println(ratio);
- //tft.print(",");
- tft.print("Concentration is: ");
- tft.println(concentration);
- lowpulseoccupancy = 0;
- starttime = millis();
- //tft.println("Results printed.");
- count++;
-
- }
-
-
-
- }
-
- void showmsgXY(int x, int y, int sz, const GFXfont *f, const char *msg)
- {
- int16_t x1, y1;
- uint16_t wid, ht;
- tft.drawFastHLine(0, y, tft.width(), WHITE);
- tft.setFont(f);
- tft.setCursor(x, y);
- tft.setTextColor(GREEN);
- tft.setTextSize(sz);
- tft.print(msg);
- delay(1000);
- }
-
-
- uint32_t readReg32(uint16_t reg)
- {
- uint16_t h = tft.readReg(reg, 0);
- uint16_t l = tft.readReg(reg, 1);
- return ((uint32_t) h << 16) | (l);
- }
|