Robotti auton koodi

/**

 Bruno Santos, 2013

 feiticeir0@whatgeek.com.pt

 Small code to test DC motors - 2x with a L298 Dual H-Bridge Motor Driver

Kimmo ja Pauli muokkasivat 2019

Free to share

**/

#define TRIGGER_PIN  10 // Arduino pin tied to trigger pin on the ultrasonic sensor.

#define ECHO_PIN 11  // Arduino pin tied to echo pin on the ultrasonic sensor.

#define MAX_DISTANCE 300 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm.


#include <NewPing.h>

#include <Servo.h>


Servo myservo;

int pos = 0;


NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance.

int distance = 2;


//Testing the DC Motors

//Define Pins

//Motor A

int enableA = 3;

int pinA1 = 4;

int pinA2 = 5;

//Motor B

int enableB = 8;

int pinB1 = 6;

int pinB2 = 7;




void setup() {

 Serial.begin (9600);

 //configure pin modes

 pinMode (enableA, OUTPUT);

 pinMode (pinA1, OUTPUT);

 pinMode (pinA2, OUTPUT);

 pinMode (enableB, OUTPUT);

 pinMode (pinB1, OUTPUT);

 pinMode (pinB2, OUTPUT);

 myservo.attach(9);

}



void forward2() {

 //enabling motor A

 Serial.println ("Enabling Motor A");

 digitalWrite (enableA, HIGH);

 digitalWrite (enableB, HIGH);

 //do something

 //forward

 Serial.println ("Forward");

 digitalWrite (pinA2, HIGH);

 digitalWrite (pinA1, LOW);

 digitalWrite (pinB1, HIGH);

 digitalWrite (pinB2, LOW);


 delay (2000);

 digitalWrite (pinA2, LOW);

 digitalWrite (pinA1, LOW);

 digitalWrite (pinB1, LOW);

 digitalWrite (pinB2, LOW);


 delay (1000);


 digitalWrite (pinA1, HIGH);

 digitalWrite (pinA2, LOW);

 digitalWrite (pinB1, HIGH);

 digitalWrite (pinB2, LOW);


 delay (1000);


 digitalWrite (pinA2, LOW);

 digitalWrite (pinA1, LOW);

 digitalWrite (pinB1, LOW);

 digitalWrite (pinB2, LOW);


delay(1000);



 

 digitalWrite (pinA2, HIGH);

 digitalWrite (pinA1, LOW);

 digitalWrite (pinB1, HIGH);

 digitalWrite (pinB2, LOW);


 delay (2000);


digitalWrite (enableB, LOW);

digitalWrite (enableA, LOW);


}


void forward() {

 //enabling motor A

 Serial.println ("Enabling Motor A+B");

 digitalWrite (enableA, HIGH);

 digitalWrite (enableB, HIGH);

 //do something

 //forward

 Serial.println ("Forward");

 digitalWrite (pinA2, HIGH);

 digitalWrite (pinA1, LOW);

 digitalWrite (pinB1, HIGH);

 digitalWrite (pinB2, LOW);

}


void stop() {

 Serial.println ("Stop");

 digitalWrite (pinA2, LOW);

 digitalWrite (pinA1, LOW);

 digitalWrite (pinB1, LOW);

 digitalWrite (pinB2, LOW);


 delay (200);


 digitalWrite (enableB, LOW);

 digitalWrite (enableA, LOW);

}



void vaihda_suunta() {

 int oikea=0;

 int vasen=0;

 pos=10;

 myservo.write(pos);   // tell servo to go to position in variable 'pos'

 delay(500);

 vasen = sonar.ping_cm();

 delay(15);

 pos = 170;

 myservo.write(pos);   // tell servo to go to position in variable 'pos'

 delay(500);

 oikea = sonar.ping_cm();

 delay(15);

 pos = 90;

 myservo.write(pos);   // tell servo to go to position in variable 'pos'

 delay(500);

 if (oikea == 0) oikea = 500;

 if (vasen == 0) vasen = 500;

 if (oikea < vasen) {

Serial.println ("Käännyn Oikealle!");

Serial.println (oikea);

delay(1000);

 }

 else {

 Serial.println ("Käännyn Vasemmalle");

 Serial.println (vasen);

delay(1000);

 }

}


void loop() {

 distance = sonar.ping_cm();

 Serial.println(distance);

 if ((distance < 30) && (distance > 2) ){

  stop();

  vaihda_suunta();

} else {

  //forward();

}

 delay (50);

}