README
[svn42.git] / rf433ctl / rf433ctl.pde
index 543bb1f..68d9f08 100644 (file)
@@ -48,6 +48,7 @@ const char YAMAHA_VCR =0xF0; //Input VCR
 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;
@@ -79,17 +80,6 @@ const char YAMAHA_EFFECT5 =0x91; //Effect Toggle 70mm Sci-Fi / 70mm Spectacle
 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 {
@@ -255,8 +245,8 @@ ISR(TIMER1_COMPA_vect)
 
 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);
@@ -264,7 +254,7 @@ void send_frame(const word_t w)
       }
   word_cnt = 0;
   frame_finished = 0;
-  init_word(w);      
+  init_word(w);
 }
 
 void check_frame_done()
@@ -273,6 +263,7 @@ void check_frame_done()
   {
     Serial.println("Ok");
     frame_finished=1;
+    delay(120);
   }
 }
 
@@ -391,6 +382,31 @@ void flash_led(unsigned int times, unsigned int brightness_divisor, unsigned int
 
 //********************************************************************//
 
+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);
@@ -539,29 +555,31 @@ void loop()
     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");
   }