Good day all,
Newbie here
I have been enjoying PieterP's Control Surface library. It really is fantastic and very powerful, thank you for your hard work on it!!
I have a question regarding it and wonder if anybody can help me?
I have an IR remote which I linked to my Arduino with an IR receiver module. Currently my script receives the signal from remote, decodes it and outputs which button was pressed to the serial monitor.
I want to turn each button into a "CCButtonLatched" (from the library), AKA a MIDI toggle button, however the constructor needs a digital pin to be specified as per the documentation at Control Surface: CCButtonLatched Class Reference.
This is the part where I am confused, becuse the digital pin will be same for all of the buttons on the IR remote, but I want each button to send a different midi CC message. So determining the MIDI CC message by what value has been returned on the digital pin, rather than whether the pin is just 'on'.
I am using an Arduino UNO by the way. It's the 32 rather than the 16, so I think the library can support it without custom firmware - is this correct?
(I do have a Arduino Leonoardo also but already using it with a previous Control Surface project )
Here is my code so far:
Code: [Select]
#include "IRremote.h"
#include <Control_Surface.h>
int receiver = 11; // Signal Pin of IR receiver to Arduino Digital Pin 11
/-----( Declare objects )-----/
IRrecv irrecv(receiver); // create instance of 'irrecv'
decode_results results; // create instance of 'decode_results'
/* MIDI DEVICE */
USBMIDI_Interface midi;
/*
*
/
/ NEED TO SET UP THE TOGGLES HERE I THINK?
/*
*
*/
/-----( Function )-----/
void translateIR() // takes action based on IR code received
// describing Remote IR codes
{
switch(results.value)
{
case 0xFFA25D: Serial.println("POWER"); break;
case 0xFFE21D: Serial.println("FUNC/STOP"); break;
case 0xFF629D: Serial.println("VOL+"); break;
case 0xFF22DD: Serial.println("FAST BACK"); break;
case 0xFF02FD: Serial.println("PAUSE"); break;
case 0xFFC23D: Serial.println("FAST FORWARD"); break;
case 0xFFE01F: Serial.println("DOWN"); break;
case 0xFFA857: Serial.println("VOL-"); break;
case 0xFF906F: Serial.println("UP"); break;
case 0xFF9867: Serial.println("EQ"); break;
case 0xFFB04F: Serial.println("ST/REPT"); break;
case 0xFF6897: Serial.println("0"); break;
case 0xFF30CF: Serial.println("1"); break;
case 0xFF18E7: Serial.println("2"); break;
case 0xFF7A85: Serial.println("3"); break;
case 0xFF10EF: Serial.println("4"); break;
case 0xFF38C7: Serial.println("5"); break;
case 0xFF5AA5: Serial.println("6"); break;
case 0xFF42BD: Serial.println("7"); break;
case 0xFF4AB5: Serial.println("8"); break;
case 0xFF52AD: Serial.println("9"); break;
case 0xFFFFFFFF: Serial.println(" REPEAT");break;
default:
Serial.println(" other button ");
}// End Case
delay(500); // Do not get immediate repeat
} //END translateIR
void setup() /----( SETUP: RUNS ONCE )----/
{
Serial.begin(9600);
Serial.println("IR Receiver Button Decode");
irrecv.enableIRIn(); // Start the receiver
/SETUP CONTROL SURFACE /
Control_Surface.begin();
}/--(end setup )---/
void loop() /----( LOOP: RUNS CONSTANTLY )----/
{
/CONTROL SURFACE LOOP/
Control_Surface.loop();
/CONTINUE WITH IR SCRIPT/
if (irrecv.decode(&results)) // have we received an IR signal?
{
translateIR();
irrecv.resume(); // receive the next value
}
}/* --(end main loop )-- */
If anybody with experience of Control Surface Library has a spare moment to guide me on this, I would really appreciate it.
Many thanks & kind regards,
Josh