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; }
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 ); //::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: }