Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //RECEIVER CODE
- //Library: TMRh20/RF24, https://github.com/tmrh20/RF24/
- #include <SPI.h>
- #include <nRF24L01.h>
- #include <RF24.h>
- RF24 radio(7, 8); // CE, CSN
- const byte address[6] = "00001";
- char receivedData[32] = "";
- int xAxis, yAxis;
- // Ultrasonic Sensor
- int trig1 = 13, trig2 = 9, trig3 = 4, echo1 = 12, echo2 = 10, echo3 = 11;
- long duration, distance, slot1, slot2, slot3;
- // motor 1
- int enA = 5;
- int in1 = 22;
- int in2 = 24;
- // motor 2
- int enB = 6;
- int in3 = 26;
- int in4 = 28;
- //
- boolean btn1state = 0;
- boolean btn2state = 0;
- int motorSpeedA = 0;
- int motorSpeedB = 0;
- // Driver function call them with the delay you want passed into them.
- void fullStop(int timing) {
- Serial.println("Stopping");
- delay(timing);
- digitalWrite(in1, LOW);
- digitalWrite(in2, LOW);
- digitalWrite(in3, LOW);
- digitalWrite(in4, LOW);
- }
- void forward(int timing) {
- digitalWrite(in1, HIGH);
- digitalWrite(in2, LOW);
- analogWrite(enA, 200); //drive forward
- digitalWrite(in3, LOW);
- digitalWrite(in4, HIGH);
- analogWrite(enB, 200);
- Serial.println("Moving Forward");
- delay(timing);
- digitalWrite(in1, LOW);
- digitalWrite(in2, LOW);
- digitalWrite(in3, LOW);
- digitalWrite(in4, LOW);
- }
- void backwords(int timing) {
- digitalWrite(in1, LOW);
- digitalWrite(in2, HIGH);
- analogWrite(enA, 200); //drive backwards for 0,4sec
- digitalWrite(in3, HIGH);
- digitalWrite(in4, LOW);
- analogWrite(enB, 200);
- Serial.println("Moving Backwords");
- delay(timing);
- digitalWrite(in1, LOW);
- digitalWrite(in2, LOW);
- digitalWrite(in3, LOW);
- digitalWrite(in4, LOW);
- }
- void turnLeft(int timing) {
- digitalWrite(in1, LOW);
- digitalWrite(in2, HIGH);
- analogWrite(enA, 200); //makes the car turn left for 0,8sec
- digitalWrite(in3, LOW);
- digitalWrite(in4, HIGH);
- analogWrite(enB, 200);
- Serial.println("turning Left");
- delay(timing);
- digitalWrite(in1, LOW);
- digitalWrite(in2, LOW);
- digitalWrite(in3, LOW);
- digitalWrite(in4, LOW);
- }
- void turnRight(int timing) {
- digitalWrite(in1, LOW);
- digitalWrite(in2, HIGH);
- analogWrite(enA, 200); //make the car turn right for 0,8sec
- digitalWrite(in3, LOW);
- digitalWrite(in4, HIGH);
- analogWrite(enB, 200);
- Serial.println("turning Right");
- delay(timing);
- digitalWrite(in1, LOW);
- digitalWrite(in2, LOW);
- digitalWrite(in3, LOW);
- digitalWrite(in4, LOW);
- }
- ////////End driver functions.
- void setup() {
- pinMode(trig1, OUTPUT); pinMode(echo1, INPUT);
- pinMode(trig2, OUTPUT); pinMode(echo2, INPUT);
- pinMode(trig3, OUTPUT); pinMode(echo3, INPUT);
- pinMode(enA, OUTPUT);
- pinMode(enB, OUTPUT);
- pinMode(in1, OUTPUT);
- pinMode(in2, OUTPUT);
- pinMode(in3, OUTPUT);
- pinMode(in4, OUTPUT);
- radio.begin();
- radio.openReadingPipe(0, address);
- radio.setPALevel(RF24_PA_MIN);
- radio.startListening();
- }
- void ultra(int trig, int echo)
- {
- digitalWrite(trig, LOW);
- delay(10);
- digitalWrite(trig, HIGH);
- delay(10);
- digitalWrite(trig, LOW);
- duration = pulseIn(echo, HIGH);
- distance = (duration / 2) * 0.0341;
- }
- void U1()
- {
- ultra(trig1, echo1);
- frontsensor = distance;
- }
- void U2()
- {
- ultra(trig2, echo2);
- rightsensor = distance;
- }
- void U3()
- {
- ultra(trig3, echo3);
- leftsensor = distance;
- }
- void loop() {
- if (radio.available()) {
- radio.read(&btn1state, sizeof(btn1state));
- delay(15);
- radio.read(&btn2state, sizeof(btn2state));
- delay(15);
- radio.read(&receivedData, sizeof(receivedData));
- xAxis = atoi(&receivedData[0]);
- delay(15);
- radio.read(&receivedData, sizeof(receivedData));
- yAxis = atoi(&receivedData[0]);
- delay(15);
- }
- //MANUAL MODE STARTS HERE///////////////////////////////////////////////////////
- if (btn1state == HIGH) {
- if (yAxis > 1010) {
- digitalWrite(in1, HIGH);
- digitalWrite(in2, LOW);
- digitalWrite(in3, LOW);
- digitalWrite(in4, HIGH);
- motorSpeedA = map(yAxis, 470, 0, 0, 255);
- motorSpeedB = map(yAxis, 470, 0, 0, 255);
- }
- else if (yAxis < 20) {
- digitalWrite(in1, LOW);
- digitalWrite(in2, HIGH);
- digitalWrite(in3, HIGH);
- digitalWrite(in4, LOW);
- motorSpeedA = map(yAxis, 550, 1023, 0, 255);
- motorSpeedB = map(yAxis, 550, 1023, 0, 255);
- }
- else if (xAxis > 1010) {
- digitalWrite(in1, LOW);
- digitalWrite(in2, HIGH);
- digitalWrite(in3, LOW);
- digitalWrite(in4, HIGH);
- motorSpeedA = map(xAxis, 470, 0, 0, 255);
- motorSpeedB = map(xAxis, 470, 0, 0, 255);
- }
- else if (xAxis < 20) {
- digitalWrite(in1, HIGH);
- digitalWrite(in2, LOW);
- digitalWrite(in3, HIGH);
- digitalWrite(in4, LOW);
- motorSpeedA = map(xAxis, 550, 1023, 0, 255);
- motorSpeedB = map(xAxis, 550, 1023, 0, 255);
- }
- else {
- motorSpeedA = 0;
- motorSpeedB = 0;
- }
- analogWrite(enA, motorSpeedA);
- analogWrite(enB, motorSpeedB);
- }
- //AUTOMATIC MODE STARTS HERE///////////////////////////////////////////////////////
- if (btn2state == HIGH) {
- U1(), U2(), U3();
- if (frontsensor > 35 && rightsensor > 35 && leftsensor > 35) {
- forward(1000);
- }
- if (frontsensor < 35) {
- fullStop(500);
- backwords(500);
- fullStop(500);
- turnRight(800);
- }
- if (rightsensor < 25) {
- fullStop(800);
- turnLeft(800);
- }
- if (leftsensor < 25) {
- fullStop(1000);
- turnRight(800);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement