No inicia mi sketch en arduino mega 2560 con alimentacion externa

Buenas tardes espero me puedan ayudar con mi problema, mi sketch no inicia con la entrada alimentacion de energia de 12 V, tiene que estar conectado el cable usb a la computadora, cuando lo desconecto deja de funcionar el sketch como si se desconfigurará; lo conecto y vuelve a funcionar no se que estará mal en mi tarjeta.

Tengo conectada una tarjeta Mega a una tarjeta shield W5100 con 4 relevadores y con un modulo de tiempo DS3231, pero cuando le conecto la energia de 12 voltios a tu entrada de energia no inicia el sketch, tiene que estar conectada a la computadora para que funcione que se tiene que hacer para que inicie ese SKETCH..

A continuacion detallo el codigo:

// unicarlos.dyndns.org:80  (ip de mi router que se actualiza automaticamente)
// y funciona con la configuracion del router de abrir puerto e ip 
// y se puedan encender y apagar leds (Pines digitales del 2 al 9).
// Pines 10,11,12 y 13 los usa para comunicarse con la ethernet

#include <SPI.h>
#include <WString.h>
#include <Ethernet.h>
#include <Wire.h>
#include "RTClib.h"  
RTC_DS1307 RTC;

byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFF, 0xEE}; // direccion MAC de tu Ethernet
byte ip[] = {10, 0, 0, 55};  // ip que le pones dentro de tu red como fija y configurada en tu router
EthernetServer server(80);  //  88 puerto por el accedemos al servidor. Normalmente seria la 80

int dig[] =  {2,3,4,5,6,7,8,9}; // pines digitales a usar. No uso 0 y 1 que son de transmisin serie
                                // Tampoco uso el 10,11,12 y 13 ya que los uso para la ethernet
int digTotal = 8;  // Numero de pines a usar
int vdig[] = {0,0,0,0,0,0,0,0}; // valores iniciales (Tantos como pines usemos)
int pin;
int nivel;
String cad = String(100);

void setup()
{
  Ethernet.begin(mac, ip); // inicio la Ethernet
  server.begin();          // inicio el servidor
  Serial.begin(9600);      // inicio el serial monitor
  for (int i=0; i < digTotal; i++)
  {
    pinMode(dig[i], OUTPUT);   // inicializo los pines digitales como salida
    digitalWrite(dig[i],vdig[i]);  // los pongo a nivel bajo LOW=0
  }

 Wire.begin();
  RTC.begin();
  if (! RTC.isrunning()) {
    Serial.println("RTC is NOT running");
  }
  
  // En esta sección se agarra a la fecha y hora actual y lo compara con esto
  // el tiempo de compilación . Si es necesario, el RTC se actualiza.
  DateTime now = RTC.now();
  DateTime compiled = DateTime(__DATE__, __TIME__);
  if (now.unixtime() < compiled.unixtime()) {
    Serial.println("RTC is older than compile time! Updating");
    RTC.adjust(DateTime(__DATE__, __TIME__));
  }

}

