根据你提供的代码,存在一些问题和错误。首先,你的代码中有两个相同名称的loop()
函数,这是不允许的。其次,在第一个loop()
函数中,你将变量名写错了,应该将m
改为ValAB
。另外,在第二个loop()
函数中,你使用了一个未定义的变量valb
,需要将其更正为正确的变量名称。
以下是修正后的代码:
#define E1A 2
#define E1B 3
#define LeftMotor1 4
#define LeftMotor2 5
int valA=0, ValAB=0;
float m, o;
int flag=0, flag1=0;
int speedc=70, speedgord=750; //speed_a:自定速度初始值 speed_b:目标速度
int speedb=70,
unsigned long starttime,stoptime; //定时器
unsigned long starttime1,stoptime1; //定时器
void timer()
{
valA++;
stoptime = millis();
if ((stoptime - starttime) > 100) //每100毫秒记一次数
{
detachInterrupt(0); //关中断
flag = 1;
}
}
void setup() {
pinMode(speedgord, OUTPUT);
pinMode(E1A, INPUT);
Serial.begin(9600);
attachInterrupt(0, timer, RISING); //上升沿开中断
starttime = millis();
Serial.println(starttime);
}
void loop() {
analogWrite(LeftMotor1, speedc);
if (flag == 1)
{
m = ValAB; //放大一百倍串口绘图
Serial.println(m, 3);
valA = 0;
flag = 0;
if (m > speedgord) //如果编码器测得的实际速度大于我们设定的目标速度就减速
{
speedc--; //speed为60/100 r/s
}
else //如果编码器测得的实际速度小于我们设定的目标速度就加速
{
speedc++;
}
delay(0);
starttime = millis();
attachInterrupt(0, timer, RISING);
}
}
请注意,这只是对你提供代码进行了修正,并不能保证逻辑上是否正确。你可能需要进一步检查和调整代码以满足你的需求。
内容由零声教学AI助手提供,问题来源于学员提问