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...

根据你提供的代码,你已经定义了E1A、E1B、LeftMotor1和LeftMotor2的引脚。在setup函数中设置了pinMode和attachInterrupt,其中将引脚2(INT0)作为外部中断,并且当它触发上升沿时调用timer函数。在loop函数中,你使用analogWrite来控制LeftMotor1引脚输出PWM信号,同时检查flag标志位的值。

如果要添加第二个外部中断,请使用相应的引脚和attachInterrupt函数。例如,假设要将INT1(引脚3)作为另一个外部中断,请按以下方式修改代码:

#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; //speedc: 自定速度初始值, speedgord: 目标速度

unsigned long starttime, stoptime; //定时器

void timer()
{
  valA++;
  stoptime = millis(); 
   if((stoptime - starttime) > 100) //每100毫秒记一次数
   { 
    detachInterrupt(0); //关中断
    flag = 1;
   }
}

void timer2()
{
   // 第二个外部中断处理函数
}

void setup() {
  pinMode(speedgord, OUTPUT);
  pinMode(E1A, INPUT);
  
  Serial.begin(9600);
  
  attachInterrupt(0, timer, RISING); // 将引脚2(INT0)作为外部中断
  attachInterrupt(1, timer2, RISING); // 将引脚3(INT1)作为外部中断
  
  starttime = millis();
  
  Serial.println(starttime);  
}

void loop() {
  analogWrite(LeftMotor1, speedc); 
  
    if(flag == 1)         
    { 
      m = valA;    
      Serial.println(m, 3);
      valA = 0;
      flag = 0;
      
      if(m > speedgord) {
        speedc--;
      } else {
        speedc++;
      }
      
     delay(0);
     
     starttime = millis();
     attachInterrupt(0, timer, RISING);
    }
}

以上代码示例在原有的代码基础上,添加了一个名为timer2的第二个外部中断处理函数,并使用attachInterrupt将引脚3(INT1)设置为该中断。

请根据你的具体需求和硬件连接进行相应修改。注意避免同时触发多个中断时可能出现的问题。


内容由零声教学AI助手提供,问题来源于学员提问

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?