Arduino를 사용하여 프로그래밍을 수행하지만 문제가 있습니다. loop()
함수에서 loop()
함수가 실행될 때마다 변수에 값을 추가하려고합니다 (pwm
). 필자가 작성한 일부 함수에서 그 값을 얻었고 명령으로 pwm
에 추가했지만 작동하지 않습니다. pwm
을 인쇄하면 항상 0이됩니다. result
인쇄는 나에게 0이 아닌 값을줍니다.Arduino 추가 지정
float pwm = 0;
float result = 0;
void loop(){
....
errV = w - cm;
errDtV = errOldV - errV;
result = flc->cog(errV, errDtV);
Serial.print("RESULT: ");
Serial.println(result);
pwm += result;
Serial.println(pwm);
}
그리고 그 결과는 다음과 같다 : 전체 코드는
RESULT: 31.98
0.00
것은 무엇 잘못 될 수 있는가?
편집 : #ifndef FLC_H #DEFINE FLC_H 사용법 #include "Arduino.h" 사용법 #include "FRule.h"
다음은 전체 스케치#include "FSet.h"
#include "FRule.h"
#include "Flc.h"
#include <NewPing.h>
#include "MotorControl.h"
MotorControl* m;
Flc* flc;
FRule* rule1,*rule2,*rule3,*rule4,*rule5,*rule6,*rule7,*rule8,*rule9;
NewPing sonar1(32,33,200);
static int dirA = 9;
static int pwmA = 8;
// Setup the FSets
FSet errZ(0,5,0);
FSet errMP(-15,15,0);
FSet errLP(-30,15,-1);
FSet errDtLN(-4,2,-1);
FSet errDtMN(-2,2,0);
FSet errDtZ(0,2,0);
FSet errDtMP(2,2,0);
FSet errDtLP(4,2,1);
FSet cntLN(-40,20,0);
FSet cntMN(-20,20,0);
FSet cntZ(0,20,0);
FSet cntMP(20,20,0);
FSet cntLP(40,20,0);
void setup(){
Serial.begin(4800);
pinMode(dirA,INPUT);
//Creating FRules for test
rule1 = new FRule(&errZ,&errDtMP,&cntMN);
rule2 = new FRule(&errZ,&errDtZ,&cntZ);
rule3 = new FRule(&errZ,&errDtMN,&cntMP);
rule4 = new FRule(&errMP,&errDtLP,&cntMN);
rule5 = new FRule(&errMP,&errDtMN,&cntMP);
rule6 = new FRule(&errLP,&errDtMP,&cntMP);
rule7 = new FRule(&errLP,&errDtZ,&cntLP);
rule8 = new FRule(&errLP,&errDtMN,&cntLP);
rule9 = new FRule(&errLP,&errDtLN,&cntLP);
flc = new Flc(9);
flc->addRule(rule1);
flc->addRule(rule2);
flc->addRule(rule3);
flc->addRule(rule4);
flc->addRule(rule5);
flc->addRule(rule6);
flc->addRule(rule7);
flc->addRule(rule8);
flc->addRule(rule9);
}
int errV = 0;
int errOldV = 0;
int errDtV = 0;
int w = 30;
unsigned int uS;
unsigned int cm;
float pwm1 = 0;
float result = 0;
void loop(){
uS = sonar1.ping();
cm = (uS/US_ROUNDTRIP_CM);
errV = w - cm;
errDtV = errOldV - errV;
result = flc->cog(errV,errDtV);
Serial.print("RESULT: ");
Serial.println(result);
pwm1 = pwm1 + result;
Serial.println(pwm1);
analogWrite(pwmA,pwm1);
errOldV = errV;
}
FLC 클래스 헤더 파일입니다
class Flc {
public:
Flc(int size);
~Flc();
int addRule(FRule* rule);
int mom(float x1,float x2);
float cog(float x1,float x2);
FRule** rules;
private:
int last;
int size;
float h;
float numerator = 0;
float denominator = 0;
float result = 0;
};
#endif
FLC 클래스 소스 : 사용법 #include "Arduino.h" 사용법 #include "Flc.h"
문제를 나타내는 실제 코드를 게시하십시오. 위에 게시 한 코드 snippit은 귀하가 주장하는 것을 문자 그대로 사용할 수 없습니다. –
그것은 실제 코드입니다. 나는 센서에서 값을 얻는 부분을 생략했습니다. – MitchNajmitch
'pwm = result + pwm;'을 사용해 보셨습니까? – EAKAE