#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
#include <WiFi.h>
#include "ThingSpeak.h"
const char* WIFI_NAME = "Wokwi-GUEST";
const char* WIFI_PASSWORD = "";
const int myChannelNumber = 2483764;
const char* myApiKey = "SFPVATLNY982GQ9B";
const char* server = "api.thingspeak.com";
WiFiClient client;
int ammoniaSensor = 35;
int h2sSensor = 34;
float ammonia;
float h2s;
int ammoniaControl = 19;
int h2sControl = 15;
int ac,h2sc;
// LCD geometry
const int LCD_COLS = 16;
const int LCD_ROWS = 2;
int status;
#define ledRed 5// Pin für die rote LED am digitalen Pin D11
#define ledGreen 17 // Pin für die gruene LED am digitalen Pin
const int PAUSE = 250;
void setup() {
Serial.begin(115200);
Wire.begin(23, 22);
lcd.init();
lcd.backlight();
pinMode(ammoniaControl, OUTPUT);
pinMode(h2sControl, OUTPUT);
pinMode(ammoniaSensor, INPUT);
pinMode(h2sSensor, INPUT);
pinMode (ledRed, OUTPUT);
pinMode (ledGreen, OUTPUT);
digitalWrite(ledRed, LOW);
digitalWrite(ledGreen, LOW);
//Initialise LC bc D
Serial.println("Serial");
// initalization was successful, the backlight should be on now
lcd.clear();
// Print a message to the LCD
lcd.print("Emission Control");
lcd.setCursor(0, 1);
lcd.print("by Chettinad ");
delay (1000);
WiFi.begin(WIFI_NAME, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED){
delay(1000);
Serial.println("Wifi not connected");
}
Serial.println("Wifi connected !");
Serial.println("Local IP: " + String(WiFi.localIP()));
WiFi.mode(WIFI_STA);
ThingSpeak.begin(client);
}
void loop() {
Serial.print("Emission Sensor Value:");
ammonia = analogRead(ammoniaSensor);
delay(500);
h2s=analogRead(h2sSensor);
delay(500);
ammonia = map(ammonia, 0, 4095, 0, 50);
h2s=map(h2s, 0,4095 , 0, 600);
Serial.println(ammonia);
Serial.println(h2s);
delay(100);
mnc(ammonia, ammoniaControl, 25, "Amm-");
if(ammonia>25){
ac=1;
}
else if(ammonia<25){
ac=0;
}
mnc(h2s, h2sControl, 25, "h2s-");
if(h2s>25){
h2s=1;
}
else if(h2s<25){
h2s=0;
}
ThingSpeak.setField(1,ammonia);
ThingSpeak.setField(2,h2s);
ThingSpeak.setField(3,ac);
ThingSpeak.setField(4,h2sc);
lcd.clear();
// Print a message to the LCD
lcd.print("Sending to");
lcd.print("Thingspeak");
int x = ThingSpeak.writeFields(myChannelNumber,myApiKey);
if(x == 200){
Serial.println("Data pushed successfull");
}else{
Serial.println("Push error" + String(x));
}
Serial.println("---");
delay(2000);
}
void mnc(int gas,int control,int maxV,const char* text) {
if (gas > maxV) {
digitalWrite(control, HIGH);
digitalWrite(ledGreen, LOW);
digitalWrite(ledRed, HIGH);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(text);
lcd.print(gas);
lcd.print(" | >");
lcd.print(maxV);
lcd.print("ppm");
lcd.setCursor(0, 1);
lcd.print("CONTROLING");
delay(1000);
}
if ( gas < maxV) {
digitalWrite(control, LOW);
digitalWrite(ledGreen, HIGH);
digitalWrite(ledRed, LOW);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(text);
lcd.print(gas);
lcd.print(" | <");
lcd.print(maxV);
lcd.print("ppm");
lcd.setCursor(0, 1);
lcd.print("OKAY");
delay(1000);
}
}