my problem is this: I created a fuzzy logic. it works fine. I added the codes of the mpu6050 and qtr-3rc sensors to this code. I run the sensors one by one and they work fine. but when I add the sensors' libraries to the fuzzy logic codes, the correct running fuzzy logic gives 0 as output. when I clear the sensors' libraries, it gives the correct output again. what is the reason of this ? If you help me, please.The code is below.
#include <FuzzyRule.h>
#include <Fuzzy.h>
#include <FuzzyRuleConsequent.h>
#include <FuzzyOutput.h>
#include <FuzzyInput.h>
#include <FuzzySet.h>
#include <FuzzyRuleAntecedent.h>
//#include <QTRSensors.h>
//#include <Wire.h>
//#include <I2Cdev.h>
//#include <MPU6050.h>
#define NUM_SENSORS 3
#define TIMEOUT 2500
#define EMITTER_PIN 2
/QTRSensorsRC qtrrc((unsigned char[]) {3,4,5},
NUM_SENSORS, TIMEOUT, EMITTER_PIN);
unsigned int sensorValues[NUM_SENSORS];/
const int in_1 = 8;
const int in_2 = 9;
const int pwm1 = 10;
const int in_3 = 13;
const int in_4 = 12;
const int pwm2 = 11;
/*MPU6050 ACC_GYR;
int16_t accx, accy, accz;
int16_t gyrx, gyry, gyrz;
int degerz, eskidegerz ,degerx;*/
Fuzzy* fuzzy =new Fuzzy();
FuzzySet* CokAzEgim =new FuzzySet(0,0,25,50);
FuzzySet* AzEgim =new FuzzySet(25,50,75,100);
FuzzySet* OrtaEgim =new FuzzySet(75,100,125,150);
FuzzySet* FazlaEgim =new FuzzySet(125,150,175,200);
FuzzySet* CokFazlaEgim =new FuzzySet(175,200,255,255);
FuzzySet* CokHafifViraj =new FuzzySet(0,0,20,40);
FuzzySet* HafifViraj =new FuzzySet(20,40,60,80);
FuzzySet* NormalViraj =new FuzzySet(60,80,100,120);
FuzzySet* KeskinViraj =new FuzzySet(100,120,140,160);
FuzzySet* CokKeskinViraj =new FuzzySet(140,160,180,180);
FuzzySet* CokYavas =new FuzzySet(0,0,30,60);
FuzzySet* Yavas =new FuzzySet(30,60,90,120);
FuzzySet* Orta =new FuzzySet(90,120,150,180);
FuzzySet* Hizli =new FuzzySet(150,180,210,240);
FuzzySet* CokHizli =new FuzzySet(210,240,255,255);
void setup() {
Serial.begin(9600);
/*
pinMode(in_1, OUTPUT);
pinMode(in_2, OUTPUT);
pinMode(pwm1, OUTPUT);
pinMode(in_3, OUTPUT);
pinMode(in_4, OUTPUT);
pinMode(pwm2, OUTPUT);
Wire.begin();
ACC_GYR.initialize();
Serial.println(ACC_GYR.testConnection() ? "BASARILI":"BASARISIZ");*/
FuzzyInput* egim = new FuzzyInput(1);
egim->addFuzzySet(CokAzEgim);
egim->addFuzzySet(AzEgim);
egim->addFuzzySet(OrtaEgim);
egim->addFuzzySet(FazlaEgim);
egim->addFuzzySet(CokFazlaEgim);
fuzzy->addFuzzyInput(egim);
FuzzyInput* viraj = new FuzzyInput(2);
viraj->addFuzzySet(CokHafifViraj);
viraj->addFuzzySet(HafifViraj);
viraj->addFuzzySet(NormalViraj);
viraj->addFuzzySet(KeskinViraj);
viraj->addFuzzySet(CokKeskinViraj);
fuzzy->addFuzzyInput(viraj);
FuzzyOutput* hiz = new FuzzyOutput(1);
hiz->addFuzzySet(CokYavas);
hiz->addFuzzySet(Yavas);
hiz->addFuzzySet(Orta);
hiz->addFuzzySet(Hizli);
hiz->addFuzzySet(CokHizli);
/*
I deleted the fuzzy rules because the number of letters is too high, so here are the fuzzy rules.
*/
}
void loop() {
/*ACC_GYR.getMotion6(&accx, &accy, &accz, &gyrx, &gyry ,&gyrz); //
degerz=map(gyrz,-32768,32767,0,180);
degerx=map(accx,-17000,17000,0,180);
*/
float egim=2;
float viraj=3;
fuzzy->setInput(1,egim);
fuzzy->setInput(2,viraj);
fuzzy->fuzzify();
float hiz=fuzzy->defuzzify(1);
/* qtrrc.read(sensorValues);
int s1,s2,s3;
s1=sensorValues[0];
s2=sensorValues[1];
s3=sensorValues[2];
if(s1<=200 && s2>=200 && s3<=200)
{
digitalWrite(in_1 , HIGH);
digitalWrite(in_2 , LOW);
analogWrite(pwm1,hiz);
digitalWrite(in_3 , LOW);
digitalWrite(in_4 , HIGH);
analogWrite(pwm2,hiz);
}
else if((s1>=200 || s2>=200) && s3<=200)
{
digitalWrite(in_1 , HIGH);
digitalWrite(in_2 , LOW);
analogWrite(pwm1,0);
digitalWrite(in_3 , LOW);
digitalWrite(in_4 , HIGH);
analogWrite(pwm2,hiz);
}
else if(s1<=200 && (s2>=200 || s3>=200))
{
digitalWrite(in_1 , HIGH);
digitalWrite(in_2 , LOW);
analogWrite(pwm1,hiz);
digitalWrite(in_3 , LOW);
digitalWrite(in_4 , HIGH);
analogWrite(pwm2,0);
}
else
{
digitalWrite(in_1 , HIGH);
digitalWrite(in_2 , LOW);
analogWrite(pwm1,0);
digitalWrite(in_3 , LOW);
digitalWrite(in_4 , HIGH);
analogWrite(pwm2,0);
}
*/
}