tinybasic icon indicating copy to clipboard operation
tinybasic copied to clipboard

While you are working on ISR

Open EncomLab opened this issue 1 year ago • 1 comments

Morning Stefan! The other way in which I am currently using interrupts for the robot platform is to handle the output from optical rotary encoders. I currently just use this to get a step count by assigning a ENCODERA or ENCODERB command to a variable and assigning the encoder a pin number. Then I just use the variable in an IF statement to issue a STOP command to the motors.

` //MOTOR AND ENCODER FUNCTIONS //soft reset void interruptFunctionSR() { xbreak(); }

//encoder a volatile uint16_t interruptCountA = 0; void interruptFunctionA() { interruptCountA++; }

void xencodera() { x = pop(); short int encoderaPin; encoderaPin = pinNum(x);

pinMode(encoderaPin, INPUT_PULLUP); enableInterrupt(encoderaPin, interruptFunctionA, CHANGE);

push(interruptCountA);

}

//encoder b volatile uint16_t interruptCountB = 0; void interruptFunctionB() { interruptCountB++; }

void xencoderb() { x = pop(); short int encoderbPin; encoderbPin = pinNum(x);

pinMode(encoderbPin, INPUT_PULLUP); enableInterrupt(encoderbPin, interruptFunctionB, CHANGE);

push(interruptCountB);

}`

EncomLab avatar Oct 18 '22 09:10 EncomLab

Looks very good. That is exactly following the logic of the interpreter. I need to think about how to generalise this. BASIC is not the ideal language to handle interrupts because there is no way to define procedures / call backs.

Am 18.10.2022 um 11:56 schrieb Encom Lab @.***>:

Morning Stefan! The other way in which I am currently using interrupts for the robot platform is to handle the output from optical rotary encoders. I currently just use this to get a step count by assigning a ENCODERA or ENCODERB command to a variable and assigning the encoder a pin number. Then I just use the variable in an IF statement to issue a STOP command to the motors.

`//MOTOR AND ENCODER FUNCTIONS //soft reset void interruptFunctionSR() { xbreak(); }

//encoder a volatile uint16_t interruptCountA = 0; void interruptFunctionA() { interruptCountA++; }

void xencodera() { x = pop(); short int encoderaPin; encoderaPin = pinNum(x);

pinMode(encoderaPin, INPUT_PULLUP); enableInterrupt(encoderaPin, interruptFunctionA, CHANGE);

push(interruptCountA);

}

//encoder b volatile uint16_t interruptCountB = 0; void interruptFunctionB() { interruptCountB++; }

void xencoderb() { x = pop(); short int encoderbPin; encoderbPin = pinNum(x);

pinMode(encoderbPin, INPUT_PULLUP); enableInterrupt(encoderbPin, interruptFunctionB, CHANGE);

push(interruptCountB);

}`

— Reply to this email directly, view it on GitHub https://github.com/slviajero/tinybasic/issues/31, or unsubscribe https://github.com/notifications/unsubscribe-auth/ACSY56DMPGX5ZBTOT6M7XP3WDZX6HANCNFSM6AAAAAARH43FFU. You are receiving this because you are subscribed to this thread.

slviajero avatar Oct 19 '22 17:10 slviajero