Radio Shack Make:It Robot Remote Control

I got one of these a few years ago and it sat in the drawer until I had a project for it. It uses its own IR codes so I had to figure out how to capture those and use them in a sketch. It's a fun little control and sturdy, and since it uses real buttons instead of membrane buttons, it is a bit easier to use. These are still available at Radio Shack's website and there are usually ebay listings for them.

Radio Shack Make:It Remote Control

Here's an adaptation of an old Tronix tutorial which shows the button you pressed on an LCD.

// 12/1/21: Got the Tronix tutorial from the Wayback Machine:
// https://web.archive.org/web/20160601165103/http://tronixstuff.com/2011/03/30/tutorial-arduino-and-infra-red-control/

// Tronix tutorial was originally here but has changed their website:
// example 32.2 - IR receiver code translator
// for IR codes (ignores 2nd and 3rd signal repeat)
// http://tronixstuff.com/tutorials > chapter 32
// based on code by Ken Shirriff - http://arcfn.com

// 12/1/21: Updated to current IR Remote driver, Liquid Crystal LCD driver commands, changed cases to match Radio Shack remote.
// Got button combos for remote from:
// http://www.righto.com/2010/01/using-arbitrary-remotes-with-arduino.html
// WORKING WITH RADIO SHACK REMOTE!  Phew.

// The Radio Shack Make:It remote uses its own codes, so you need to capture those and list
// them in the state machine.  To do this for any unknown remote:
// Run ReceiveDemo.ino (in Examples folder for IRremote) and record the hash values for each button.
// Then see line 59 for use of IrReceiver.decodedIRData.decodedRawData in the switch case statement.
// There are other Examples that will also show the hash codes.

// Wiring: IR receiver to 5V, GND, D2.  LCD to 5V, GND, SDA (A4), SCL (A5).

#include <Wire.h> // for I2C bus

#include <LiquidCrystal_I2C.h> // for I2C bus LCD module
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // set the LCD address - using 20x4 LCD

#include <IRremote.hpp> // use the library for IR
int receiver = 2; // pin of IR receiver to Arduino digital pin

void setup()
{
  lcd.begin(20, 4);
  lcd.backlight();
  lcd.print("Radio Shack remote");
  delay(1500);
  lcd.clear();

  IrReceiver.begin(receiver, ENABLE_LED_FEEDBACK, USE_DEFAULT_FEEDBACK_LED_PIN); // Start the receiver
}


void loop()
{
  if (IrReceiver.decode()) // have we received an IR signal?
  {
    translateIR();

    for (int z = 0; z < 2; z++) // ignore 2nd and 3rd signal repeat
    {
      IrReceiver.resume(); // receive the next value
    }
  }
}


void translateIR() // takes action based on IR code received
{
  switch (IrReceiver.decodedIRData.decodedRawData)  // Uses .decodedRawData to interpret hash values
  {
    case 0x962814CA:  lcd.print("Up"); break;
    case 0x5990708A:  lcd.print("Down"); break;
    case 0xB2CC429A:  lcd.print("Left"); break;
    case 0xB012615A:  lcd.print("Right"); break;
    case 0x8D2A4BAF:  lcd.print("Forward"); break;
    case 0x1C22DE05:  lcd.print("Reverse"); break;
    case 0x7A6E10BA:  lcd.print("Alt 1"); break;
    case 0x97123E8A:  lcd.print("Alt 2"); break;

    // These aren't as easy to trigger but could be useful
    case 0x23D3B043:  lcd.print("forward left - 2+5"); break;
    case 0x8D0FEBAB:  lcd.print("forward right - 4+5"); break;
    case 0xB2CC4299:  lcd.print("reverse left - 2+6"); break;
    case 0xB0126159:  lcd.print("reverse right - 4+6"); break;
    case 0x72F8273:   lcd.print("forward up - 5+1"); break;
    case 0xCA97DE33:  lcd.print("forward down - 5+3"); break;
    case 0x962814C9:  lcd.print("reverse up - 6+1"); break;
    case 0x59907089:  lcd.print("reverse down - 6+3"); break;

    default: lcd.print("Other button");  // Some buttons trigger this - bad reads?  Who knows.
  }
  delay(750);
  lcd.clear();
}