Программа не входит в подпрограмму? - PullRequest
0 голосов
/ 09 октября 2018

Я новичок в 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 голосов
/ 09 октября 2018

Сначала попробуйте включить внутренний подтягивающий резистор для контакта прерывания.

pinMode(interruptPin, INPUT_PULLUP);

Если этого не произойдет, запустите эскиз канонического прерывания и получите срабатывание прерывания.мигать светодиодом:

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;
}

Если это не сработает, то, скорее всего, у вас проблема с проводкой или с энкодером, или с напряжением, или с оборванным контактом, или что-то в этом роде.Вы можете опубликовать больше информации, если это не поможет вам.

...