// LED Display Libs
#include "SPI.h"
#include "Wire.h"
#include "stdio.h" 
#include "Adafruit_GFX.h"
#include "Fonts/FreeSans9pt7b.h"
#include "Adafruit_SSD1306.h"
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET     4 // Reset pin # (or -1 if sharing Arduino reset pin)
#define OLED_ADDER 0x3C
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT);
// Gas Sensor & LED Alert Pins
#define gasSensor 34
#define alertLED 23
#define button 32
#define test 33
int alertValue = 0;
 
// Wifi and IoT Libs and Values
// * Hidden for security reasons
#include "WiFi.h"
#include "WiFiClientSecure.h"
#define WIFI_SSID "NETGEAR50" 
#define WIFI_PASS "aquaticpanda498"
#define API_KEY "dkmxnPR2PPNL6Spb1sNZxP"
#define SERVER "maker.ifttt.com"
#define PORT 443
void setup() {
  int i = 10; 
  Serial.begin(9600);
  display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDER);
  pinMode(alertLED, OUTPUT);
  pinMode(button, INPUT_PULLUP);
  // Starts the Wifi
  WiFi.begin(WIFI_SSID, WIFI_PASS);
  // If the Wifi cannot connect to the modem
  while(WiFi.status() != WL_CONNECTED && i >=0) {
    delay(1000);
    Serial.print(i);
    Serial.print(", ");
    i--;
  }
}
void loop() {
 
  int gasLevel = analogRead(gasSensor); // Reads sensor value
  gasLevel = gasLevel - 1600;
  Serial.println(gasLevel);
  // Displays on I2C LED Display
  display.clearDisplay(); // Has to clear the display 
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setFont(&FreeSans9pt7b);
  display.setCursor(20,12);
  display.println("CO Level: ");
  display.setTextSize(2);
  display.setFont(&FreeSans9pt7b);
  display.setTextColor(WHITE);
  display.setCursor(30,45);
  display.println(gasLevel);
  display.display();
  while(alertValue == 1 && digitalRead(button) != 0){
    triggerAlarm(gasLevel);
  }
  if (digitalRead(test) == 0){ // Alert System
    alertValue = 1;
    triggerAlarm(gasLevel);
  }
  else{
    alertValue = 0;
    delay(1000);
    digitalWrite(alertLED, LOW);
  }
}
void triggerAlarm(int gasLevel){
  sendAlert(gasLevel);
  for (int x = 0;x<5;x++){
    digitalWrite(alertLED, HIGH);
    delay(100);
    digitalWrite(alertLED, LOW);
    delay(100);
  }
}
void sendAlert(int gasLevel) {
  // Creates a WiFi client
  WiFiClientSecure client; 
  if (!client.connect(SERVER, PORT)) {
    Serial.println("Connection failed");
    return;
  }
  // URL for the trigger
  String event = "smokeAlert";
  String url = "/trigger/";
  url += event;
  url += "/with/key/";
  url += API_KEY;
  url += "?value1=";
  url += String(gasLevel);
  
  Serial.print("Requesting URL: ");
  Serial.println(url);
  // Sends a request
  client.print(String("GET ") + url + " HTTP/1.1\r\n" +
               "Host: " + SERVER + "\r\n" + 
               "Connection: close\r\n\r\n");
  // Client ends
  client.stop();
}
		-       // LED Display Libs
