#include "Adafruit_CCS811.h"
Adafruit_CCS811 ccs;
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h> // Adafruit core graphics library
#include <Adafruit_ST7789.h> // Adafruit hardware-specific library for ST7789
int buttonPin = 2;
int led3 = 3;
int led1R = 4;
int led1B = 5;
int led1G = 6;
int TX = 7;
// ST7789 TFT module connections
#define TFT_CS 10 // define chip select pin
#define TFT_DC 8 // define data/command pin
#define TFT_RST 9 // define reset pin, or set to -1 and connect to Arduino RESET pin
// initialize Adafruit ST7789 TFT library with hardware SPI module
// MOSI(SDA) ---> Arduino digital pin 11
// SCK (SCL) ---> Arduino digital pin 13
Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST);
void setup(void) {
// Defining the button pin as input
pinMode(buttonPin, INPUT);
// Defines the green LED as output
pinMode(led3, OUTPUT);
pinMode(led1R, OUTPUT);
pinMode(led1B, OUTPUT);
pinMode(led1G, OUTPUT);
pinMode(TX, OUTPUT);
Serial.begin(9600); // sets the serial port to 9600
Serial.println("CCS811 test");
if(!ccs.begin()){
Serial.println("Failed to start sensor! Please check your wiring.");
while(1);
}
//calibrate
while(!ccs.available());
float temp = ccs.calculateTemperature();
ccs.setTempOffset(temp - 25.0);
// Wait for the sensor to be ready
while(!ccs.available());
// initialize the ST7789 display (240x240 pixel)
// if the display has CS pin try with SPI_MODE0
tft.init(240, 240, SPI_MODE2);
// if the screen is flipped, remove this command
tft.setRotation(3);
// fill the screen with black color
tft.fillScreen(ST77XX_BLACK);
tft.setTextColor(ST77XX_WHITE, ST77XX_BLACK);
tft.setCursor(15, 0);
tft.setTextSize(3);
tft.print("AIR QUALITY");
tft.setTextColor(ST77XX_WHITE, ST77XX_BLACK);
tft.setCursor(15, 20);
tft.setTextSize(3);
tft.print("__________");
tft.setTextColor(ST77XX_YELLOW, ST77XX_BLACK);
tft.setCursor(15, 50);
tft.setTextSize(2);
tft.print("CO2:");
tft.setCursor(140, 140);
tft.setTextSize(2);
tft.print("ppm");
tft.setTextColor(ST77XX_WHITE, ST77XX_BLACK);
tft.setCursor(15, 145);
tft.setTextSize(3);
tft.print("_______");
tft.setTextColor(ST77XX_YELLOW, ST77XX_BLACK);
tft.setCursor(15, 174);
tft.setTextSize(2);
tft.print("TVOC:");
tft.setCursor(140, 210);
tft.setTextSize(2);
tft.print("ppm");
digitalWrite(led1R, LOW);
digitalWrite(led1B, LOW);
digitalWrite(led1G,LOW);
digitalWrite(TX, LOW);
digitalWrite(led3, LOW);
delay(200);
}
void loop() {
digitalWrite(led3, LOW);
digitalWrite(led1R, LOW);
if (digitalRead(buttonPin)==HIGH)
digitalWrite(led3, HIGH);
if(ccs.available()){
if(!ccs.readData()){
float temp = ccs.calculateTemperature();
if(!ccs.readData()){
Serial.print("CO2: ");
Serial.print(ccs.geteCO2());
Serial.print("TVOC: ");
Serial.println(ccs.getTVOC());
tft.fillRect(135,60,60,80,ST77XX_BLACK);
tft.fillRect(20,200,110,70,ST77XX_BLACK);
tft.setTextColor(ST77XX_WHITE, ST77XX_BLACK);
tft.setCursor(10, 80);
tft.setTextSize(7);
tft.println(ccs.geteCO2());
tft.setCursor(15, 200);
tft.setTextSize(5);
tft.println(ccs.getTVOC());
tft.fillRect(200,30,30,25,ST77XX_GREEN),digitalWrite(led1G, HIGH);
if (ccs.geteCO2 () > 600)tft.fillRect(200,30,30,25,ST77XX_BLACK),digitalWrite(led1G, HIGH);
tft.setCursor(10, 200);
tft.setTextSize(5); // text size
tft.fillRect(200,60,30,25,ST77XX_GREEN), digitalWrite(led1B, LOW);
if (ccs.geteCO2 () > 1200)tft.fillRect(200,60,30,25,ST77XX_BLACK),digitalWrite(led1G,HIGH);
tft.setCursor(10, 230);
tft.setTextSize(5); // text size
tft.fillRect(200,90,30,25,ST77XX_GREEN);
if (ccs.geteCO2 () >1800)tft.fillRect(200,90,30,25,ST77XX_BLACK), digitalWrite(led1G, LOW),digitalWrite(led1B, HIGH);
tft.setCursor(10, 200);
tft.setTextSize(5); // text size
tft.fillRect(200,120,30,25,ST77XX_BLUE);
if (ccs.geteCO2 () > 2400)tft.fillRect(200,120,30,25,ST77XX_BLACK), digitalWrite(led1B, HIGH);
tft.setCursor(10, 200);
tft.setTextSize(5); // text size
tft.fillRect(200,150,30,25, ST77XX_BLUE);
if (ccs.geteCO2 () >3000)tft.fillRect(200,150,30,25, ST77XX_BLACK),digitalWrite(led1B, LOW),digitalWrite(led1R, HIGH);
tft.setCursor(10, 200);
tft.setTextSize(5); // text size
tft.fillRect(200,180,30,25, ST77XX_RED);
if (ccs.geteCO2 () > 5000)tft.fillRect(200,180,30,25, ST77XX_RED),digitalWrite(led1R, HIGH);
tft.setCursor(10, 200);
tft.setTextSize(5); // text size
tft.fillRect(200,210,30,25, ST77XX_RED);
if (ccs.geteCO2 () > 8000)digitalWrite(TX, HIGH);
delay(100);
if (ccs.geteCO2 () < 8000)digitalWrite(TX, LOW);
delay(3000);
//reset
}
}
}
}