#include <OneWire.h>
#include <DallasTemperature.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define ONE_WIRE_BUS 2 // Data wire connected to pin 2 for Dallas temperature sensor
#define OLED_RESET 4 // Reset pin of OLED display
#define MOTOR_PIN 9 // Pin connected to the BLDC motor driver
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
void setup() {
Serial.begin(9600);
// Initialize OLED display
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.setTextColor(SSD1306_WHITE);
display.setTextSize(1);
// Start DallasTemperature sensor
sensors.begin();
// Set motor pin as output
pinMode(MOTOR_PIN, OUTPUT);
}
void loop() {
// Request temperature readings
sensors.requestTemperatures();
// Read temperature from sensor
float temperatureC = sensors.getTempCByIndex(0);
// Control motor speed based on temperature
int motorSpeed = map(temperatureC, 20, 30, 0, 255); // Map temperature to motor speed range (20°C to 30°C)
// Limit motor speed to the range 0-255
motorSpeed = constrain(motorSpeed, 0, 255);
// Set motor speed
analogWrite(MOTOR_PIN, motorSpeed);
// Display temperature and motor speed on OLED
display.clearDisplay();
display.setCursor(0, 0);
display.print("Temperature:");
display.setCursor(0, 10);
display.print(temperatureC, 1); // Display temperature with one decimal place
display.print(" C");
display.setCursor(0, 20);
display.print("Motor Speed:");
display.print(motorSpeed);
display.display();
// Print temperature and motor speed to serial monitor
Serial.print("Temperature: ");
Serial.print(temperatureC);
Serial.println(" C");
Serial.print("Motor Speed: ");
Serial.println(motorSpeed);
delay(1000); // Update temperature reading and motor speed every second
}