#include <IRremote.h>
#define PIN_RECEIVER 2 // Signal Pin of IR receiver
IRrecv receiver(PIN_RECEIVER);
// Relay pins on Arduino Nano
const int relayPins[8] = {3, 4, 5, 6, 7, 8, 9, 10}; // Assign each relay a Nano digital pin
int activeRelay = -1; // Track which relay is currently on (-1 means no relay is on)
// Define 7-segment display pins (adjust these as per your setup)
const int segmentPins[7] = {11, 12, A0, A1, A2, A3, A4}; // A-G segments
// 7-segment patterns for digits 0-8 (common cathode, where LOW turns on the segment)
const byte digitPatterns[10] = {
B00111111, // 0: ABCDEF
B00000110, // 1: BC
B01011011, // 2: ABDEG
B01001111, // 3: ABCDG
B01100110, // 4: BCFG
B01101101, // 5: ACDFG
B01111101, // 6: ACDEFG
B00000111, // 7: ABC
B01111111, // 8: ABCDEFG
B01111001 // E: ADEF and G
};
void setup() {
// Initialize IR receiver
receiver.enableIRIn();
// Set up relay pins as outputs and turn them off initially
for (int i = 0; i < 8; i++) {
pinMode(relayPins[i], OUTPUT);
digitalWrite(relayPins[i], LOW);
}
// Set up 7-segment pins as outputs
for (int i = 0; i < 7; i++) {
pinMode(segmentPins[i], OUTPUT);
digitalWrite(segmentPins[i], HIGH); // Initially turn off all segments
}
}
void loop() {
// Checks if an IR signal is received
if (receiver.decode()) {
translateIR();
receiver.resume(); // Receive the next value
}
}
void displayDigit(int number) {
if (number >= 0 && number <= 9) {
byte pattern = digitPatterns[number];
for (int i = 0; i < 7; i++) {
digitalWrite(segmentPins[i], (pattern >> i) & 0x01 ? LOW : HIGH); // LOW turns on segment
}
}
}
void activateRelay(int relayIndex) {
// Turn off previous relay if there was one
if (activeRelay != -1) {
digitalWrite(relayPins[activeRelay], LOW);
}
// Turn on the new relay and update activeRelay
digitalWrite(relayPins[relayIndex], HIGH);
activeRelay = relayIndex;
displayDigit(relayIndex + 1); // Display relay number (1-based index)
}
void turnOffAllRelays() {
for (int i = 0; i < 8; i++) {
digitalWrite(relayPins[i], LOW);
}
activeRelay = -1;
displayDigit(0); // Display "0" when all relays are off
}
void translateIR() {
// Takes action based on IR code received
switch (receiver.decodedIRData.command) {
case 48: // Button 1
activateRelay(0);
break;
case 24: // Button 2
activateRelay(1);
break;
case 122: // Button 3
activateRelay(2);
break;
case 16: // Button 4
activateRelay(3);
break;
case 56: // Button 5
activateRelay(4);
break;
case 90: // Button 6
activateRelay(5);
break;
case 66: // Button 7
activateRelay(6);
break;
case 74: // Button 8
activateRelay(7);
break;
case 104: // Button 0
turnOffAllRelays();
break;
default:
displayDigit(9); // Show "E" if unknown command
}
}