Ranger pauses with Arduino when unteathered?


#1

I have successfully uploaded some code to my Ranger. I used the online mBlock, translated to Arduino C, copied code into Arduino IDE (I am using an RPi and can’t link straigth to mBlock). The code simply turns the motors forward when the ultrasonic sensor is greater than 20cm, and turns them backwards when less than 20 cm.

If the ranger remains plugged into the RPi via USB cable the robot functions as expected. As soon as I unplug the USB the robot behave oddly. It will drive forward for a fraction of a second then pause, drive forward and pause… If it sees something it will back up for a fraction of a second …

It is not smooth with out the USB. I have a fresh battery plugged in. Is there a hidden delay that I can’t find?

#include <Arduino.h>
#include <Wire.h>
#include <SoftwareSerial.h>

#include <MeAuriga.h>

//Encoder Motor
MeEncoderOnBoard Encoder_1(SLOT1);
MeEncoderOnBoard Encoder_2(SLOT2);

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 move(int direction, int speed)
{
int leftSpeed = 0;
int rightSpeed = 0;
if(direction == 1){
leftSpeed = -speed;
rightSpeed = speed;
}else if(direction == 2){
leftSpeed = speed;
rightSpeed = -speed;
}else if(direction == 3){
leftSpeed = -speed;
rightSpeed = -speed;
}else if(direction == 4){
leftSpeed = speed;
rightSpeed = speed;
}
Encoder_1.setTarPWM(leftSpeed);
Encoder_2.setTarPWM(rightSpeed);
}
void moveDegrees(int direction,long degrees, int speed_temp)
{
speed_temp = abs(speed_temp);
if(direction == 1)
{
Encoder_1.move(-degrees,(float)speed_temp);
Encoder_2.move(degrees,(float)speed_temp);
}
else if(direction == 2)
{
Encoder_1.move(degrees,(float)speed_temp);
Encoder_2.move(-degrees,(float)speed_temp);
}
else if(direction == 3)
{
Encoder_1.move(-degrees,(float)speed_temp);
Encoder_2.move(-degrees,(float)speed_temp);
}
else if(direction == 4)
{
Encoder_1.move(degrees,(float)speed_temp);
Encoder_2.move(degrees,(float)speed_temp);
}
}

double angle_rad = PI/180.0;
double angle_deg = 180.0/PI;
double disCM;
MeUltrasonicSensor ultrasonic_7(7);

void setup(){
//Set Pwm 8KHz
TCCR1A = _BV(WGM10);
TCCR1B = _BV(CS11) | _BV(WGM12);
TCCR2A = _BV(WGM21) | _BV(WGM20);
TCCR2B = _BV(CS21);

 attachInterrupt(Encoder_1.getIntNum(), isr_process_encoder1, RISING);
attachInterrupt(Encoder_2.getIntNum(), isr_process_encoder2, RISING);

}

void loop(){

disCM = ultrasonic_7.distanceCm();
if((disCM) < (20)){
    move(2,255);
}else{
    move(1,255);
}

_loop();

}

void _delay(float seconds){
long endTime = millis() + seconds * 1000;
while(millis() < endTime)_loop();
}

void _loop(){
Encoder_1.loop();
Encoder_2.loop();

}


#2

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.