• 1
    Step 1

    You will need:

    1 NES console

    1 RGB LED, should be 5mm

    1 Attiny85, I used the digispark board

    3 1 ft wires, different colors.

    If you need to, follow a guide on how to disassemble and reassemble a NES.

    On the top right of the bottom of the motherboard, you will find a Ground plane,

    and 5 pins, the center one should be 5 volts, verify this with a volt meter.

    Solder a Red(preferably) wire to the 5V pin, solder a Black(preferably)

    wire to a nub on the GND plane.

    Locate pin 8 of the 74HCU04 IC, it should be connected to a 220 Ohm resistor,

    which is connected to the front status LED. Solder a wire(preferably not Red or Black)

    to pin 8.

    (Note) Pre-program your MCU before you solder to it. You can find the code in step 2.

    Solder the Red and Black wires to the MCU's power and ground, the other wire

    to an input of the MCU. Solder a RGB LED to the MCU, use appropriate resistors.

    De-solder the original RED, I used needle nose pliers to semi twist the LED

    legs away from the PCB as I heated the solder.

    Now insert the RGB LED into the light pipe.

    I didn't need to secure the MCU inside the NES, as the LED + MCU was a perfect fit.

    Depending on what MCU you use, you may need to hot glue your MCU, the LED should stay in the light pipe, a little hot glue on the back wont hurt.

    Now you should be ready to test your system.

    Power on with a game, and you should see a RGB color cycle pattern.

    Power on without a game, and you should see the LED blink at a 1hz rate.

    Put the system back together and have fun.

  • 2
    Step 2

    #include <DigisparkRGB.h>

    byte RED = 0;

    byte BLUE = 2;

    byte GREEN = 1;

    byte COLORS[] = {RED, BLUE, GREEN};

    int RV = 255;

    int GV = 0;

    int BV = 0;

    int CV = 1;

    int NES_ERROR_MODE = 0;

    void setup() {

    DigisparkRGBBegin();

    pinMode(5, INPUT);

    }

    void loop () {

    if (digitalRead(5) == 0) {

    NES_ERROR_MODE = 0;

    }

    else {

    NES_ERROR_MODE = 1;

    }

    switch (CV) {

    case 0x00:

    RV++;

    if (RV>=255) {

    RV = 255;

    CV = 1;

    }

    break;

    case 0x01:

    GV++;

    if (GV>=255) {

    GV = 255;

    CV = 2;

    }

    break;

    case 0x02:

    RV--;

    if (RV<= 0) {

    RV = 0;

    CV = 3;

    }

    break;

    case 0x03:

    BV++;

    if (BV>=255) {

    BV = 255;

    CV = 4;

    }

    break;

    case 0x04:

    GV--;

    if (GV<= 0) {

    GV = 0;

    CV = 5;

    }

    break;

    case 0x05:

    RV++;

    if (RV>=255) {

    RV = 255;

    CV = 6;

    }

    break;

    case 0x06:

    GV++;

    if (GV>=255) {

    GV = 255;

    CV = 7;

    }

    break;

    case 0x07:

    GV--;

    BV--;

    if (GV<= 0) {

    GV = 0;

    BV = 0;

    CV = 1;

    }

    break;

    }

    if (NES_ERROR_MODE == 0) {

    DigisparkRGB(0, RV);

    DigisparkRGB(1, GV);

    DigisparkRGB(2, BV);

    }

    else {

    DigisparkRGB(0, 0);

    DigisparkRGB(1, 0);

    DigisparkRGB(2, 0);

    }

    DigisparkRGBDelay( 16);

    }