eFLL(Embedded Fuzzy Logic Library)

Estou utilizando um sensor de temperatura e a biblioteca eFLL de logica fuzzy. Aparentemente não há nenhum erro mas o desfuzzify está retornando "0". Segue o codigo para que alguem posso me ajudar a encontrar o erro. De acordo com o metodo isFireRule(); a regra 4 e 5 estão sendo ativadas.

// Importando biblioteca Fuzzy(eFLL)
#include <Fuzzy.h>
#include <FuzzyComposition.h>
#include <FuzzyInput.h>
#include <FuzzyIO.h>
#include <FuzzyOutput.h>
#include <FuzzyRule.h>
#include <FuzzyRuleAntecedent.h>
#include <FuzzyRuleConsequent.h>
#include <FuzzySet.h>

//Importando blibioteca do display de lcd
#include <LiquidCrystal.h>

//definido pino de saida para o display
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

//definindo pino de antrada analógio do sensor de temperatura(LM35)
const int LM35 = A0;

// definindo variável inteira para armazenar a temperatura
float temp = 0;

// definindo variável inteira para armezar o valor recebidon pelo LM35
int ADClido = 0;

int saida = 8;

int ledpin = saida;
//instanciando objeto Fuzzy
Fuzzy* fuzzy = new Fuzzy();

void setup() {

pinMode(ledpin, OUTPUT);

//iniciando conexão entre o pc e o arduino
Serial.begin(9600);

//iniciando o display de lcd e definindo(c,l)
lcd.begin(16, 2);

//define voltagem 1.1V para a saida analogica
analogReference(INTERNAL);

// Criando FuzzyInput temperatura com ID = 1
FuzzyInput* temperatura = new FuzzyInput(1);

// Criando FuzzySet

FuzzySet* muitoFrio = new FuzzySet(0, 0, 0, 15); //temperatura muito frio
temperatura->addFuzzySet(muitoFrio);//adicionando muitoFrio em temperatura

FuzzySet* frio = new FuzzySet(15, 20, 20, 25); //temperatura frio
temperatura->addFuzzySet(frio);//adicionando frio em temperatura

FuzzySet* conforto = new FuzzySet(20, 25, 25, 30); //temperatura conforto
temperatura->addFuzzySet(conforto);//adicionando conforto em temperatura

FuzzySet* quente = new FuzzySet(25, 30, 30, 35); //temperatura quente
temperatura->addFuzzySet(quente);//adicionando quente em temperatura

FuzzySet* muitoQuente = new FuzzySet(30, 35, 40, 45); //temperatura muito quente
temperatura->addFuzzySet(muitoQuente);//adicionando muitoQuente em temperatura

fuzzy->addFuzzyInput(temperatura); // adicionando o fuzzy input no objeto fuzzy

//Criando FuzzyOutput com ID =1 painel, responsável por acender os LEDs
FuzzyOutput* painel = new FuzzyOutput(1);

FuzzySet* LMF = new FuzzySet(6,6,6,6); //Led muito frio
temperatura->addFuzzySet(LMF);//adicionando led muito frio em painel

FuzzySet* LF = new FuzzySet(7,7,7,7); //Led frio
temperatura->addFuzzySet(LF);//adicionando led frio em painel

FuzzySet* LC = new FuzzySet(8,8,8,8); //Led conforto
temperatura->addFuzzySet(conforto);//adicionando led conforto em painel

FuzzySet* LQ = new FuzzySet(9,9,9,9); //Led quente
temperatura->addFuzzySet(LQ);//adicionando led quente em painel

FuzzySet* LMQ = new FuzzySet(10,10,10,10); //Led muito quente
temperatura->addFuzzySet(muitoFrio);//adicionando led muito quente em painel

fuzzy->addFuzzyOutput(painel); // adicionando fuzzy output no objeto fuzzy

// criando regras fuzzy

// Regra 1(Se temperatura = muito frio painel = LMF
FuzzyRuleAntecedent* ifTemperaturaMuitoFrio = new FuzzyRuleAntecedent();// instanciando um antecedente para a expressão
ifTemperaturaMuitoFrio->joinSingle(muitoFrio);//adicionando o FuzzySet correpondente ao objeto Antecedente
FuzzyRuleConsequent* thenPainelLMF = new FuzzyRuleConsequent();// instanciando um consequente para a expressão
thenPainelLMF->addOutput(LMF);//adicionando o FuzzySet correspondente ao objeto consequente
//Instanciando um objeto FuzzyRule
FuzzyRule* fuzzyRule01 = new FuzzyRule(1, ifTemperaturaMuitoFrio, thenPainelLMF); // ID, antencedente e consequente da expressão
//adicionando o FuzzyRule ao objeto Fuzzy
fuzzy->addFuzzyRule(fuzzyRule01);

// Regra 2(Se temperatura = frio painel = LF
FuzzyRuleAntecedent* ifTemperaturaFrio = new FuzzyRuleAntecedent();// instanciando um antecedente para a expressão
ifTemperaturaFrio->joinSingle(frio);//adicionando o FuzzySet correpondente ao objeto Antecedente
FuzzyRuleConsequent* thenPainelLF = new FuzzyRuleConsequent();// instanciando um consequente para a expressão
thenPainelLF->addOutput(LF);//adicionando o FuzzySet correspondente ao objeto consequente
//Instanciando um objeto FuzzyRule
FuzzyRule* fuzzyRule02 = new FuzzyRule(2, ifTemperaturaFrio, thenPainelLF); // ID, antencedente e consequente da expressão
//adicionando o FuzzyRule ao objeto Fuzzy
fuzzy->addFuzzyRule(fuzzyRule02);

// Regra 3(Se temperatura = conforto painel = LC
FuzzyRuleAntecedent* ifTemperaturaConforto = new FuzzyRuleAntecedent();// instanciando um antecedente para a expressão
ifTemperaturaConforto->joinSingle(conforto);//adicionando o FuzzySet correpondente ao objeto Antecedente
FuzzyRuleConsequent* thenPainelLC = new FuzzyRuleConsequent();// instanciando um consequente para a expressão
thenPainelLC->addOutput(LC);//adicionando o FuzzySet correspondente ao objeto consequente
//Instanciando um objeto FuzzyRule
FuzzyRule* fuzzyRule03 = new FuzzyRule(3, ifTemperaturaConforto, thenPainelLC); // ID, antencedente e consequente da expressão
//adicionando o FuzzyRule ao objeto Fuzzy
fuzzy->addFuzzyRule(fuzzyRule03);

// Regra 4(Se temperatura = quente painel = LQ
FuzzyRuleAntecedent* ifTemperaturaQuente = new FuzzyRuleAntecedent();// instanciando um antecedente para a expressão
ifTemperaturaQuente->joinSingle(quente);//adicionando o FuzzySet correpondente ao objeto Antecedente
FuzzyRuleConsequent* thenPainelLQ = new FuzzyRuleConsequent();// instanciando um consequente para a expressão
thenPainelLQ->addOutput(LQ);//adicionando o FuzzySet correspondente ao objeto consequente
//Instanciando um objeto FuzzyRule
FuzzyRule* fuzzyRule04 = new FuzzyRule(4, ifTemperaturaQuente, thenPainelLQ); // ID, antencedente e consequente da expressão
//adicionando o FuzzyRule ao objeto Fuzzy
fuzzy->addFuzzyRule(fuzzyRule04);

// Regra 5(Se temperatura = muito quente painel = LMQ
FuzzyRuleAntecedent* ifTemperaturaMuitoQuente = new FuzzyRuleAntecedent();// instanciando um antecedente para a expressão
ifTemperaturaMuitoQuente->joinSingle(muitoQuente);//adicionando o FuzzySet correpondente ao objeto Antecedente
FuzzyRuleConsequent* thenPainelLMQ = new FuzzyRuleConsequent();// instanciando um consequente para a expressão
thenPainelLMF->addOutput(LMQ);//adicionando o FuzzySet correspondente ao objeto consequente
//Instanciando um objeto FuzzyRule
FuzzyRule* fuzzyRule05 = new FuzzyRule(5, ifTemperaturaMuitoQuente, thenPainelLMQ); // ID, antencedente e consequente da expressão
//adicionando o FuzzyRule ao objeto Fuzzy
fuzzy->addFuzzyRule(fuzzyRule05);

}