- #include "SPI.h"
- #include "Wire.h"
- #include "stdio.h" 
- #include "Adafruit_GFX.h"
- #include "Fonts/FreeSans9pt7b.h"
- #include "Adafruit_SSD1306.h"
- #define SCREEN_WIDTH 128 // OLED display width, in pixels
- #define SCREEN_HEIGHT 64 // OLED display height, in pixels
- // Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
- #define OLED_RESET     4 // Reset pin # (or -1 if sharing Arduino reset pin)
- #define OLED_ADDER 0x3C
- Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT);
- // Gas Sensor & LED Alert Pins
- #define gasSensor 34
- #define alertLED 23
- #define button 32
- #define test 33
- int alertValue = 0;
-  
- // Wifi and IoT Libs and Values
- // * Hidden for security reasons
- #include "WiFi.h"
- #include "WiFiClientSecure.h"
- #define WIFI_SSID "NETGEAR50" 
- #define WIFI_PASS "aquaticpanda498"
- #define API_KEY "dkmxnPR2PPNL6Spb1sNZxP"
- #define SERVER "maker.ifttt.com"
- #define PORT 443
- void setup() {
-   int i = 10; 
-   Serial.begin(9600);
-   display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDER);
-   pinMode(alertLED, OUTPUT);
-   pinMode(button, INPUT_PULLUP);
-   // Starts the Wifi
-   WiFi.begin(WIFI_SSID, WIFI_PASS);
-   // If the Wifi cannot connect to the modem
-   while(WiFi.status() != WL_CONNECTED && i >=0) {
-     delay(1000);
-     Serial.print(i);
-     Serial.print(", ");
-     i--;
-   }
- }
- void loop() {
-  
-   int gasLevel = analogRead(gasSensor); // Reads sensor value
-   gasLevel = gasLevel - 1600;
-   Serial.println(gasLevel);
-   // Displays on I2C LED Display
-   display.clearDisplay(); // Has to clear the display 
-   display.setTextSize(1);
-   display.setTextColor(WHITE);
-   display.setFont(&FreeSans9pt7b);
-   display.setCursor(20,12);
-   display.println("CO Level: ");
-   display.setTextSize(2);
-   display.setFont(&FreeSans9pt7b);
-   display.setTextColor(WHITE);
-   display.setCursor(30,45);
-   display.println(gasLevel);
-   display.display();
-   while(alertValue == 1 && digitalRead(button) != 0){
-     triggerAlarm(gasLevel);
-   }
-   if (digitalRead(test) == 0){ // Alert System
-     alertValue = 1;
-     triggerAlarm(gasLevel);
-   }
-   else{
-     alertValue = 0;
-     delay(1000);
-     digitalWrite(alertLED, LOW);
-   }
- }
- void triggerAlarm(int gasLevel){
-   sendAlert(gasLevel);
-   for (int x = 0;x<5;x++){
-     digitalWrite(alertLED, HIGH);
-     delay(100);
-     digitalWrite(alertLED, LOW);
-     delay(100);
-   }
- }
- void sendAlert(int gasLevel) {
-   // Creates a WiFi client
-   WiFiClientSecure client; 
-   if (!client.connect(SERVER, PORT)) {
-     Serial.println("Connection failed");
-     return;
-   }
-   // URL for the trigger
-   String event = "smokeAlert";
-   String url = "/trigger/";
-   url += event;
-   url += "/with/key/";
-   url += API_KEY;
-   url += "?value1=";
-   url += String(gasLevel);
-   
-   Serial.print("Requesting URL: ");
-   Serial.println(url);
-   // Sends a request
-   client.print(String("GET ") + url + " HTTP/1.1\r\n" +
-                "Host: " + SERVER + "\r\n" + 
-                "Connection: close\r\n\r\n");
-   // Client ends
-   client.stop();
- }
			// LED Display Libs
#include "SPI.h"
#include "Wire.h"
#include "stdio.h" 
#include "Adafruit_GFX.h"
#include "Fonts/FreeSans9pt7b.h"
#include "Adafruit_SSD1306.h"
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET     4 // Reset pin # (or -1 if sharing Arduino reset pin)
#define OLED_ADDER 0x3C
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT);
// Gas Sensor & LED Alert Pins
#define gasSensor 34
#define alertLED 23
#define button 32
#define test 33
int alertValue = 0;
 
// Wifi and IoT Libs and Values
// * Hidden for security reasons
#include "WiFi.h"
#include "WiFiClientSecure.h"
#define WIFI_SSID "NETGEAR50" 
#define WIFI_PASS "aquaticpanda498"
#define API_KEY "dkmxnPR2PPNL6Spb1sNZxP"
#define SERVER "maker.ifttt.com"
#define PORT 443
void setup() {
  int i = 10; 
  Serial.begin(9600);
  display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDER);
  pinMode(alertLED, OUTPUT);
  pinMode(button, INPUT_PULLUP);
  // Starts the Wifi
  WiFi.begin(WIFI_SSID, WIFI_PASS);
  // If the Wifi cannot connect to the modem
  while(WiFi.status() != WL_CONNECTED && i >=0) {
    delay(1000);
    Serial.print(i);
    Serial.print(", ");
    i--;
  }
}
void loop() {
 
  int gasLevel = analogRead(gasSensor); // Reads sensor value
  gasLevel = gasLevel - 1600;
  Serial.println(gasLevel);
  // Displays on I2C LED Display
  display.clearDisplay(); // Has to clear the display 
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setFont(&FreeSans9pt7b);
  display.setCursor(20,12);
  display.println("CO Level: ");
  display.setTextSize(2);
  display.setFont(&FreeSans9pt7b);
  display.setTextColor(WHITE);
  display.setCursor(30,45);
  display.println(gasLevel);
  display.display();
  while(alertValue == 1 && digitalRead(button) != 0){
    triggerAlarm(gasLevel);
  }
  if (digitalRead(test) == 0){ // Alert System
    alertValue = 1;
    triggerAlarm(gasLevel);
  }
  else{
    alertValue = 0;
    delay(1000);
    digitalWrite(alertLED, LOW);
  }
}
void triggerAlarm(int gasLevel){
  sendAlert(gasLevel);
  for (int x = 0;x<5;x++){
    digitalWrite(alertLED, HIGH);
    delay(100);
    digitalWrite(alertLED, LOW);
    delay(100);
  }
}
void sendAlert(int gasLevel) {
  // Creates a WiFi client
  WiFiClientSecure client; 
  if (!client.connect(SERVER, PORT)) {
    Serial.println("Connection failed");
    return;
  }
  // URL for the trigger
  String event = "smokeAlert";
  String url = "/trigger/";
  url += event;
  url += "/with/key/";
  url += API_KEY;
  url += "?value1=";
  url += String(gasLevel);
  
  Serial.print("Requesting URL: ");
  Serial.println(url);
  // Sends a request
  client.print(String("GET ") + url + " HTTP/1.1\r\n" +
               "Host: " + SERVER + "\r\n" + 
               "Connection: close\r\n\r\n");
  // Client ends
  client.stop();
}