程序没有进入子程序?
Program not entering sub-routine?
我是 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);
}
}
首先,尝试打开中断引脚的内部上拉电阻。
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;
}
如果这不起作用,那么您的接线或编码器、电压、引脚烧断或类似问题可能有问题。如果这不能让您到达那里,您可以 post 更多信息。
我是 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);
}
}
首先,尝试打开中断引脚的内部上拉电阻。
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;
}
如果这不起作用,那么您的接线或编码器、电压、引脚烧断或类似问题可能有问题。如果这不能让您到达那里,您可以 post 更多信息。