Squirrels have fuzzy tails.
0 Members and 1 Guest are viewing this topic.
#include <MegaServo.h>#define IR_pin 0int IR_val = 0;MegaServo servo1;void setup() { Serial.begin(9600); pinMode(50,OUTPUT); servo1.attach(50); servo1.write(90); //center servo intially}void loop() { go_straight();scan();if (left_val < 200 && center_val < 200 && right_val < 200) // Left, center and right paths clear?? { go_straight(); }else if (left_val < 200 && center_val > 200 && right_val < 200) // If center is blocked, then turn left or right { turn_bot_left(); servo1.write(90); // turn servo back to center delay(500); } else if (left_val < 200 && center_val > 200 && right_val > 200) // If center and right are blocked, turn left { turn_bot_left(); servo1.write(90); delay(500); } else if (left_val > 200 && center_val > 200 && right_val < 200) // If center and left are blocked, turn right { turn_bot_right(); servo1.write(90); delay(500); } else if (left_val > 200 && center_val > 200 && right_val > 200) // All paths blocked..turn bot 180, center servo.. { motor_stop(); delay(1000); turn_bot_180(); servo1.write(90); delay(500); }} void scan(){ servo1.write(0); delay(650); left_val = analogRead(IR_pin); servo1.write(90); delay(600); center_val = analogRead(IR_pin); servo1.write(180); delay(600); right_val = analogRead(IR_pin); if(left_val < center_val && left_val < right_val) // Trying find out smallest of three values... { min_val = left_val; } else if(center_val < left_val && center_val < right_val) { min_val = center_val; } else { min_val = right_val; } }}/* motor movements...removed to save space!! Btw..all these functions work fine. I've tested themvoid motor_stop()void go_straight()void go_reverse()void turn_bot_right()void turn_bot_left()void turn_bot_180()*/
loop{while(sensorReading > 200){ go_straight();}scan();//make turn based on scans}
void loop() { scan(); // scan left, center and right while (center_val < 100) { go_straight(); // keep going straight until value of reading at center postion > 100 scan(); } motor_stop(); // if reading taken > 100, then stop motors for a second delay(1000); turn_bot_180(); // turn bot 180 degrees.. delay(400); // wait until it completes turn... motor_stop(); // stop for a second..and loop.. delay(1000);}
void loop() { scan_center(); while (center_val < 60){ go_straight(); scan_center(); }// if center > 60 , then above loop exits, and the bot does the following: motor_stop(); delay(150); scan_around(); servo1.write(90); if (left_val < 60 && left_val < right_val) // If left has more room, turn left... { turn_bot_left(); delay(450); motor_stop(); delay(150); } else if (right_val < 60 && right_val < left_val) // if right has more room, turn right { turn_bot_right(); delay(450); motor_stop(); delay(150); } else // if both left and right are blocked, reverse a bit , turn 180 and proceed... { go_reverse(); delay(700); motor_stop(); turn_bot_180(); delay(900); motor_stop(); delay(150);}}// Position servo at the center (90 degrees) read IR valuesvoid scan_center(){ servo1.write(90); delay(500); center_val = analogRead(IR_pin);}// Turn servo left (160 degrees) and right (20 degrees), and read & store IR values. I've mounted the servo upside down, hence angle is from 160 - 20 (or 180-90)void scan_around() { servo1.write(160); delay(750); left_val = analogRead(IR_pin); servo1.write(20); delay(800); right_val = analogRead(IR_pin);}