I need a quick bit of help, whats keeping my functions in the loop() from executing? I haven't spent much time with C...I'm a mechanical engineer trying to learn some mechatronics on his own.
If some of the commands may seem foreign, I'm using a motor shield/controller from ladyada. Any suggestions would be greatly appreciated, this is my first project with the Arduino.
Follows is code:
// Parker Conroy
// Moves a robot in the direction of the most space in front of it
// not completed
#include <Servo.h>
#include <AFMotor.h>
int new_ang;
int old_ang=90; // Base direction is forward
int base = 25; // Left most side of servo
int top= 179; // Right most side of servo
int rf= 1; // pin the rf is on
int range[179]; // same as in void find_ranges and magnitude of top variable ^
int led_1_Pin = 13; // LED connected to Analog pin 13
Servo servo; // create servo object to control a servo
AF_DCMotor motor(1, MOTOR12_64KHZ); // create motor #2, 64KHz pwm
void setup()
{
servo.attach(9); // attaches the servo on pin 9 to the servo object
Serial.begin(9600); // setup serial talk @ 9600 bps
pinMode(led_1_Pin, OUTPUT); // sets the analog pin as output
//Vars
motor.setSpeed(200); //200/255 of full speed
}
void loop()
{
//Funks
digitalWrite(led_1_Pin, HIGH); // debug actions************************************
delay(1000);
digitalWrite(led_1_Pin, LOW); // debug actions************************************
find_ranges(base, top, rf, range); // array passed into
new_ang = find_max_range(top, base, range);
smart_move(new_ang, old_ang);
old_ang=new_ang;
//need funk for moving forward ( based on refresh rate for sampling new range info)
}
//Funk for rangefinding over basetop degrees
void find_ranges(int base, int top, int rf, int range[179])
{
int pos = base; // variable to store the servo position
// int range[top]; //array for graphing or AI control ( not used yet; array passed into funk now)
int sweep_dir=1; //Var for direction of sweeping motion
servo.write(pos); //Set position to move
range[pos]=analogRead(rf);
Serial.print("You are ");
range[pos] = 3027.4/range[pos]; // read the value from the sensor
range[pos]= (pow(range[pos],1.2134));
Serial.print(range[pos]);
Serial.print(" away at ");
Serial.println(pos);
delay(25);
if (pos == top)
{
sweep_dir = 0;
}
else if (pos == base)
{
sweep_dir =1;
}
if (sweep_dir)
{
pos++;
}
else
{
pos= pos-1;
}
}
// Funk for finding the new angle for movement
int find_max_range(int top, int base, int range[179] )
{
int big_range;
int i=base;
int new_dir;
while (i<=top)
{
if (range[i+1] > range*)*
- {*
- new_dir= i+1;*
- }*
- }*
- new_ang=new_dir;*
return new_ang;
}
// Code for moving step motor to rotate robot a certain number of degrees.
void smart_move(int new_ang, int old_ang)
{ - int diff_ang=new_ang-old_ang;*
- if (abs(diff_ang) >= 15) //if diference in directional angle is more then three*
- {*
- if (diff_ang <0)*
- {*
- //rotate right wheel for a change of neg angle*
- // Dependent on size of wheels*
- }*
- else*
- {*
- //rotate left wheel for change of pos angle*
- // Dependent on size of wheels*
- }}*
else
motor.run(FORWARD);
{ - }*
}