Compound Addition command not adding!


hi all, small issue in first attempt @ creating autonomous car.

in short, determine range obstacle using 2x sharp ir sensors being read on a0 , a1. try , minimise amount of noise in outputs have sought take 5x readings , average them. average value used determine action of car.

the script have put below;

code: [select]
#include <afmotor.h>
#include <servo.h>

af_dcmotor drive (1, motor12_64khz);
servo steer;
// analog voltage range finding
int left_danger = 180;
int left_obj_if = 95;
int left_free = 75;
int right_danger = 215;
int right_obj_if = 155;
int right_free = 140;
int range_left = 0;
int range_right = 0;
// servo postions steering
int sahead = 90;
int sleft = 10;
int sright = 170;
// motor speed control
int slow = 150;
int fast = 255;
int count = 0;

void setup()
{
  serial.begin(9600);
  steer.attach(10);
  steer.write(90);
}

void loop()
{
  start:
 
  //reset range , count values 0
  serial.println("reset values");
  range_left = 0;
  range_right = 0;
  count = 0;
 
  // take 5x readings each analog channel
  while(count <5){
    serial.println("while loop");
    range_left = range_left + analogread(0);
    serial.println(range_left);
    range_right += analogread(1);
    serial.println(range_right);
    count++;
    delay(10);
  }
 
  // average readings dividing count
  // print sum of 5x analog reading both left , right channels
  serial.println(range_left);
  serial.println(range_right);
  range_left /= count;
  range_right /= count;
  // print average of readings both left , right channels
  serial.println(range_left);
  serial.println(range_right); 
  delay(10000);
 
  // 1: control while no objects detected within free range
  if(range_left < left_free && range_right < right_free){
    serial.println("all clear");
    steer.write(sahead);
    drive.setspeed(fast);
    drive.run(forward);
    goto start;
  }
 
  // 2: control when object closer free further obj if on right
  if(range_left < left_free && range_right > right_free && range_right < right_obj_if){
    serial.println("obj far right");
    steer.write(sleft);
    drive.setspeed(fast);
    drive.run(forward);
    goto start;
  }
 
  // 3: control when object closer free further obj if on left
  if(range_left > left_free && range_left < left_obj_if && range_right < right_free){
    serial.println("obj far left");
    steer.write(sright);
    drive.setspeed(fast);
    drive.run(forward);
    goto start;
  }
 
  // 4: control when object closer obj if further danger on right while left greater object if
  if(range_left < left_obj_if && range_right < right_danger && range_right > right_obj_if){
    serial.println("obj near right");
    steer.write(sleft);
    drive.setspeed(slow);
    drive.run(forward);
    goto start;
  }
 
  // 5: control when object closer obj if further danger on left while right greater object if
  if(range_right < right_obj_if && range_left < left_danger && range_left > left_obj_if){
    serial.println("obj near left");
    steer.write(sright);
    drive.setspeed(slow);
    drive.run(forward);
    goto start;
  }
 
  // 6: danger detected right
  // 6: other distance left
  if(range_right > right_danger && range_left < left_danger){
    serial.println("danger right");
    steer.write(sright);
    drive.setspeed(slow);
    drive.run(backward);
    goto start;
  }
 
  // 7: danger detected left
  // 7: other distance right
  if(range_right < right_danger && range_left > left_danger){
    serial.println("danger left");
    steer.write(sleft);
    drive.setspeed(slow);
    drive.run(backward);
    goto start;
  }
 
  // 8: danger detected both sides
  if(range_right < right_danger && range_left < left_danger){
    serial.println("danger in front");
    steer.write(sahead);
    drive.setspeed(slow);
    drive.run(backward);
    goto start;
  }
}


a sample of serial output below illustrate error;

reset values
while loop
4
4
while loop
14
9
while loop
18
9
while loop
22
9
while loop

22
13

22
13

4
2
all clear


basically, program looping correctly in while loop, reading a0 , a1, not correctly compounding results. can see compound division working fine (output: 4 , 2) compound addition should have created sum of values within loop has failed work. instead, final 2 values read used (blue values giving green output).

regards,

paul

code: [select]
    goto start;

if may suggest, rid of that. instead use "return".

that return loop, takes start.


Arduino Forum > Using Arduino > Programming Questions > Compound Addition command not adding!


arduino

Comments

Popular posts from this blog

Thread: PKI Client 5.00 install (for eToken Pro)

ATmega2560-Arduino Pin Mapping

Crossfader Arduino Tutorial