Problemas com o digitalWrite e funçoes

Estou fazendo um projeto, que exige um menu, porem ao selecionar o item PP, neste caso o único item finalizado, ele escreve no LCD porem não realiza o digitalWrite(Motor, HIGH) nem a subrotina termostato() , gostaria de saber se alguém pode me ajudar, pelo menos me dando uma direção para contornar este problema, segue o código abaixo, e um esquema do circuito também.

Desde já agradeço

esta é a parte a qual estou tendo problemas:

void menu_select()
{

    switch(menu_number)
    {
       case 1:   
               digitalWrite(Motor, HIGH);   
               lcd.setCursor(1,0);
               lcd.print("Processando! ");
               lcd.setCursor(0,1);
               lcd.print("                "); 
               sp = 165;
                                     
               partida();
               break;
       case 2: 
               lcd.setCursor(1,0);
               lcd.print("Processando! ");
               lcd.setCursor(0,1);
               lcd.print("                "); 
               sp = 60;
               partida();
               break;
       case 3: 
               lcd.setCursor(1,0);
               lcd.print("Processando! ");
               lcd.setCursor(0,1);
               lcd.print("                ");
               sp = 105;
               partida();
               break;
       case 4: 
               lcd.setCursor(1,0);
               lcd.print("Processando! ");
               lcd.setCursor(0,1);
               lcd.print("                "); 
               sp = 250;
               partida();
               break;
       case 5: 
               lcd.setCursor(1,0);
               lcd.print("Help");
               lcd.setCursor(0,1);
               lcd.print("                ");                           
              break;
      
    } 

 
} 

//---PARTIDA MOTOR---

 void partida()
{
  digitalWrite(Motor,HIGH);
  lcd.setCursor(1,0);  
  lcd.print("Motor ON    ");  
  attachInterrupt(0,interrupcaoBTN,RISING);
  attachInterrupt(1,interrupcaoTERM,RISING);
  attachInterrupt(4,interrupcaoCONT,LOW);
  termostato();
   
}

código completo:

// --- Bibliotecas Auxiliares ---
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <max6675.h>



// --- Mapeamento de Hardware ---
#define     menu     15
#define     enter    16
#define     off      17


#define Motor 5


#define band8 13
#define band7 12
#define band6 11
#define band5 10
#define band4 9
#define band3 8
#define band2 7
#define band1 6



// --- Protótipo das Funções ---

void readButts();
void list_menu();
void menu_select();
void list_menu1();
void partida();
void termostato();
void interrupcaoBTN();
void interrupcaoTERM();
void interrupcaoCONT();



// --- Variáveis Globais ---
int      line[5] = {0,1,2,3,4},
         line_bk[5],
         index,
         ktcSO = 1,
         ktcCS = 14,
         ktcCLK = 0,
         loopin = 0,
         vm1,
         vm2,
         vm3,
         vm4,
         menu_number = 1;

double sp = 0,
       kp = (127.5 / 200),
       tempc;
       
       
         

boolean  menu_flag  = 0,         
         enter_flag = 0,
         sub_menu = 0;



// --- Declaração de Objetos ---
LiquidCrystal_I2C lcd(0x20,2,1,0,4,5,6,7,3, POSITIVE);

MAX6675 ktc(ktcCLK, ktcCS, ktcSO);


// --- Configurações Iniciais ---
void setup()
{



 pinMode(Motor, OUTPUT);
  
 lcd.begin (16,4);
 lcd.setBacklight(HIGH);
 lcd.setCursor(0,0);
 lcd.print(">");

} //end setup


// --- Loop Infinito ---
void loop()
{
  
  if(!sub_menu)
  {
    lcd.setCursor(1,line[0]);
    lcd.print("1) PP           ");
    lcd.setCursor(1,line[1]);
    lcd.print("2) PLA          ");
    lcd.setCursor(1,line[2]);
    lcd.print("3) ABS          ");
    lcd.setCursor(1,line[3]);
    lcd.print("4) PET          ");
    lcd.setCursor(1,line[4]);
    lcd.print("5) Help         ");
  }
    readButts();
       
   
} //end loop


void readButts()
{
   if(!digitalRead(menu))  menu_flag  = 0x01;
   
   if(!digitalRead(enter)) enter_flag = 0x01;

   if(digitalRead(menu) && menu_flag)
   {
       menu_flag = 0x00;
       list_menu();
       menu_number =  menu_number + 1;
       if(menu_number > 5) menu_number = 1;
    
   } //end if menu




   if(digitalRead(enter) && enter_flag)
   {
      enter_flag = 0x00; 
      sub_menu = !sub_menu;
      menu_select();
    
   } //end if menu
  
  
} //end readButts




