// Aws project for MFA
#include <OneWire.h>
#include <DallasTemperature.h>
#include <PID_v1_bc.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
const int sensorPin = 3;
OneWire oneWire(sensorPin);
DallasTemperature sensors(&oneWire);
const int relayPin = 9;
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 32
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// PID Parameters
double Setpoint = 22.0;
double Input, Output;
double Kp = 2, Ki = 5.0, Kd = 1.0; // PID constants
PID myPID(&Input, &Output, &Setpoint, Kp, Ki, Kd, DIRECT);
void setup() {
Serial.begin(9600);
sensors.begin();
pinMode(relayPin, OUTPUT);
// Initialize PID
myPID.SetMode(AUTOMATIC);
if(!display.begin(SSD1306_BLACK, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
display.display();
delay(2000);
display.clearDisplay();
}
void loop() {
sensors.requestTemperatures();
Input = sensors.getTempCByIndex(0);
// Compute PID
myPID.Compute();
updateHeater(Output);
Serial.print("Temperature: ");
Serial.print(Input);
Serial.print(" C, Heater Output: ");
Serial.println(Output);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.print("Temp: ");
display.print(Input);
display.print(" C");
display.display();
delay(1000); // Delay for 1 second
}
void updateHeater(double output) {
analogWrite(relayPin, int(output));
}