void loop()
{
  
  // Obtener la hora actual
  DateTime now = RTC.now();   
 
  // Muestra la hora actual
  Serial.print("Hora Exacta: ");
  Serial.print(now.year(), DEC);
  Serial.print('/');
  Serial.print(now.month(), DEC);
  Serial.print('/');
  Serial.print(now.day(), DEC);
  Serial.print(' ');
  Serial.print(now.hour(), DEC);
  Serial.print(':');
  Serial.print(now.minute(), DEC);
  Serial.print(':');
  Serial.print(now.second(), DEC);
  Serial.println();
  delay(1000);
  
  cad = ""; // inicializo la cad donde almaceno los datos recibidos
  EthernetClient cliente = server.available();
  if (cliente)
  {
    while(cliente.connected())
    {
      if(cliente.available())
      {
        char c = cliente.read();
        cad = cad + c;
        Serial.print(c);

        if(c == '\n')
        {
          if (cad.lastIndexOf("dig") > -1) // si la variable cad contiene 'dig' hacer ...
          {
            pin = pinElegido(cad);
            int posicionPin;
            for (int i=0; i <digTotal; i++)
            {
              if (dig[i] == pin)
              {
                posicionPin = i;
                break;
              }
            }
            nivel = nivelElegido(cad);
            vdig[posicionPin] = nivel;
 
            Serial.print(pin);  // comprobamos que el pin elegido es el correcto
            Serial.println(" pin.   --  ");
            Serial.print(nivel); // comprobamos su nivel 0=LOW y 1=HIGH
            Serial.println(" nivel ");
            
            digitalWrite(pin, nivel);  // activamos o desactivamos el pin elegido
            
          }  // ... hasta aqui 'dig'
          
          if (cad.lastIndexOf("off") > -1)  // si la variable cad contiene 'apaga' ejecuta 
          {                                    // la funcion apagaTodos()
            apagaTodos();
            delay (60000); 
            enciendeTodos();
          }
           if (cad.lastIndexOf("off2") > -1)  // si la variable cad contiene 'apaga' ejecuta 
          {                               // la funcion apagaTodos()
            apagaTodos();
            delay (600000); 
            enciendeTodos();
          }
           if (cad.lastIndexOf("off3") > -1)  // si la variable cad contiene 'apaga' ejecuta 
          {                               // la funcion apagaTodos()
            apagaTodos();
            delay (1800000); 
            enciendeTodos();
          }
            if (cad.lastIndexOf("off4") > -1)  // si la variable cad contiene 'apaga' ejecuta 
          {                               // la funcion apagaTodos()
            apagaTodos();
            delay (3600000); 
            enciendeTodos();
          }
          if (cad.lastIndexOf("off5") > -1)  // si la variable cad contiene 'apaga' ejecuta 
          {                               // la funcion apagaTodos()
            apagaTodos();
            delay (10800000);
            enciendeTodos();
          }
          if (cad.lastIndexOf("on") > -1) // si cad contiene 'encender' ejecuta
          {                                     // la funcion enciendeTodos()
            enciendeTodos();
          }
          // Comienza la transmision de datos desde el servidor al cliente
          cliente.println("HTTP/1.1 200 OK");
          cliente.println("Content-Type: text/html");
          cliente.println();
          cliente.println("<html>");
          cliente.println("<head>");
          cliente.println("<title>CONTROL DEL CONTACTOS</title>");
          
          cliente.println();
          cliente.println("<h1>CONTACTOS YUCUTACHE</h1>");
          
          cliente.print("<P align=center><B>Fecha: </B>");
          cliente.print(now.day(), DEC);
          cliente.print('/');
          cliente.print(now.month(), DEC);
          cliente.print('/');
          cliente.print(now.year(), DEC);
          cliente.print(' ');
          cliente.print("<B> - Hora Exacta: </B>");
          cliente.print(now.hour(), DEC);
          cliente.print(':');
          cliente.print(now.minute(), DEC);
          cliente.print(':');
          cliente.print(now.second(), DEC);
          cliente.println();
          cliente.println("<h1>  </h1>");
          
          for (int i=0; i < digTotal; i++)
          {
              cliente.print("<font color='#191970'><B>Contacto con Pin <B>");
              cliente.print(dig[i]);
              cliente.print(" ");
    
              if (vdig[i]==1)
              {
                cliente.println("<font color='red'><B>Apagado<B></font>");
                cliente.print("<form method=get><input type=hidden name=dig");
                cliente.print(dig[i]);
                cliente.print(" value=0><input style='margin:auto;background-color: #42A41F;color: snow;padding: 12px;border: 1px solid #217304;width:80px;' type=submit value=Encender></form>"); 
              }
              if (vdig[i]==0)
              {
                cliente.println("<font color='green'><B>Encendido<B></font>");
               // cliente.println("<td>");
                cliente.print("<form method=get>");
                cliente.print("<input type=hidden name=dig");
                cliente.print(dig[i]);
                cliente.print(" value=1>");
                cliente.print("<input type=submit style='margin:auto;background-color: #F91E1E;color: snow;padding: 12px;border: 1px solid #8D1E2D;width:80px;' value=Apagar>"); 
                cliente.print("</form>");           
              }
          }   
          cliente.print("_          ");       
          cliente.print("<form method=get><input type=hidden name=on");
          cliente.println(" value=1><input type=submit style='margin:auto;background-color: #246505;color: snow;padding: 12px;border: 1px solid #217304;width:200px;' value=ENCENDER_TODOS></form>");
          cliente.print("_          ");
          cliente.print("<form method=get><input type=hidden name=off");
          cliente.println(" value=1><input type=submit style='margin:auto;background-color: #4FC319;color: snow;padding: 12px;border: 1px solid #000000;width:200px;' value=REINICIAR_1_MINUTO></form>");
          cliente.print("_          ");
          cliente.print("<form method=get><input type=hidden name=off2");
          cliente.println(" value=1><input type=submit style='margin:auto;background-color: #8DEE06;color: snow;padding: 12px;border: 1px solid #000000;width:200px;' value=REINCIAR_10_MINUTOS></form>");                      
          cliente.print("_          ");
          cliente.print("<form method=get><input type=hidden name=off3");
          cliente.println(" value=1><input type=submit style='margin:auto;background-color: #F8DE33;color: snow;padding: 12px;border: 1px solid #000000;width:200px;' value=REINCIAR_30_MINUTOS></form>");      
          cliente.print("_          ");
          cliente.print("<form method=get><input type=hidden name=off4");
          cliente.println(" value=1><input type=submit style='margin:auto;background-color: #EE9223;color: snow;padding: 12px;border: 1px solid #000000;width:200px;' value=REINCIAR_60_MINUTOS></form>");      
          cliente.print("_          ");
          cliente.print("<form method=get><input type=hidden name=off5");
          cliente.println(" value=1><input type=submit style='margin:auto;background-color: #FF1B01;color: snow;padding: 12px;border: 1px solid #000000;width:200px;' value=REINCIAR_3_HORAS></form>");      
          cliente.stop();
        }
      }
    }
  }
} 



