要实现两个电机的同步控制,可以使用一个中断处理函数来更新两个电机的速度。
以下是修改后的代码示例:
#define E1A 2
#define E1B 3
#define LeftMotor1 4
#define LeftMotor2 5
int valA = 0;
float m;
int flag = 0;
int speedc = 70, speedgord = 750; //speedc: 自定速度初始值, speedgord: 目标速度
unsigned long starttime, stoptime; //定时器
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); // 将引脚2(INT0)作为外部中断
starttime = millis();
Serial.println(starttime);
}
void loop() {
if (flag == 1)
{
analogWrite(LeftMotor1, speedc);
analogWrite(LeftMotor2, speedc);
m = valA;
Serial.println(m,3);
valA = 0;
flag = 0;
if (m > speedgord) {
speedc--;
} else {
speedc++;
}
delay(0);
starttime=millis();
attachInterrupt(0,timer,RISING);
}
}
在这个修改后的代码中,我们将两个电机的速度设置为相同,并在中断处理函数中同时控制它们。当标志位flag为1时,即完成了100毫秒的计数,我们同时向两个电机写入相同的PWM值。这样就能实现两个电机的同步运动。
请根据你的具体需求和硬件连接进行相应修改。注意避免同时触发多个中断时可能出现的问题。
内容由零声教学AI助手提供,问题来源于学员提问




