433Mhz Transistor PWM Control issue

I've made a simple little setup with an Arduino Nano, 433 MHz receiver, TIP120 transistor and a 12V LED strip.

Simple bit of code, when the arduino receives certain codes over 433 it changes the brightness of the LED strip.

My issue is that once the PWM value is set it fails to receive anymore 433 signals unless I remove the common ground wire from the transistor.

There's some exceptions - when I use analogWrite and set the value to 0 or 255 it still receives 433 signals. Using SoftPWM it only receives when it is set to 0.

Photo of the circuit attached.

Anyone have any ideas why this is happening? And how to fix it?

Current sketch using SoftPWM

#include "RCSwitch.h"
#include <stdlib.h>
#include <stdio.h>
#include <SoftPWM.h>

RCSwitch mySwitch = RCSwitch();

 
void setup() {
  Serial.begin(9600);
  mySwitch.enableReceive(1);  // Receiver on inerrupt 0 that is pin #2
  SoftPWMBegin();
  SoftPWMSet(10, 0);
  
}
 
void loop() {
  if (mySwitch.available()) {
 
    int value = mySwitch.getReceivedValue();
 
    if (value == 0) {
      Serial.print("Unknown encoding");
    }
    else if (mySwitch.getReceivedValue() == 1601455){
     Serial.print("Received ");
     Serial.println( mySwitch.getReceivedValue() );
     SoftPWMSetPercent(10, 100);
    }
    else if (mySwitch.getReceivedValue() == 1601447){
     Serial.print("Received ");
     Serial.println( mySwitch.getReceivedValue() );
     SoftPWMSetPercent(10, 0);
    }
    else if (mySwitch.getReceivedValue() == 1601454){
     Serial.print("Received ");
     Serial.println( mySwitch.getReceivedValue() );
     SoftPWMSetPercent(10, 20);
    }
    else if (mySwitch.getReceivedValue() == 1601446){
     Serial.print("Received ");
     Serial.println( mySwitch.getReceivedValue() );
     SoftPWMSetPercent(10, 40);
    }
    else if (mySwitch.getReceivedValue() == 1601446){
     Serial.print("Received ");
     Serial.println( mySwitch.getReceivedValue() );
     SoftPWMSetPercent(10, 60);
    } 
    else if (mySwitch.getReceivedValue() == 1601445){
     Serial.print("Received ");
     Serial.println( mySwitch.getReceivedValue() );
     SoftPWMSetPercent(10, 80);
    }    
    else {
 
     Serial.print("Received ");
      Serial.print( mySwitch.getReceivedValue() );
      Serial.print(" / ");
      Serial.print( mySwitch.getReceivedBitlength() );
      Serial.print("bit ");
      Serial.print("Protocol: ");
      Serial.println( mySwitch.getReceivedProtocol() );
    }
 
    mySwitch.resetAvailable();
 
  }
}

Can you try different PWM outputs? Maybe there is a conflict with PWM timer and whatever RCswitch is using.
What is SoftPWM?

I've gone back to analogWrite and tried all PWM pins (3, 5, 6, 9, 10, and 11) with the same behaviour.

SoftPWM is just a library to give access to more PWM output through software (I don't really need to use it but tried it as an alternative)

Current analogWrite code:

#include "RCSwitch.h"
#include <stdlib.h>
#include <stdio.h>
RCSwitch mySwitch = RCSwitch();

int led = 3;
 
void setup() {
  Serial.begin(9600);
  mySwitch.enableReceive(0);  // Receiver on inerrupt 0 that is pin #2
  pinMode(led, OUTPUT);
}
 
void loop() {
  if (mySwitch.available()) {
 
    int value = mySwitch.getReceivedValue();
 
    if (value == 0) {
      Serial.print("Unknown encoding");
    }
    else if (mySwitch.getReceivedValue() == 1601455){
     Serial.print("Received ");
     Serial.println( mySwitch.getReceivedValue() );
     analogWrite(led, 255);
    }
    else if (mySwitch.getReceivedValue() == 1601447){
     Serial.print("Received ");
     Serial.println( mySwitch.getReceivedValue() );
     analogWrite(led, 0);
    }
    else if (mySwitch.getReceivedValue() == 1601454){
     Serial.print("Received ");
     Serial.println( mySwitch.getReceivedValue() );
     analogWrite(led, 51);
    }
    else if (mySwitch.getReceivedValue() == 1601446){
     Serial.print("Received ");
     Serial.println( mySwitch.getReceivedValue() );
     analogWrite(led, 102);
    }
    else if (mySwitch.getReceivedValue() == 1601453){
     Serial.print("Received ");
     Serial.println( mySwitch.getReceivedValue() );
     analogWrite(led, 153);
    } 
    else if (mySwitch.getReceivedValue() == 1601445){
     Serial.print("Received ");
     Serial.println( mySwitch.getReceivedValue() );
     analogWrite(led, 204);
    }    
    else {
 
     Serial.print("Received ");
      Serial.print( mySwitch.getReceivedValue() );
      Serial.print(" / ");
      Serial.print( mySwitch.getReceivedBitlength() );
      Serial.print("bit ");
      Serial.print("Protocol: ");
      Serial.println( mySwitch.getReceivedProtocol() );
    }
 
    mySwitch.resetAvailable();
 
  }
}

I've tried a few more things and noticed a few things.

Using just a single LED rather than Transistor/12V system still has the same results.

The 433 transmitter is in another room, I've found if I use a 433 remote right next to the Arduino the codes are received when the PWM level is set....BUT.... it isn't consistent, as if there is some interference, it doesn't receive every code like when PWM is set to 0 or 255.

Again, if I unplug the ground wire the codes are received 100% consistently.

It's as if the PWM is causing interference across the circuit.

Progress.

If I power directly from the 12V input into VIN everything works great. If I power using the USB port that's when things go funny.

Very odd, but at least I know it'll work when it's running only off the 12V power.