const char YAMAHA_EXT51DEC =0xE1; //Input Ext. Decoder On/Off
const char YAMAHA_TUNER_PLUS =0x08; //Tuner Next Station 1-7 (of A1 - E7)
+const char YAMAHA_TUNER_MINUS =0x88; //Tuner Prev Station 1-7 (of A1 - E7)
const char YAMAHA_TUNER_ABCDE =0x48; //Tuner Next Station Row A-E (of A1 - E7)
const char YAMAHA_MUTE =0x38;
const char YAMAHA_EFFECT6 =0x51; //Effect Toggle 70mm General / 70mm Adventure
const char YAMAHA_P5 =0xFB; //P5 PRT (1 Main Bypass)? (1587674115)
-
-void send_yamaha_ir_signal(char codebyte)
-{
- unsigned long int code = codebyte & 0xFF;
- code <<= 8;
- code |= (0xff ^ codebyte) & 0xFF;
- code |= YAMAHA_CODE_BASE;
- irsend.sendNEC(code,YAMAHA_CODE_BITS);
- Serial.println("Ok");
-}
-
//********************************************************************//
typedef struct {
void send_frame(const word_t w)
{
- if (frame_finished == 0)
- for(;;)
+ if (frame_finished != 1)
+ for(;;) //wait until sending of previous frame finishes
if (frame_finished)
{
delay(150);
}
word_cnt = 0;
frame_finished = 0;
- init_word(w);
+ init_word(w);
}
void check_frame_done()
{
Serial.println("Ok");
frame_finished=1;
+ delay(120);
}
}
//********************************************************************//
+void send_yamaha_ir_signal(char codebyte)
+{
+ unsigned long int code = codebyte & 0xFF;
+ code <<= 8;
+ code |= (0xff ^ codebyte) & 0xFF;
+ code |= YAMAHA_CODE_BASE;
+
+ //irsend changes PWM Timer Frequency among other things
+ //.. doesn't go well with PWM output using the same timer
+ //.. thus we just set output to 255 so whatever frequency is used, led is off for the duration
+ unsigned int flash_prev_selected = flash_led_selected_; //save prev. selected leds
+ flash_led_selected_ &= !(1 << BLUELED_PWM_PIN); //prevent calculate_led_level() from setting blueled
+ analogWrite(BLUELED_PWM_PIN,255); // switch led off
+
+ irsend.sendNEC(code,YAMAHA_CODE_BITS);
+
+ analogWrite(BLUELED_PWM_PIN,255); // switch off led again to be sure
+ flash_led_selected_ = flash_prev_selected; //restore led settings for calculate_led_level()
+ //is actually not necessary, since we are not multitasking/using interrupts, but just to be sure in case this might change
+
+ Serial.println("Ok");
+}
+
+//********************************************************************//
+
void setup()
{
pinMode(RF_DATA_OUT_PIN, OUTPUT);
else if (command == '8')
send_yamaha_ir_signal(YAMAHA_MENU);
else if (command == '+')
- send_yamaha_ir_signal(YAMAHA_PLUS);
+ send_yamaha_ir_signal(YAMAHA_PLUS);
else if (command == '-')
- send_yamaha_ir_signal(YAMAHA_MINUS);
- else if (command == '§')
- send_yamaha_ir_signal(YAMAHA_TEST);
+ send_yamaha_ir_signal(YAMAHA_MINUS);
+ else if (command == 0xa7) // §
+ send_yamaha_ir_signal(YAMAHA_TEST);
else if (command == '$')
- send_yamaha_ir_signal(YAMAHA_TIME_LEVEL);
+ send_yamaha_ir_signal(YAMAHA_TIME_LEVEL);
else if (command == '%')
- send_yamaha_ir_signal(YAMAHA_EFFECT_TOGGLE);
+ send_yamaha_ir_signal(YAMAHA_EFFECT_TOGGLE);
else if (command == '&')
- send_yamaha_ir_signal(YAMAHA_PRG_DOWN);
+ send_yamaha_ir_signal(YAMAHA_PRG_DOWN);
else if (command == '/')
- send_yamaha_ir_signal(YAMAHA_PRG_UP);
+ send_yamaha_ir_signal(YAMAHA_PRG_UP);
else if (command == '(')
- send_yamaha_ir_signal(YAMAHA_TUNER_PLUS);
+ send_yamaha_ir_signal(YAMAHA_TUNER_PLUS);
+ else if (command == '[')
+ send_yamaha_ir_signal(YAMAHA_TUNER_MINUS);
else if (command == ')')
- send_yamaha_ir_signal(YAMAHA_TUNER_ABCDE);
+ send_yamaha_ir_signal(YAMAHA_TUNER_ABCDE);
else if (command == '9')
- send_yamaha_ir_signal(YAMAHA_TAPE);
+ send_yamaha_ir_signal(YAMAHA_TAPE);
else if (command == '?')
- send_yamaha_ir_signal(YAMAHA_VCR);
+ send_yamaha_ir_signal(YAMAHA_VCR);
else if (command == '=')
- send_yamaha_ir_signal(YAMAHA_EXT51DEC);
+ send_yamaha_ir_signal(YAMAHA_EXT51DEC);
else
Serial.println("Error: unknown command");
}