void list_menu()
{
  for(int i=4; i>-1; i--) 
  {
     index = i-1;
     line_bk[i] = line[i];
     
     if(index < 0) line[i] = line_bk[i+4];
     
     else line[i] = line[i-1];
    
  }

}

void menu_select()
{

    switch(menu_number)
    {
       case 1:   
               digitalWrite(Motor, HIGH);   
               lcd.setCursor(1,0);
               lcd.print("Processando! ");
               lcd.setCursor(0,1);
               lcd.print("                "); 
               sp = 165;
                                     
               partida();
               break;
       case 2: 
               lcd.setCursor(1,0);
               lcd.print("Processando! ");
               lcd.setCursor(0,1);
               lcd.print("                "); 
               sp = 60;
               partida();
               break;
       case 3: 
               lcd.setCursor(1,0);
               lcd.print("Processando! ");
               lcd.setCursor(0,1);
               lcd.print("                ");
               sp = 105;
               partida();
               break;
       case 4: 
               lcd.setCursor(1,0);
               lcd.print("Processando! ");
               lcd.setCursor(0,1);
               lcd.print("                "); 
               sp = 250;
               partida();
               break;
       case 5: 
               lcd.setCursor(1,0);
               lcd.print("Help");
               lcd.setCursor(0,1);
               lcd.print("                ");                           
              break;
      
    } 

 
} 

//---PARTIDA MOTOR---

 void partida()
{
  digitalWrite(Motor,HIGH);
  lcd.setCursor(1,0);  
  lcd.print("Motor ON    ");  
  attachInterrupt(0,interrupcaoBTN,RISING);
  attachInterrupt(1,interrupcaoTERM,RISING);
  attachInterrupt(4,interrupcaoCONT,LOW);
  termostato();
   
}


//---TERMOSTATO---


void termostato()
{
  
    
  tempc = ktc.readCelsius();
  tempc = 30;


vm1 = (kp*((tempc-6) - sp));
vm1 = -vm1;

if(vm1 > 255)
{
  vm1 = 255;
}

analogWrite(band1, vm1);
analogWrite(band2, vm1);

vm2 = (kp*((tempc-4) - sp));
vm2 = -vm2;

if(vm2 > 255)
{
  vm2 = 255;
}

analogWrite(band3, vm2);
analogWrite(band4, vm2);

vm3 = (kp*((tempc-2) - sp));
vm3 = -vm3;

if(vm3 > 255)
{
  vm3 = 255;
}

analogWrite(band5, vm3);
analogWrite(band6, vm3);



vm4 = (kp*((tempc) - sp));
vm4 = -vm4;

if(vm4 > 255)
{
  vm4 = 255;
}

analogWrite(band7, vm4);
analogWrite(band8, vm4);


lcd.setCursor(1,0);
lcd.print("Temp: ");
lcd.print(tempc);
lcd.print(" C");
  

}


void interrupcaoBTN()
{
  digitalWrite(Motor, LOW);

    lcd.setCursor(0,0);
    lcd.print("Emergencia!");
}

void interrupcaoTERM()
{
  digitalWrite(Motor, LOW);
  
  lcd.setCursor(0,0);
  lcd.print("Emergencia!");

  lcd.setCursor(0,1);
  lcd.print("Superaquecimento");
}

void interrupcaoCONT()
{
  digitalWrite(Motor, LOW);
  
  lcd.setCursor(0,0);
  lcd.print("ERRO");

  lcd.setCursor(0,1);
  lcd.print("CONTATORA");
}

A função termostato não funciona como pretenderás por causa disto:

  tempc = ktc.readCelsius();
  tempc = 30;

O motor funciona? Está tudo bem ligado? Testaste o motor com um sketch aparte só para provar que o motor funciona?

Na verdade esta parte foi proposital, pois estava apenas simulando o circuito, e como o ISIS não consegue simular direito o sensor estava deixando uma temperatura fixa, as ligações do Rele estão corretas, testei em outras partes do código, como por exemplo no void setup e ele liga normalmente, por alguma razão estou tendo problemas com ele a partir do Switch case, igualmente ele não chama a subrotina do termostato, já que ele não escreve no LCD nem inicia o processo de PWM

Olhando mais a fundo, isto:

  attachInterrupt(0,interrupcaoBTN,RISING);
  attachInterrupt(1,interrupcaoTERM,RISING);
  attachInterrupt(4,interrupcaoCONT,LOW);

Devia estar no setup() não onde está.

Adiante, porque não colocar uns serial print para ver onde é que o código empanca?