//////////////  FUNCIONES /////////////////7
// Funcion: Extrae el pin del array cad (contiene la lectura de lo que el cliente devuelve)
int pinElegido(String cad)
{

    int pos_dig = cad.lastIndexOf("dig");
    int pos_igual = cad.lastIndexOf("=");
    char vpin1 = cad.charAt(pos_dig+3);
    char vpin2 = cad.charAt(pos_dig+4);
    if (vpin2 != '=')
    {
      vpin1 += vpin2;
    }
    
    int pinElegido = vpin1 - 48; //.toInt();
    return pinElegido;
}
// Funcion: Extrae en nivel de la cadena cad
int nivelElegido(String cad)
{
  int pos_igual =  cad.lastIndexOf("=");
  char v = cad.charAt(pos_igual+1) - 48;
  if (v == 0) return 0;
  if (v == 1) return 1;
}
// Funcion para apagar todos los leds al tiempo
void enciendeTodos()
{
  for (int i=0; i < digTotal; i ++)
  {
    vdig[i] = 0;
    digitalWrite(dig[i], vdig[i]);
  }
}
// Funcion para encender todos los leds al tiempo
void apagaTodos()
{
  for (int i=0; i < digTotal; i ++)
  {
    vdig[i] = 1;
    digitalWrite(dig[i], vdig[i]);
  }
}

Alguien me puede orientar, de antemano gracias

¿La polaridad es correcta?

Buen día te refieres al eliminador de la energía eléctrica de 12 V, se supone que si podría ser eso es pregunta

Básico. Plug de conector externo

nada mas que decir.
Además verifica que le entregas DC.
Multímetro y debes medir 7 a 12VDC nada de AC.o muy bajo