ZBLOG

#define E1A 2 #define E1B 3 #define LeftMotor1 4 #define LeftMotor2 5 int valA=0; float m; int flag=0,flag1=0; int speedc=70,speedgord=750;//speed_a:自定速度初始值 speed_b:目标速度 int speedb=70, unsigned...

要实现两个电机的同步控制,可以使用一个中断处理函数来更新两个电机的速度。

以下是修改后的代码示例:

#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助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=17157

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?