Hello, I am trying to use a function, I created which moves my mbot forward then stops, but the function only runs once, how can I make the function run until an condition is met.
Function:
int moveDirection(char Direction){
switch(Direction)
{
case ‘0’: // forward
Encoder_1.moveTo(-850);
Encoder_2.moveTo(850);
break;
case ‘1’: //left
Encoder_1.moveTo(-520);
Encoder_2.moveTo(-520);
break;
case ‘2’: // right
Encoder_1.moveTo(520);
Encoder_2.moveTo(520);
break;
case ‘3’: //backwards
Encoder_1.moveTo(850);
Encoder_2.moveTo(-850);
break;
case ‘4’: // 180
Encoder_1.moveTo(-1000);
Encoder_2.moveTo(-1000);
break;
}
Encoder_1.loop();
Encoder_2.loop();
}
Code:
#include <Arduino.h>
#include <Wire.h>
#include <SoftwareSerial.h>
#include “MeAuriga.h”
//Encoder Motor Delcare
MeEncoderOnBoard Encoder_1(SLOT1); // Declare encoder motors
MeEncoderOnBoard Encoder_2(SLOT2);
//Motor Declare
void isr_process_encoder1(void)
{
if(digitalRead(Encoder_1.getPortB()) == 0){
Encoder_1.pulsePosMinus();
}else{
Encoder_1.pulsePosPlus();
}
}
void isr_process_encoder2(void)
{
if(digitalRead(Encoder_2.getPortB()) == 0){
Encoder_2.pulsePosMinus();
}else{
Encoder_2.pulsePosPlus();
}
}
void setup(){
//PWM Motor Setup
Serial.begin(9600);
attachInterrupt(Encoder_1.getIntNum(), isr_process_encoder1, RISING);
attachInterrupt(Encoder_2.getIntNum(), isr_process_encoder2, RISING);
//Set Pwm 8KHz
TCCR1A = _BV(WGM10);
TCCR1B = _BV(CS11) | _BV(WGM12);
TCCR2A = _BV(WGM21) | _BV(WGM20);
TCCR2B = _BV(CS21);
Encoder_1.setPulse(9);
Encoder_2.setPulse(9);
Encoder_1.setRatio(39.267);
Encoder_2.setRatio(39.267);
Encoder_1.setPosPid(1.8,0,1.2);
Encoder_2.setPosPid(1.8,0,1.2);
Encoder_1.setSpeedPid(0.18,0,0);
Encoder_2.setSpeedPid(0.18,0,0);
}
void loop(){
moveDirection(‘0’);
if (frontUltrasonicSensor.distanceCm() <= 7){
turnAbsolute(90, true, 100);
delay(500);
turnAbsolute(90, true, 100);
}
}