#include <IRremote.h>
// C++ code
//
#include "IRremote.h"
#include "NewTone.h"
int IR_RECEIVE_PIN= 13;
IRrecv irrecv(IR_RECEIVE_PIN);
decode_results results;
int buzzerPin = 7;
int ledPin1 = 2;
int ledPin2 = 3;
int ledPin3 = 4;
int ledPin4 = 5;
int ledPin5 = 6;
int ledPin6 = 1;
int ledPin7 = 8;
int ledPin8 = 9;
bool receivedFirstSignal = false;
bool waitingForSecondSignal = false;
bool inPianoMode = false; // State variable to track if we are in "pianomode"
bool inGarageDoorMode = false; // State variable to track if we are in "garage door mode"
bool garage_door_open = false;
bool incrementMode = false;
bool decrementMode = false;
int currentLight = 1; // Initialize the current light to 1
unsigned long lastIRTime = 0; // Variable to store the timestamp of the last IR signal received
// Define a constant for the debounce time (milliseconds)
const unsigned long debounceTime = 1000; // Adjust this value as needed
void setup() /*----( SETUP: RUNS ONCE )----*/
{
Serial.begin(9600);
Serial.println("IR Receiver Raw Data + Button Decode Test");
IrReceiver.begin(IR_RECEIVE_PIN, DISABLE_LED_FEEDBACK); // Start the receiver
pinMode(buzzerPin, OUTPUT);
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
pinMode(ledPin4, OUTPUT);
pinMode(ledPin5, OUTPUT);
pinMode(ledPin6, OUTPUT);
pinMode(ledPin7, OUTPUT);
pinMode(ledPin8, OUTPUT);
}/*--(end setup )---*/
void loop() /*----( LOOP: RUNS CONSTANTLY )----*/
{
unsigned long currentMillis = millis(); // Get the current time
if (IrReceiver.decode()) // have we received an IR signal?
{
Serial.println(IrReceiver.decodedIRData.decodedRawData, HEX); // Uncomment to see raw values
if (!inPianoMode && !inGarageDoorMode) {
// We are not in any special mode yet
if (IrReceiver.decodedIRData.decodedRawData == 0xB946FF00 && !waitingForSecondSignal) {
// Received the first signal, wait for the second signal
receivedFirstSignal = true;
waitingForSecondSignal = true;
} else if (IrReceiver.decodedIRData.decodedRawData == 0xF30CFF00 && receivedFirstSignal) {
// Received the second signal and not in any special mode, enter "pianomode"
pianomode();
Serial.println("Piano Mode");
NewTone(buzzerPin, 1109, tonedelay);
digitalWrite(ledPin8, HIGH);
delay(tonedelay);
digitalWrite(ledPin8, LOW);
// Reset the flags for the next time
receivedFirstSignal = false;
waitingForSecondSignal = false;
// Set the state variable to indicate we are in "pianomode"
inPianoMode = true;
// Record the timestamp of the last IR signal received
lastIRTime = currentMillis;
} else if (IrReceiver.decodedIRData.decodedRawData == 0xE718FF00) {
// Received the garage door signal, enter "garage door mode"
garageDoorMode();
Serial.println("Garage Door Mode");
// Add garage door opener logic here
// Set the state variable to indicate we are in "garage door mode"
inGarageDoorMode = true;
// Record the timestamp of the last IR signal received
lastIRTime = currentMillis;
}
} else if (inGarageDoorMode) {
// We are in "garage door mode," ignore the signal for a brief period
if (currentMillis - lastIRTime > debounceTime) {
Serial.println("Garade Door Mode");
if (garage_door_open == false && IrReceiver.decodedIRData.decodedRawData == 0xE619FF00)
{
Serial.println("Garade Door Opening");
digitalWrite(ledPin1, HIGH);
NewTone(buzzerPin, 466, 8000);
delay(1000);
digitalWrite(ledPin2, HIGH);
delay(1000);
digitalWrite(ledPin3, HIGH);
delay(1000);
digitalWrite(ledPin4, HIGH);
delay(1000);
digitalWrite(ledPin5, HIGH);
delay(1000);
digitalWrite(ledPin6, HIGH);
delay(1000);
digitalWrite(ledPin7, HIGH);
delay(1000);
digitalWrite(ledPin8, HIGH);
delay(1000);
garage_door_open = true;
}
else if (garage_door_open == true && IrReceiver.decodedIRData.decodedRawData == 0xE619FF00)
{
Serial.println("Garade Door Closing");
digitalWrite(ledPin8, LOW);
NewTone(buzzerPin, 156, 8000);
delay(1000);
digitalWrite(ledPin7, LOW);
delay(1000);
digitalWrite(ledPin6, LOW);
delay(1000);
digitalWrite(ledPin5, LOW);
delay(1000);
digitalWrite(ledPin4, LOW);
delay(1000);
digitalWrite(ledPin3, LOW);
delay(1000);
digitalWrite(ledPin2, LOW);
delay(1000);
digitalWrite(ledPin1, LOW);
delay(1000);
garage_door_open = false;
}
// Define a condition to exit "garage door mode" and set inGarageDoorMode = false;
// Example: If a certain button is pressed, exit "garage door mode"
if (IrReceiver.decodedIRData.decodedRawData == 0xB847FF00) {
Serial.println(" CH+ ");
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, LOW);
digitalWrite(ledPin3, LOW);
digitalWrite(ledPin3, LOW);
digitalWrite(ledPin4, LOW);
digitalWrite(ledPin5, LOW);
digitalWrite(ledPin6, LOW);
digitalWrite(ledPin7, LOW);
digitalWrite(ledPin8, LOW);
inGarageDoorMode = false;
}
// Record the timestamp of the last IR signal received
lastIRTime = currentMillis;
}
}
else if (IrReceiver.decodedIRData.decodedRawData == 0xA15EFF00) {
// Received the garage door signal, enter "garage door mode"
Serial.println("Light Mode");
incrementLights();
// Add garage door opener logic here
// Set the state variable to indicate we are in "garage door mode"
incrementMode = true;
// Record the timestamp of the last IR signal received
lastIRTime = currentMillis;
}
IrReceiver.resume(); // receive the next value
}
// Handle "pianomode" actions here
if (inPianoMode) {
switch(IrReceiver.decodedIRData.decodedRawData)
{
case 0xBA45FF00:
Serial.println(" CH- ");
break;
case 0xB946FF00:
Serial.println(" CH ");
break;
case 0xB847FF00:
Serial.println(" CH+ ");
break;
case 0xBB44FF00:
Serial.println(" PREV ");
break;
case 0xBF40FF00:
Serial.println(" NEXT ");
break;
case 0xBC43FF00:
Serial.println(" PLAY/PAUSE ");
break;
case 0xF807FF00:
Serial.println(" VOL- ");
break;
case 0xEA15FF00:
Serial.println(" VOL+ ");
break;
case 0xF609FF00:
Serial.println(" EQ ");
break;
case 0xE916FF00:
Serial.println(" 0 ");
NewTone(buzzerPin,1047,tonedelay);
digitalWrite(ledPin1, HIGH);
delay(tonedelay);
digitalWrite(ledPin1, LOW);
break;
case 0xE619FF00:
Serial.println(" 100+ ");
NewTone(buzzerPin,1109,tonedelay);
digitalWrite(ledPin1, HIGH);
digitalWrite(ledPin2, HIGH);
delay(tonedelay);
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, LOW);
break;
case 0xF20DFF00:
Serial.println(" 200+ ");
NewTone(buzzerPin,1175,tonedelay);
digitalWrite(ledPin2, HIGH);
delay(tonedelay);
digitalWrite(ledPin2, LOW);
break;
case 0xF30CFF00:
Serial.println(" 1 ");
NewTone(buzzerPin,1245,tonedelay);
digitalWrite(ledPin2, HIGH);
digitalWrite(ledPin3, HIGH);
delay(tonedelay);
digitalWrite(ledPin2, LOW);
digitalWrite(ledPin3, LOW);
break;
case 0xE718FF00:
Serial.println(" 2 ");
NewTone(buzzerPin,1319,tonedelay);
digitalWrite(ledPin3, HIGH);
delay(tonedelay);
digitalWrite(ledPin3, LOW);
break;
case 0xA15EFF00:
Serial.println(" 3 ");
NewTone(buzzerPin,1397,tonedelay);
digitalWrite(ledPin4, HIGH);
delay(tonedelay);
digitalWrite(ledPin4, LOW);
break;
case 0xF708FF00:
Serial.println(" 4 ");
NewTone(buzzerPin,1480,tonedelay);
digitalWrite(ledPin4, HIGH);
digitalWrite(ledPin5, HIGH);
delay(tonedelay);
digitalWrite(ledPin4, LOW);
digitalWrite(ledPin5, LOW);
break;
case 0xE31CFF00:
Serial.println(" 5 ");
NewTone(buzzerPin,1568,tonedelay);
digitalWrite(ledPin5, HIGH);
delay(tonedelay);
digitalWrite(ledPin5, LOW);
break;
case 0xA55AFF00:
Serial.println(" 6 ");
NewTone(buzzerPin,1661,tonedelay);
digitalWrite(ledPin5, HIGH);
digitalWrite(ledPin6, HIGH);
delay(tonedelay);
digitalWrite(ledPin5, LOW);
digitalWrite(ledPin6, LOW);
break;
case 0xBD42FF00:
Serial.println(" 7 ");
NewTone(buzzerPin,1760,tonedelay);
digitalWrite(ledPin6, HIGH);
delay(tonedelay);
digitalWrite(ledPin6, LOW);
break;
case 0xAD52FF00:
Serial.println(" 8 ");
NewTone(buzzerPin,1865,tonedelay);
digitalWrite(ledPin6, HIGH);
digitalWrite(ledPin7, HIGH);
delay(tonedelay);
digitalWrite(ledPin6, LOW);
digitalWrite(ledPin7, LOW);
break;
case 0xB54AFF00:
Serial.println(" 9 ");
NewTone(buzzerPin,1976,tonedelay);
digitalWrite(ledPin7, HIGH);
delay(tonedelay);
digitalWrite(ledPin7, LOW);
break;
default:
Serial.println("other button ");
}
delay(500);
// Define a condition to exit "pianomode" and set inPianoMode = false;
// Example: If a certain button is pressed, exit "pianomode"
if (IrReceiver.decodedIRData.decodedRawData == 0xB847FF00) {
inPianoMode = false;
}
}
}/* --(end main loop )-- */
void pianomode()
{
}
void garageDoorMode()
{
}
void incrementLights()
{
incrementMode = true;
decrementMode = false;
currentLight = 1;
}
void decrementLights()
{
decrementMode = true;
incrementMode = false;
currentLight = 8;
}