-
-
Save whyisjake/2354277 to your computer and use it in GitHub Desktop.
/* | |
Original code by Nick Brenn | |
Modified by Marc de Vinck | |
Make Projects Arduino-based 4WD robot | |
http://makeprojects.com/Project/Build-your-own-Arduino-Controlled-Robot-/577/1 | |
*/ | |
#include <AFMotor.h> | |
AF_DCMotor motor1(1, MOTOR12_8KHZ); | |
AF_DCMotor motor2(2, MOTOR12_8KHZ); | |
AF_DCMotor motor3(3, MOTOR12_1KHZ); | |
AF_DCMotor motor4(4, MOTOR12_1KHZ); | |
const int pingPin = 19; | |
// ------------------------------------------------------------------------------ | |
void setup() | |
{ | |
Serial.begin(9600); // set up Serial library at 9600 bps | |
motor1.setSpeed(200); // Sets the speed for all the motors 1 - 4 (255 is the | |
maximum speed) | |
motor2.setSpeed(200); | |
motor3.setSpeed(200); | |
motor4.setSpeed(200); | |
} | |
// ------------------------------------------------------------------------------ | |
float ping () // This is the code that runs the PING ))) Sensor | |
{ | |
long duration, inches; | |
pinMode(pingPin, OUTPUT); | |
digitalWrite(pingPin, LOW); | |
delayMicroseconds(2); | |
digitalWrite(pingPin, HIGH); | |
delayMicroseconds(5); | |
digitalWrite(pingPin, LOW); | |
pinMode(pingPin, INPUT); | |
duration = pulseIn(pingPin, HIGH); | |
long microsecondsToInches(long microseconds); | |
inches = microsecondsToInches(duration); | |
return inches; | |
} // ------------------------------------------------------------------------------ | |
void forward() // This function moves all the wheels forward | |
{ | |
motor1.run(FORWARD); | |
motor2.run(FORWARD); | |
motor3.run(FORWARD); | |
motor4.run(FORWARD); | |
} | |
// ------------------------------------------------------------------------------ | |
void backward() // This function moves all the wheels backwards | |
{ | |
motor1.run(BACKWARD); | |
motor2.run(BACKWARD); | |
motor3.run(BACKWARD); | |
motor4.run(BACKWARD); | |
} | |
// ------------------------------------------------------------------------------ | |
void haltMotors() // This function stops all the motors (It is better to stop | |
the motors before changing direction) | |
{ | |
motor1.run(RELEASE); | |
motor2.run(RELEASE); | |
motor3.run(RELEASE); | |
motor4.run(RELEASE); | |
} | |
// ------------------------------------------------------------------------------ | |
void turnRight() // This function turns the robot right | |
{ | |
motor1.run(FORWARD); | |
motor2.run(BACKWARD); | |
motor3.run(FORWARD); | |
motor4.run(BACKWARD); | |
} | |
// ------------------------------------------------------------------------------ | |
void loop() { // This is the main program that will run over and over | |
long duration, inches; // Declare the variables "duration" and "inches"duration = pulseIn(pingPin, HIGH); | |
inches = ping(); // Set the inches variable to the float returned by the | |
ping() function. | |
Serial.print(inches); | |
Serial.print("in, "); | |
Serial.println(); | |
while (inches >8){ // While the robot is 8 inches away from an object. | |
inches = ping(); | |
forward(); // Move the robot forward. | |
} | |
haltMotors(); // Stop the motors for 2 seconds, before changing | |
direction. | |
delay(1000); | |
while (inches < 10){ // Until the robot is 10 inches away from the object, go | |
backward. | |
inches = ping(); | |
backward(); // Move the robot backward. | |
} | |
turnRight(); // Once the robot is done moving backward, turn the robot | |
right. | |
delay(1500); // Note! Change this value (greater or smaller) to adjust | |
how much the robot turns right | |
haltMotors(); | |
delay(1000); | |
} | |
long microsecondsToInches(long microseconds){ | |
return microseconds / 74 / 2; | |
} |
Here are the code that I already fixed it and it successfully compiled. If you have problem with #include <AFMotor.h> please download https://github.com/adafruit/Adafruit-Motor-Shield-library and open your sketch. Click on sketch and then select "Include Library" then Choose "Add Zip library" so you will browse to file you downloaded.
Thanks!
/*
Original code by Nick Brenn
Modified by Marc de Vinck
Make Projects Arduino-based 4WD robot
http://makeprojects.com/Project/Build-your-own-Arduino-Controlled-Robot-/577/1
*/
include <AFMotor.h>
AF_DCMotor motor1(1, MOTOR12_8KHZ);
AF_DCMotor motor2(2, MOTOR12_8KHZ);
AF_DCMotor motor3(3, MOTOR12_1KHZ);
AF_DCMotor motor4(4, MOTOR12_1KHZ);
const int pingPin = 19;
// ------------------------------------------------------------------------------
void setup()
{
Serial.begin(9600); // set up Serial library at 9600 bps
motor1.setSpeed(200); // Sets the speed for all the motors 1 - 4 (255 is the maximum speed)
motor2.setSpeed(200);
motor3.setSpeed(200);
motor4.setSpeed(200);
}
// ------------------------------------------------------------------------------
float ping() // This is the code that runs the PING ))) Sensor
{
long duration, inches;
pinMode(pingPin, OUTPUT);
digitalWrite(pingPin, LOW);
delayMicroseconds(2);
digitalWrite(pingPin, HIGH);
delayMicroseconds(5);
digitalWrite(pingPin, LOW);
pinMode(pingPin, INPUT);
duration = pulseIn(pingPin, HIGH);
long microsecondsToInches(long microseconds);
inches = microsecondsToInches(duration);
return inches;
} // ------------------------------------------------------------------------------
void forward() // This function moves all the wheels forward
{
motor1.run(FORWARD);
motor2.run(FORWARD);
motor3.run(FORWARD);
motor4.run(FORWARD);
}
// ------------------------------------------------------------------------------
void backward() // This function moves all the wheels backwards
{
motor1.run(BACKWARD);
motor2.run(BACKWARD);
motor3.run(BACKWARD);
motor4.run(BACKWARD);
}
// ------------------------------------------------------------------------------
void haltMotors() // This function stops all the motors (It is better to stop
//the motors before changing direction)
{
motor1.run(RELEASE);
motor2.run(RELEASE);
motor3.run(RELEASE);
motor4.run(RELEASE);
}
// ------------------------------------------------------------------------------
void turnRight() // This function turns the robot right
{
motor1.run(FORWARD);
motor2.run(BACKWARD);
motor3.run(FORWARD);
motor4.run(BACKWARD);
}
// ------------------------------------------------------------------------------
void loop() { // This is the main program that will run over and over
long duration, inches; // Declare the variables "duration" and "inches"duration = pulseIn(pingPin, HIGH);
inches = ping(); // Set the inches variable to the float returned by the ping()function
Serial.print(inches);
Serial.print("in, ");
Serial.println();
while (inches >8){ // While the robot is 8 inches away from an object.
inches = ping();
forward(); // Move the robot forward.
}
haltMotors(); // Stop the motors for 2 seconds, before changing direction.
delay(1000);
while (inches < 10){ // Until the robot is 10 inches away from the object, go backward.
inches = ping();
backward(); // Move the robot backward.
}
turnRight(); // Once the robot is done moving backward, turn the robot right.
delay(1500); // Note! Change this value (greater or smaller) to adjust
//how much the robot turns right
haltMotors();
delay(1000);
}
long microsecondsToInches(long microseconds){
return microseconds / 74 / 2;
}
Please tell me , is my code correct?
/IR + Ultrasonic Line follower robot (black line on white surface)
This robot also has ultrasonic range sensor that enables it to stop when any obstacle is on the black line.
keshri-prasanjeet, [email protected]/
//inputs:
# define LIR 2 //left ir sensor
define RIR 3 //right ir sensor
define echoPin 4 //echo pin of ping )))
//outputs:
define direction_L 5 //left forward
define direction_R 6 //right forward
define triggerPin 7 //trigger pin of ping )))
void setup() { //setup function
Serial.begin(9600); //serial communication
for(int i = 2; i < 5; i ++){ //initialize inputs:
pinMode(i, INPUT);
}
for(int i = 5; i < 8; i ++){//initialize outputs:
pinMode(i, OUTPUT);
}
Serial.println("ready"); //starting message
}
void loop() { //loop function
//reading sensors
int DLIR = digitalRead(LIR); //left ir
int DRIR = digitalRead(LIR); //right ir
//trigger pulse of ping )))
digitalWrite(triggerPin, LOW);
delay(5);
digitalWrite(triggerPin, HIGH);
delay(5);
digitalWrite(triggerPin, LOW);
float dist = pulseIn(echoPin, HIGH); //get time
dist = dist / 58; //scaling to cm
Serial.println(dist); //print distance
if(dist > 10){ //if no object on the path:
if(DLIR == HIGH && DRIR == HIGH){ //if robot is on the BLACK path
//go forward:
analogWrite(direction_L, 255);
analogWrite(direction_R, 255);
Serial.println("go forward");
}
else if(DLIR == HIGH && DRIR == LOW){ //right sensor missed the parth
//turn left:
analogWrite(direction_L, 128);
analogWrite(direction_R, 255);
Serial.println("turn left");
}
else if(DLIR == LOW && DRIR == HIGH){ //left sensor missed the parth
//turn right:
analogWrite(direction_L, 255);
analogWrite(direction_R, 128);
Serial.println("turn right");
}
else{ //path missed!
//stop:
analogWrite(direction_L, 0);
analogWrite(direction_R, 0);
Serial.println("parth missed!");
}
}
else{//object found
//stop:
analogWrite(direction_L, 0);
analogWrite(direction_R, 0);
Serial.println("object found");
}
delay(100);
}
Downloading, copy/pasting raw code created initial frustration with this code. The initial float pin() errors posted a few years ago are resolved by simply retyping them in the Arduino IDE. You'll see the float text turn green - and then you realize what a noob you are ;)
If you are equally noobish as myself, you may get the stray /357 error. I invite you to look to see where the line breaks are in the code. I had to clear 8 lines, but if you pay attention you'll see the problems.
Thanks to Make and the contributors for keeping a fun project up a running for several years!
for the lazy ones @2018
/*
Original code by Nick Brenn
Modified by Marc de Vinck
Make Projects Arduino-based 4WD robot
http://makeprojects.com/Project/Build-your-own-Arduino-Controlled-Robot-/577/1
*/
#include <AFMotor.h>
AF_DCMotor motor1(1, MOTOR12_8KHZ);
AF_DCMotor motor2(2, MOTOR12_8KHZ);
AF_DCMotor motor3(3, MOTOR12_1KHZ);
AF_DCMotor motor4(4, MOTOR12_1KHZ);
const int pingPin = 19;
// ------------------------------------------------------------------------------
void setup()
{
Serial.begin(9600); // set up Serial library at 9600 bps
motor1.setSpeed(200); // Sets the speed for all the motors 1 - 4 (255 is the maximum speed)
motor2.setSpeed(200);
motor3.setSpeed(200);
motor4.setSpeed(200);
}
// ------------------------------------------------------------------------------
float ping() // This is the code that runs the PING ))) Sensor
{
long duration, inches;
pinMode(pingPin, OUTPUT);
digitalWrite(pingPin, LOW);
delayMicroseconds(2);
digitalWrite(pingPin, HIGH);
delayMicroseconds(5);
digitalWrite(pingPin, LOW);
pinMode(pingPin, INPUT);
duration = pulseIn(pingPin, HIGH);
long microsecondsToInches(long microseconds);
inches = microsecondsToInches(duration);
return inches;
} // ------------------------------------------------------------------------------
void forward() // This function moves all the wheels forward
{
motor1.run(FORWARD);
motor2.run(FORWARD);
motor3.run(FORWARD);
motor4.run(FORWARD);
}
// ------------------------------------------------------------------------------
void backward() // This function moves all the wheels backwards
{
motor1.run(BACKWARD);
motor2.run(BACKWARD);
motor3.run(BACKWARD);
motor4.run(BACKWARD);
}
// ------------------------------------------------------------------------------
void haltMotors() // This function stops all the motors (It is better to stop the motors before changing direction)
{
motor1.run(RELEASE);
motor2.run(RELEASE);
motor3.run(RELEASE);
motor4.run(RELEASE);
}
// ------------------------------------------------------------------------------
void turnRight() // This function turns the robot right
{
motor1.run(FORWARD);
motor2.run(BACKWARD);
motor3.run(FORWARD);
motor4.run(BACKWARD);
}
// ------------------------------------------------------------------------------
void loop() { // This is the main program that will run over and over
long duration, inches; // Declare the variables "duration" and "inches"duration = pulseIn(pingPin, HIGH);
inches = ping(); // Set the inches variable to the float returned by the ping() function.
Serial.print(inches);
Serial.print("in, ");
Serial.println();
while (inches >8){ // While the robot is 8 inches away from an object.
inches = ping();
forward(); // Move the robot forward.
}
haltMotors(); // Stop the motors for 2 seconds, before changing direction.
delay(1000);
while (inches < 10){ // Until the robot is 10 inches away from the object, go backward.
inches = ping();
backward(); // Move the robot backward.
}
turnRight(); // Once the robot is done moving backward, turn the robot right.
delay(1500); // Note! Change this value (greater or smaller) to adjust how much the robot turns right
haltMotors();
delay(1000);
}
long microsecondsToInches(long microseconds){
return microseconds / 74 / 2;
}
Hi Nick,
Just a quick question. The Ping sensor, HC-SR04, has 4 pins: Vcc, Trig, Echo, Gnd. In your sketch "const int pingPin = 19;" You use pin 19 to connect the sensor to the Arduino. Because it shows pin 19 were you using an Arduino Mega 2560 to run the sketch? And, I don't understand how to set up the HC-SR04 with only one pin. Are both Trig and Echo connected to pin 19 on the Mega 2560? If I am using an Arduino Uno, which pin would I use? Any help would be most appreciated. Thanks.
Dan Urbauer
[email protected]
P.S. Just occurred to me, maybe your not using the HC-SR04, but some other sensor.
delete float and write again