根据你提供的代码,你已经定义了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助手提供,问题来源于学员提问




