Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //this is a modified C++ for Arduino
- //two slashes mean that what i am writing is a note, so it does not get executed, the notes are used
- //to tell you what I am doing
- //setting inputs on the arduino to their respective roles
- #define echoPin 3
- #define trigPin 2
- #define motor1Pin1 8
- #define motor1Pin2 9
- #define motor2Pin1 10
- #define motor2Pin2 11
- #define redLed 4
- #define greenLed 5
- #define blueLed 6
- void setup()//what the Arduino does before it runs its loop
- {
- //setting pins to either inputs or outputs
- pinMode(trigPin, OUTPUT);
- pinMode(echoPin, INPUT); //this is an input because the sensor is telling the Arduino how long the echo took, as
- //you will see below
- pinMode(motor1Pin1, OUTPUT); //this is an output because the Arduino is telling the motor to spin
- pinMode(motor1Pin2, OUTPUT);
- pinMode(motor2Pin1, OUTPUT);
- pinMode(motor2Pin2, OUTPUT);
- pinMode(redLed, OUTPUT);
- pinMode(greenLed, OUTPUT);
- pinMode(blueLed, OUTPUT);
- //set serial port to output data, so I can make sure the distance data is correct
- Serial.begin (9600);
- }
- void loop() //begin loop, this is what the Arduino keeps doing indefinitely
- {
- //this gets a distance from the sensor
- //NOTE: I take two different readings of distance because sometimes intereference was causing abnormal distance
- //readings (e.g. -687 instead of 90), which messed things up.
- //I then test to make sure the two readings are not to different from each other, and then I average the two
- //readings together and use that as a final distance.
- int duration1, distance1, duration2, distance2, predistance1, predistance2; //create an variable that is an integer for duration and distance
- digitalWrite(trigPin, HIGH); //output a HIGH (full 5v) signal from trigpin
- delayMicroseconds(1000); //wait 1000 microseconds
- digitalWrite(trigPin, LOW);// stop outputting signal from trigpin
- duration1 = pulseIn(echoPin, HIGH); // set the variable duration to how long it took for the echoPin to receive 5v
- predistance1 = (duration1/2) / 29.1; //to find distance, divide duration by 2 and then by 29.1, to get centimeters
- distance1 = abs(predistance1);//take the abosolute value of the distance (to make sure I dont get negative numbers)
- Serial.print("distance1: "); //print the word distance1 in the serial port
- Serial.print(distance1); //print valua for distance1 in the serial port
- Serial.println(" cm"); //print cm next to it, then add new line
- delay(1); //delay for 1 millisecond
- digitalWrite(trigPin, HIGH);
- delayMicroseconds(1000);
- digitalWrite(trigPin, LOW);
- duration2 = pulseIn(echoPin, HIGH);
- predistance2 = (duration2/2) / 29.1;
- distance2 = abs(predistance2);
- Serial.print("distance2: ");
- Serial.print(distance2);
- Serial.println(" cm");
- //This tests to make sure the two different distance values are not more different than 20
- if ((distance2 < distance1 && distance1 - distance2 > 20) || (distance2 >= distance1 && distance2 - distance1 > 20))
- {
- //if they are a bigger difference than 20, make them both 30 (the robot will continue forward, since this is
- // greater than the 20 required to turn around)
- distance1 = 30;
- distance2 = 30;
- }
- //this makes a new variable distance which is the average of the two previous distance variables
- int distance = (distance1+distance2)/2;
- // Serial.print("distance: "); //print distance in the serial port
- // Serial.print(distance); //print distance in the serial port
- // Serial.println(" cm"); //print cm next to it, then add new line
- delay(1);
- //this is what makes the robot autonomous
- if ((distance > 20)) //if the distance from the sensor to an object is greater than 20cm, do the following
- {
- GoForward(); // execute GoForward function (which is below)
- digitalWrite(redLed, LOW); // turn red LED off
- digitalWrite(greenLed, LOW); // turn green LED off
- digitalWrite(blueLed, HIGH); // turn blue LEd on
- //note: I can make any color by using various combinations of red, blue, and green
- }
- else
- {
- GoBack(); // go back (
- digitalWrite(redLed, HIGH); // turn on red LED
- digitalWrite(greenLed, LOW);
- digitalWrite(blueLed, LOW);
- delay(750); //continue GoBack() for 1.5 seconds
- TurnRight(); //then, turn right
- digitalWrite(redLed, LOW);
- digitalWrite(greenLed, HIGH); // turn on green LED
- digitalWrite(blueLed, LOW);
- delay(1250);
- }
- }
- void GoForward() // this is the GoForward function, void means that it doesnt get executed unless another function
- // calls it
- {
- //by changing which pins signal is outputed, the integrated circuit (this one is a L293D H-Bridge) changes which direction and which motor is spinning
- digitalWrite(motor1Pin1, HIGH); //output signal on motor1pin1
- digitalWrite(motor1Pin2, LOW); //do not output signal on motor1pin2
- digitalWrite(motor2Pin1, LOW); //do not output signal on motor2pin1
- digitalWrite(motor2Pin2, HIGH); //output signal on motor2pin2
- }
- void GoBack()
- {
- digitalWrite(motor1Pin1, LOW);
- digitalWrite(motor1Pin2, HIGH);
- digitalWrite(motor2Pin1, HIGH);
- digitalWrite(motor2Pin2, LOW);
- }
- void TurnRight()
- {
- digitalWrite(motor1Pin1, HIGH);
- digitalWrite(motor1Pin2, LOW);
- digitalWrite(motor2Pin1, HIGH);
- digitalWrite(motor2Pin2, LOW);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement