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");
}
