#include <math.h>
#include <IRremote.h>
#define THERMISTOR_ANALOG 34 // Thermistor analog pin
#define LED_RED 2 // Red LED pin
#define IR 16 // IR Receiver pin
#define RGB_RED 4 // RGB Red pin
#define RGB_GREEN 5 // RGB Green pin
#define RGB_BLUE 18 // RGB Blue pin
#define TRIG_PIN 32 // Ultrasonic Distance Sensor's TRIG pin
#define ECHO_PIN 33 // Ultrasonic Distance Sensor's ECHO pin
#define LED_BLUE 15 // LED Blue pin
IRrecv receiver(IR);
void setup() {
pinMode(LED_RED, OUTPUT);
pinMode(RGB_RED, OUTPUT);
pinMode(RGB_GREEN, OUTPUT);
pinMode(RGB_BLUE, OUTPUT);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(LED_BLUE, OUTPUT);
// Initialize the IR receiver
receiver.enableIRIn();
Serial.begin(115200);
}
void loop() {
int sensorValue = analogRead(THERMISTOR_ANALOG);
int resistorValue = 10000;
float resistance = resistorValue / ((4095.0 / sensorValue) - 1.0);
// Steinhart-Hart equation
float steinhart;
steinhart = resistance / 10000.0;
steinhart = log(steinhart);
steinhart /= 3950.0;
steinhart += 1.0 / (25.0 + 273.15);
steinhart = 1.0 / steinhart;
// Kelvin to Celsius
float tempC = steinhart - 273.15;
// Celsius to Fahrenheit
float tempF = (tempC * 9.0 / 5.0) + 32.0;
Serial.print("Temperature: ");
Serial.print(tempC);
Serial.print(" °C | ");
Serial.print(tempF);
Serial.println(" °F");
// If temperature exceeds 40 °C, turn on the Red LED
if (tempC > 40.0)
digitalWrite(LED_RED, HIGH);
else
digitalWrite(LED_RED, LOW);
/************************/
// IR receiver receive values
if (receiver.decode()) {
remote_RGB_LED();
receiver.resume(); // Receive the next value
}
/************************/
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
float duration_us = pulseIn(ECHO_PIN, HIGH); // Measure duration of pulse
float distance_cm = 0.017 * duration_us; // Calculate distance (cm)
// If distance is below 40 cm, turn on the Blue LED
if (distance_cm < 40)
digitalWrite(LED_BLUE, HIGH);
else
digitalWrite(LED_BLUE, LOW);
Serial.print("Distance: ");
Serial.print(distance_cm);
Serial.println(" cm\n");
delay(50); // 50 ms delay
}
void remote_RGB_LED() {
switch (receiver.decodedIRData.command) {
case 104: // Button 0 -> Off
analogWrite(RGB_RED, 0);
analogWrite(RGB_GREEN, 0);
analogWrite(RGB_BLUE, 0);
break;
case 48: // Button 1 -> Red
analogWrite(RGB_RED, 255);
analogWrite(RGB_GREEN, 0);
analogWrite(RGB_BLUE, 0);
break;
case 24: // Button 2 -> Green
analogWrite(RGB_RED, 0);
analogWrite(RGB_GREEN, 255);
analogWrite(RGB_BLUE, 0);
break;
case 122: // Button 3 -> Blue
analogWrite(RGB_RED, 0);
analogWrite(RGB_GREEN, 0);
analogWrite(RGB_BLUE, 255);
break;
case 16: // Button 4 -> Cyan
analogWrite(RGB_RED, 0);
analogWrite(RGB_GREEN, 255);
analogWrite(RGB_BLUE, 255);
break;
case 56: // Button 5 -> Magenta
analogWrite(RGB_RED, 255);
analogWrite(RGB_GREEN, 0);
analogWrite(RGB_BLUE, 255);
break;
case 90: // Button 6 -> Yellow
analogWrite(RGB_RED, 255);
analogWrite(RGB_GREEN, 255);
analogWrite(RGB_BLUE, 0);
break;
case 66: // Button 7 -> White
analogWrite(RGB_RED, 255);
analogWrite(RGB_GREEN, 255);
analogWrite(RGB_BLUE, 255);
break;
default:
Serial.println("Other button pressed");
}
}