Controlling Servo with IR Controller

Hey guys, im currently working on a project which a IR Remote Control is responsible for controlling 2 servos(left servo and right servo). When “x” button is pressed the left one servo turns to pos 180, delay for some second and returns to pos 0. Same for the right servo. It seems simple but there is something wrong that both Servos keeps running indefinitely when its supposed to run once and stop. When a totally different button on IR it stops the servo. The left one is a SG90 Servo and the right is a MG90S Servo. Another question is i read that powering servos from Arduino isn’t a good idea because it cant supply the servos. Is it really necessary because i cant do a external power supply right now and using Arduino as supply is easier for me.

//+debounce
#include <LiquidCrystal_I2C.h>
#include "Wire.h"
#include <Servo.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <boarddefs.h>
#include <IRremote.h>
#include <IRremoteInt.h>
#include <ir_Lego_PF_BitStreamEncoder.h>
#include <DS3231.h>
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
float tempMin = 999;
float tempMax = 0;
DallasTemperature sensors(&oneWire);
DeviceAddress sensor1;
float T;
Time t;
DS3231  rtc(SDA, SCL);
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
Servo servo; 
Servo motorAux;
int RECV_PIN = 8; // Pino 8: controle iR 
IRrecv irrecv(RECV_PIN);
decode_results results;
float valorIR;
//create object to control an LCD.  
long previousLCDMillis = 0;    // for LCD screen update
long lcdInterval = 4000;
// screen to show 
int screen = 0;    
int screenMax = 1;
int porta_rele1 = 3; //luz Amarela
int porta_rele2 = 4; // luz Branca
bool screenChanged = true;   // initially we have a new screen,  by definition 
// defines of the screens to show
#define TEMPERATURA 0
#define HORARIO      1
// #define TIME              2
//Abaixo são as variaveis globais de horario
int a=0;
int symbolFds;
int symbolPopup;
float tempC;
void irControlador() {
  valorIR = (results.value);
  //if(a == 0) { Serial.print(valorIR); a = 1; } Usado para verificar valor botoes
  if(valorIR == 0x97483BFB)
  {
    Serial.print("Resetar servo!");  
    servo.write(0);
    motorAux.write(0);
  }
  if(valorIR == 0xFFB04F)
  {

    servo.write(0);
    //Serial.print("Pressionado!");  
    servo.write(180);
    delay(4000);
    servo.write(0);
  }
  if(valorIR == 0xFF6897)
  {
    motorAux.write(0);
    Serial.print("Pressionado!");  
    motorAux.write(180); 
    delay(1000);
    motorAux.write(0)
  }
}
void showWelcome()
{
  lcd.clear();
  lcd.setCursor(0, 0);           
  lcd.print("Perle esta");
  lcd.setCursor(0, 1);          
  lcd.print(" iniciando...");      
}

void showHora(int H)
{
  lcd.clear();
  if(symbolPopup==1) {
    lcd.setCursor(14,0); 
    lcd.write((uint8_t)2); 
  }

  if(symbolFds==1) { 
    lcd.setCursor(11,0); 
    lcd.write((uint8_t)8); 
  }  
  lcd.setCursor(0, 0);  
  lcd.print(t.date, DEC);
  lcd.print("/0");  
  lcd.print(t.mon, DEC);
  lcd.print("/17");  
  lcd.setCursor(0, 1);  
  lcd.print(t.hour, DEC);
  lcd.print(":");
  if(t.min<10) { 
    lcd.print("0"); 
  }
  lcd.print(t.min, DEC);
}
void setup()
{
  Wire.begin();  
  Serial.begin(9600);
  rtc.begin();
  sensors.begin();
  Serial.println("Sensor is Starting Up");
  irrecv.enableIRIn(); // Starta controle iR 
  servo.attach(9);
  motorAux.attach(14);
  pinMode(porta_rele1, OUTPUT); 
  pinMode(porta_rele2, OUTPUT);
  Serial.println("Localizando sensores DS18B20...");
  Serial.print("Foram encontrados ");
  Serial.print(sensors.getDeviceCount(), DEC);
  Serial.println(" sensores.");
  if (!sensors.getAddress(sensor1, 0)) 
    Serial.println("Sensores nao encontrados !"); 
  // Mostra o endereco do sensor encontrado no barramento
  Serial.print("Endereco sensor: ");
  mostra_endereco_sensor(sensor1);
  Serial.println();
  Serial.println();
  lcd.begin(16, 2);
  showWelcome();
  mostra_endereco_sensor(sensor1);
  delay(2000);   // to show message on screen}
}

void mostra_endereco_sensor(DeviceAddress deviceAddress)
{
  for (uint8_t i = 0; i < 8; i++)
  {
    // Adiciona zeros se necessário
    if (deviceAddress[i] < 16) Serial.print("0");
    Serial.print(deviceAddress[i], HEX);
  }
}


