Copyright Kill Switch

This is some code that will help prevent most people from cloning your device and making money of something you spent time developing

See the code in action on Tinkercad

/*
  Copyright() is an anti-piracy kill switch
  Referrence http://ww1.microchip.com/downloads/en/DeviceDoc/40001906A.pdf 
  Page 322 Table 31-5. Signature Row Addressing
  This demo 
  serialLength = 8 will be an Authentic Controller
  serialLength = 9 will be a Pirated Controller (the last value of antiPiracyKey[] is off by 1)
*/

//LCD Start
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
//LCD End

//Used to enable the protection or not.
#define antiPiracy

#ifdef antiPiracy
  //Configurable settings
  const uint8_t serialLength = 8; //Set the length of Serial number you wish to match
  uint8_t antiPiracyKey[] = {0xB3, 0x00, 0x0C, 0x94, 0xB3, 0x00, 0x94, 0xB3, 0x01}; //Change this with the output of Serial Monitor
  //Static requirements for antiPiracy module
  #define SIGRD 5
  #include <avr/boot.h>
  //This is your unique serial number
  uint16_t serNumAddr[] = {0x000E, 0x000F, 0x0010, 0x0011, 0x0012, 0x0013, 0x0015, 0x0016, 0x0017}; //Z pointer addresses
  uint8_t uniqueID[serialLength];
  bool authentic = false;
#endif

//This is used to reset the device, creating an endless loop
void(* resetFunc) (void) = 0;

void setup() {
  //LCD Start
  lcd.begin(16, 2);
  lcd.setCursor(0,0);
  //LCD End
  
  // Print a message to the LCD.
  #ifdef antiPiracy 
    Serial.begin(9600);
    delay(100); 
    copyRight();
    if (authentic == false) {
      lcd.print(F("Pirated!"));
      delay(10*1000);
      lcd.clear();
      resetFunc();
    }
  else {
      lcd.print(F("Authentic"));
      delay(5*1000);
      lcd.clear();
  }
  #endif
  
  #ifndef antiPiracy
    lcd.print(F("Hello World"));
    Serial.println(F("Hello World"));
  #endif
}

void loop() {
  //YOUR CODE GOES HERE!!!
  lcd.print(F("Code Continues"));
  Serial.println(F("Code Continues"));
  delay(60 *100);
  lcd.clear();
}

#ifdef antiPiracy
  void copyRight() {
    for (int i = 0;  i < serialLength; i++) {
        uniqueID[i] = boot_signature_byte_get(serNumAddr[i]);
        if( uniqueID[i] != antiPiracyKey[i] ) {
            authentic = false;
            Serial.println(F("Pirated Controller!"));
            for (int i = 0; i < serialLength; i++) {
                uniqueID[i] = boot_signature_byte_get(serNumAddr[i]);
                Serial.print("0x");
                if (uniqueID[i] < 16) {
                    Serial.write('0');
                }
                Serial.print(uniqueID[i], HEX);
                if (i < serialLength - 1) {
                    Serial.print(", ");
                }  
                else {
                    Serial.println();
                } 
            }
          break;
        }
        else {
            authentic = true;
        }  
    } 
  memset(uniqueID,0,sizeof(uniqueID));
  if (authentic == true) {
    Serial.println(F("Authentic Controller"));
  }   
}
#endif