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;
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
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
Post a Comment