void loop() {
lcd.clear();
//lendo LM35
ADClido = analogRead(LM35);
//Convertendo voltagem em temperatura
temp = ADClido * 0.1075268817204301;
// definindo os falores de entrada para o objeto fuzzy
fuzzy->setInput(1,temp);
// executando a fuzzificação
fuzzy->fuzzify();
// efetuando a desfuzzificação, output recebendo o resultado do fuzzy com ID = 1
saida = fuzzy->defuzzify(1);
//acendendo led referente ao resultado da desfuzzificação
digitalWrite(ledpin,HIGH);
//imprimindo texto no monitor serial
Serial.print("Temperatura = ");
Serial.print(temp);
Serial.println(" *C");
Serial.println(saida);
//definido ponto incial no display
lcd.setCursor(0, 0);
// imprimindo texto no display
lcd.print("Temp = ");
lcd.print(temp);
lcd.print(" *C");
bool wasTheRulle1Fired = fuzzy->isFiredRule(1);
bool wasTheRulle2Fired = fuzzy->isFiredRule(2);
bool wasTheRulle3Fired = fuzzy->isFiredRule(3);
bool wasTheRulle4Fired = fuzzy->isFiredRule(4);
bool wasTheRulle5Fired = fuzzy->isFiredRule(5);
Serial.println(wasTheRulle1Fired);
Serial.println(wasTheRulle2Fired);
Serial.println(wasTheRulle3Fired);
Serial.println(wasTheRulle4Fired);
Serial.println(wasTheRulle5Fired);
//pausa
delay(5000);
}