void loop()
{
  sensors.requestTemperatures();
  float tempC = sensors.getTempC(sensor1);
  T = tempC;
  Wire.write(0);
  servo.write(0); 
  if (irrecv.decode(&results))
  {
    Serial.println(results.value, HEX);
    irrecv.resume(); // Receive the next value
  }
  irControlador(); 
  t = rtc.getTime();
  //Serial.print(tempC);
  unsigned long currentLCDMillis = millis();
  // MUST WE SWITCH SCREEN?
  if(currentLCDMillis - previousLCDMillis > lcdInterval)              // save the last time you changed the display 
  {
    previousLCDMillis = currentLCDMillis; 
    screen++;
    if (screen > screenMax) screen = 0;  // all screens done? => start over
    screenChanged = true; 
  }
  // debug Serial.println(screen);
  // DISPLAY CURRENT SCREEN
  if (screenChanged)   // only update the screen if the screen is changed.
  {
    screenChanged = false; // reset for next iteration
    switch(screen)
    {
    case TEMPERATURA: 
      showTemperature(T); 
      break;
    case HORARIO: 
      showHora(50);
      break;
    default:
      // cannot happen -> showError() ?
      break;
    }
  }
  acionaLuz();
}
void showTemperature(int T)
{ 
  lcd.clear();
  if(symbolPopup==1) {
    lcd.setCursor(14,0); 
    lcd.write((uint8_t)2); 
  }
  lcd.setCursor(0, 0);
  lcd.write((uint8_t)5);
  //lcd.print("Ambiente ");
  lcd.print(int(rtc.getTemp()));
  lcd.write((uint8_t)1); 
  lcd.print("C");
  lcd.setCursor(7,0);
  lcd.write((uint8_t)3);
  lcd.print(T);
  lcd.write((uint8_t)1); 
  lcd.print("C");
  lcd.setCursor(0, 1);
  lcd.print("Perle V3.3");
}
void acionaLuz() {
  // 1 BRANCA
  // 2 AMARELA 
  digitalWrite(porta_rele1, LOW); 
  digitalWrite(porta_rele2, LOW); 
  if((t.dow==3)||(t.dow==4)) //É fds ?
  {
    // É fds !!! Horário especial
    //Serial.print("É FDS ");
    //Serial.print(t.dow);
    symbolFds = 1;
    if(t.hour==13)         //Hora de acender as luzes amarela!
    {
      digitalWrite(porta_rele2, HIGH); //Desliga rele 2
      digitalWrite(porta_rele1, LOW);  //Liga rele 1
      symbolPopup = 1;
    }
    if((t.hour==20)||(t.hour==21))         //Hora de acender as luzes amarela!
    {
      digitalWrite(porta_rele2, HIGH); //Desliga rele 2
      digitalWrite(porta_rele1, LOW);  //Liga rele 1
      symbolPopup = 1;
    }
    if(t.hour==22)         //Hora de acender as luzes branca
    {
      digitalWrite(porta_rele1, HIGH); //Desliga rele 1
      digitalWrite(porta_rele2, LOW);  //Liga rele 2
      symbolPopup = 1;
    }
  }  
  if((t.dow<3)||(t.dow>4)) //Não é fim de semana :|
  {  
    Serial.print(t.dow);
    symbolFds = 0; 
    if(t.hour==13)         //Hora de acender as luzes amarela!
    {
      digitalWrite(porta_rele2, HIGH); //Desliga rele 2
      digitalWrite(porta_rele1, LOW);  //Liga rele 1
      symbolPopup = 1;
    }
    if(t.hour==20)         //Hora de acender as luzes amarela!
    {
      digitalWrite(porta_rele2, HIGH); //Desliga rele 2
      digitalWrite(porta_rele1, LOW);  //Liga rele 1
      symbolPopup = 1;
    }
    if(t.hour==21)         //Hora de acender as luzes branca
    {
      digitalWrite(porta_rele1, HIGH); //Desliga rele 1
      digitalWrite(porta_rele2, LOW);  //Liga rele 2
      symbolPopup = 1;
    }
    if((t.hour>=14&&t.hour<=19)||(t.hour<13)||(t.hour>=22))        //Ops! Cedo demais pra acender as luzes
    {
      symbolPopup = 0; //Retira simbolo luzes
      digitalWrite(porta_rele1, LOW); // Teoricamente ambas deveriam estar ligadas, porem estao desligadas
      digitalWrite(porta_rele2, LOW); // Teoricamente ambas deveriam estar ligadas, porem estao desligadas
    }
  } 
}

NEW PROBLEM: There's something REALLY wrong, i left my Arduino on for a couple minutes and when i returned it was reseting itselft non stop. I don't even know what to do anymore.

Unplug everything and try to upload a simple sketch such as blink. Drawing too much current can cause the arduino to reset, which might well occur if you were to, let's say, try to power two servos from it.

I removed the MG90s Servo and it still restarting. A detail is that my custom LCD characters are bugged.

And your relays have 'flywheel' diodes and you have capacitors against supply ripple and also for decoupling ?

int porta_rele1 = 3; //luz Amarela

Post a circuit diagram (even hand drawn) and you may get other suggestions.