程序没有进入子程序?

时间:2018-10-09 01:53:13

标签: arduino arduino-uno

我是arduino / robotics的新手,并编写了一些简单的代码,应使用中断来测量车轮上的编码器滴答声,并在达​​到某个值(设定距离)后停止,但是似乎并没有增加编码器值因此车轮永远不会停止。有人可以协助我吗? 代码:

const int pwm1 = 9 ;  //initializing pin 2 as pwm
const int in1 = 8 ;
const int in2 = 12 ;
const int pwm2 = 10 ;  //initializing pin 2 as pwm
const int in3 = 11 ;
const int in4 = 13 ;
const int e1 = 2 ;
const int e2 = 3 ;

const int tickGoal = 90;
volatile int encoderValue= 0; 

void isrFunction() {
  encoderValue++ ;
}

void setup() {
pinMode(in1,OUTPUT);
pinMode(in2,OUTPUT);
pinMode(in3,OUTPUT);
pinMode(in4,OUTPUT);
pinMode(pwm1,OUTPUT);
pinMode(pwm2,OUTPUT);
pinMode(e1, INPUT);
pinMode(e2, INPUT);
attachInterrupt(digitalPinToInterrupt(e1), isrFunction, CHANGE);
}

void loop() {
  if (encoderValue < tickGoal) {
    digitalWrite(in1, LOW);
    digitalWrite(in2, HIGH);
    analogWrite(pwm1, 255);
    digitalWrite(in3, LOW);
    digitalWrite(in4, HIGH);
    analogWrite(pwm2, 255);
  } else {
    digitalWrite(in1, LOW);
    digitalWrite(in2, LOW);
    digitalWrite(in1, LOW);
    digitalWrite(in2, LOW);   
  }
}

1 个答案:

答案 0 :(得分:0)

首先,尝试打开中断引脚的内部上拉电阻。

pinMode(interruptPin, INPUT_PULLUP);

如果这样做不行,请运行规范的中断草图并触发中断以使LED闪烁:

int interruptPin = 2;
int LEDPin = 13;
volatile int state = LOW;

void setup() {
    pinMode(LEDPin, OUTPUT);
    pinMode(InterruptPin, INPUT_PULLUP)
    attachInterrupt(digitalPinToInterrupt(InterruptPin), blink, CHANGE);
}

void loop() {
    digitalWrite(LEDPin, state);
}

void blink() {
    state = !state;
}

如果这不起作用,则可能是接线,编码器,电压,针脚烧断或类似问题。如果无法到达目的地,您可以发布更多信息。