Serial on UNO

Hey guys,

I have a IR sketch that is used as a serial to IR converter so that I can create a web interface to create a ‘universal remote’, however it appears that my code isn’t 100% responsive to serial commands, and wondered if there is anything I have done incorrectly. Here is the code:

#include <IRremote.h>

IRsend irsend;
const int sspower = 0x40BF;
const int sssource = 0x807F;
const int ssvup = 0xE01F;
const int ssvdown = 0xD02F;
const int ssmute = 0xF00F;
/**
          Power                    0x40BF
          Source                   0x807F
          TV                       0xBE41
          DVD                      0x7E81
          STB                      0xFE01
          Cable                    0xDE21
          1                        0x20DF
          2                        0xA05F
          3                        0x609F
          4                        0x10EF
          5                        0x906F
          6                        0x50AF
          7                        0x30CF
          8                        0xB04F
          9                        0x708F
          Dashes                   0xC43B
          0                        0x8877
          Pre-CH                   0xC837
          TV/DTV                   0xC23D
          ChList                   0xD629
          D.Menu                   0x718E
          Record                   0x926D
          Rewind                   0xA25D
          Stop                     0x629D
          Play/Pause               0xE21D
          Forward                  0x12ED
          VolUp                    0xE01F
          VolDown                  0xD02F
          ChUp                     0x48B7
          ChDown                   0x08F7
          Mute                     0xF00F
          Menu                     0x58A7
          Exit                     0xB44B
          Up                       0x06F9
          Down                     0x8679
          Left                     0xA659
          Right                    0x46B9
          Enter/OK                 0x16E9
          Return                   0x1AE5
          Info                     0xF807
          AnyNet                   0xE916
          Red                      0x36C9
          Green                    0x28D7
          Yellow                   0xA857
          Blue                     0x6897
          Text/Mix                 0x34CB
          P.Size                   0x7C83
          P.Mode                   0x14EB
          PIP                      0x04FB
          Guide                    0xF20D
          Dual                     0x00FF
          Still                    0x42BD
          SubTitle                 0xA45B
          Power                    0x40BF
          **/
void setup()
{
  Serial.begin(9800);
  Serial.println("Running Program");
  pinMode(13,OUTPUT);
}

void loop() {
  int cmd = 0x0;
  while(1){
  if (cmd!=0x0){
    Serial.println("SENDING IR");
    for (int i = 0; i < 3; i++) {
      irsend.sendSamsung(cmd, 16,i);
      delay(40);
    }
    Serial.println("DONE.");
    cmd = 0x0;
  } else {
    cmd = 0x0;
    if(Serial.read()=='p'){
      cmd = sspower;
      Serial.println("POWER");
    }
    if(Serial.read()=='u'){
      cmd = ssvup;
      Serial.println("V UP");
    }
    if(Serial.read()=='d'){
      cmd = ssvdown;
      Serial.println("V DOWN");
    }
    if(Serial.read()=='m'){
      cmd = ssmute;
      Serial.println("MUTE");
    }
    if(Serial.read()=='s'){
      cmd = sssource;
      Serial.println("SOURCE");
    }
  }
  }
}

Any help would be greatly appreciated!

After re-reading my code I worked out what the issue was, as I was addressing Serial.read several times, it was re-addressing the serial port for the last byte! So i used a swtch case statement and it fixed it.

#include <IRremote.h>

IRsend irsend;
const int sspower = 0x40BF;
const int sssource = 0x807F;
const int ssvup = 0xE01F;
const int ssvdown = 0xD02F;
const int ssmute = 0xF00F;
/**
          Power                    0x40BF
          Source                   0x807F
          TV                       0xBE41
          DVD                      0x7E81
          STB                      0xFE01
          Cable                    0xDE21
          1                        0x20DF
          2                        0xA05F
          3                        0x609F
          4                        0x10EF
          5                        0x906F
          6                        0x50AF
          7                        0x30CF
          8                        0xB04F
          9                        0x708F
          Dashes                   0xC43B
          0                        0x8877
          Pre-CH                   0xC837
          TV/DTV                   0xC23D
          ChList                   0xD629
          D.Menu                   0x718E
          Record                   0x926D
          Rewind                   0xA25D
          Stop                     0x629D
          Play/Pause               0xE21D
          Forward                  0x12ED
          VolUp                    0xE01F
          VolDown                  0xD02F
          ChUp                     0x48B7
          ChDown                   0x08F7
          Mute                     0xF00F
          Menu                     0x58A7
          Exit                     0xB44B
          Up                       0x06F9
          Down                     0x8679
          Left                     0xA659
          Right                    0x46B9
          Enter/OK                 0x16E9
          Return                   0x1AE5
          Info                     0xF807
          AnyNet                   0xE916
          Red                      0x36C9
          Green                    0x28D7
          Yellow                   0xA857
          Blue                     0x6897
          Text/Mix                 0x34CB
          P.Size                   0x7C83
          P.Mode                   0x14EB
          PIP                      0x04FB
          Guide                    0xF20D
          Dual                     0x00FF
          Still                    0x42BD
          SubTitle                 0xA45B
          Power                    0x40BF
          **/
void setup()
{
  Serial.begin(9800);
  Serial.println("Running Program");
  pinMode(13,OUTPUT);
}

void loop() {
  int cmd = 0x0;
  while(1){
  if (cmd!=0x0){
    Serial.println("SENDING IR");
    for (int i = 0; i < 3; i++) {
      irsend.sendSamsung(cmd, 16,i);
      delay(40);
    }
    Serial.println("DONE.");
    cmd = 0x0;
  } else {
    cmd = 0x0;
    byte command = Serial.read();
    switch (command) {
      case 'p':
        cmd = sspower;
        Serial.println("POWER");
        break;
      case 'u':
        cmd = ssvup;
        Serial.println("V UP");
        break;
    case 'd':
      cmd = ssvdown;
      Serial.println("V DOWN");
      break;
    case 'm':
      cmd = ssmute;
      Serial.println("MUTE");
      break;
    case 's':
      cmd = sssource;
      Serial.println("SOURCE");
      break;
  }
  }
}
}

Thanks anyway! :slight_smile:

Why do you have an infinite loop inside an infinite loop()?