Esempio n. 1
0
Bebida* getDrink(Bebida *cubaLivre, char tipoRefri, float refri, float run, float gelo){
   free(cubaLivre);
   cubaLivre = (Bebida*)malloc(sizeof(Bebida));

   cubaLivre->refri = tipoRefri;
   cubaLivre->qtdeRefri = refri;
   cubaLivre->qtdeRun = run;
   cubaLivre->qtdeGelo = gelo;
            
   fuzzification(cubaLivre);
   processaPaladar(cubaLivre);
   return cubaLivre;
}
Esempio n. 2
0
void fuzzyControl ( vControl *altitud, vControl *X, vControl *Y, vControl *Yaw ){

        if(altitud==NULL){ printf("\nfuzzyControl h null pointer\n\n"); exit(-1); }
	if(X==NULL){ printf("\nfuzzyControl x null pointer\n\n"); exit(-1); }
	if(Y==NULL){ printf("\nfuzzyControl y null pointer\n\n"); exit(-1); }
	if(Yaw==NULL){ printf("\nfuzzyControl yaw null pointer\n\n"); exit(-1); }
	
//	Variables auxiliares
	double fuzzyMem1[5];	// Auxiliar para la fuzzyficación 
	double fuzzyMem2[5];	// Auxiliar para la fuzzyficación
	double vInference[7];			// Auxiliar para la inferencia difusa
	double h[] = {-1,-0.8,-0.5,0,0.5,0.8,1};		// Conjuntos Singletons de salida
	//double prevError;
	double Error;
	double Rate;
//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
//	Altitud
	char name[] = "altitud";
	altitud->name = name;
	altitud->error 	= altitud->ref - altitud->vin;
	//setSkale( altitud, 0.08, 0.9, 1.0 );
	setSkale( altitud, ZGAIN1, ZGAIN2, ZGAIN3 );

	Error = altitud->ke * altitud->error;
	Rate = altitud->kr * ( altitud->error - altitud->error0 );

	altitud->error0 = altitud->error;

	fuzzification ( &Error , fuzzyMem1 );
	fuzzification ( &Rate , fuzzyMem2 );
	fuzzyInferenceAlt( fuzzyMem1, fuzzyMem2, vInference );
	Defuzz( vInference , h , &altitud->ku , &altitud->vout );
//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
//	X
	char nameX[] = "Posicion X";
	X->name 	= nameX;
	X->error 	= X->ref - X->vin;
	setSkale( X, 2.0, 3.5, 1.0 );
	setSkale( X, XGAIN1, XGAIN2, XGAIN3 );

	Error = X->ke * X->error;
	Rate = X->kr * ( X->error - X->error0 );

	X->error0 = X->error;

	fuzzification ( &Error , fuzzyMem1 );
	fuzzification ( &Rate , fuzzyMem2 );
	fuzzyInferenceAlt( fuzzyMem1, fuzzyMem2, vInference );
	Defuzz( vInference , h , &X->ku , &X->vout );
//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
//	Y
	char nameY[] = "Posicion Y";
	Y->name 	= nameY;
	Y->error 	= Y->ref - Y->vin;
	//setSkale( Y, 2.0, 3.5, 1.0 );
	setSkale(Y , YGAIN1, YGAIN2, YGAIN3 );

	Error = Y->ke * Y->error;
	Rate = Y->kr * ( Y->error - Y->error0 );

	Y->error0 = Y->error;

	fuzzification ( &Error , fuzzyMem1 );
	fuzzification ( &Rate , fuzzyMem2 );
	fuzzyInferenceAlt( fuzzyMem1, fuzzyMem2, vInference );
	Defuzz( vInference , h , &Y->ku , &Y->vout );
//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
//	Yaw
	char nameYaw[] = "Posicion Yaw";
	Yaw->name 	= nameYaw;
	Yaw->error 	= Yaw->ref - Yaw->vin;
	//setSkale( Yaw, 1.5, 3.0, 1.0 );
	setSkale( Yaw, WGAIN1, WGAIN2, WGAIN3 );

	Error = Yaw->ke * Yaw->error;
	Rate = Yaw->kr * ( Yaw->error - Yaw->error0 );

	Yaw->error0 = Yaw->error;

	fuzzification ( &Error , fuzzyMem1 );
	fuzzification ( &Rate , fuzzyMem2 );
	fuzzyInferenceAlt( fuzzyMem1, fuzzyMem2, vInference );
	Defuzz( vInference , h , &Yaw->ku , &Yaw->vout );
//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
}