Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /****************************
- Connections:
- -----------------------------
- [Arduino Uno] --> [L298N Red Board]:
- 11 --> ENA
- 9 --> IN1
- 8 --> IN2
- 7 --> IN3
- 6 --> IN4
- 10 --> ENB
- [Arduino Uno] --> [Ultrasonic Sensor]:
- 5V --> Vcc
- A1 --> Trig
- A0 --> Echo
- GND --> GND
- [Arduino Uno] --> [IR Sensor (Left)]:
- GND --> GND
- 5V --> VCC
- 2 --> OUT
- [Arduino Uno] --> [IR Sensor (Center)]:
- GND --> GND
- 5V --> VCC
- 3 --> OUT
- [Arduino Uno] --> [IR Sensor (Right)]:
- GND --> GND
- 5V --> VCC
- 4 --> OUT
- -----------------------------
- *****************************/
- const int trigPin = A1;
- const int echoPin = A0;
- // defines variables
- long duration;
- int distance;
- #define SensorLeft 2 //input pin of left sensor
- #define SensorMiddle 3 //input pin of middle sensor
- #define SensorRight 4 //input pin of right sensor
- unsigned char SL; //state of left sensor
- unsigned char SM; //state of middle sensor
- unsigned char SR; //state of right sensor
- #define Lpwm_pin 10 //ENB
- #define Rpwm_pin 11 //ENA
- int pinLB = 6; //IN4
- int pinLF = 7; //IN3
- int pinRB = 8; //IN2
- int pinRF = 9; //IN1
- unsigned char Lpwm_val = 100;//255 = max
- unsigned char Rpwm_val = 100;//255 = max
- void M_Control_IO_config(void)
- {
- pinMode(trigPin, OUTPUT);
- pinMode(echoPin, INPUT);
- pinMode(SensorLeft, INPUT);
- pinMode(SensorMiddle, INPUT);
- pinMode(SensorRight, INPUT);
- pinMode(pinLB, OUTPUT);
- pinMode(pinLF, OUTPUT);
- pinMode(pinRB, OUTPUT);
- pinMode(pinRF, OUTPUT);
- pinMode(Lpwm_pin, OUTPUT); // pin 11 (PWM)
- pinMode(Rpwm_pin, OUTPUT); // pin 10 (PWM)
- }
- void Set_Speed(unsigned char Left, unsigned char Right)
- {
- analogWrite(Lpwm_pin, Left);
- analogWrite(Rpwm_pin, Right);
- }
- void turnR()
- {
- digitalWrite(pinRB, LOW);
- digitalWrite(pinRF, HIGH);
- digitalWrite(pinLB, LOW);
- digitalWrite(pinLF, HIGH);
- Serial.println("RIGHT");
- }
- void back()
- {
- digitalWrite(pinRB, LOW);
- digitalWrite(pinRF, HIGH);
- digitalWrite(pinLB, HIGH);
- digitalWrite(pinLF, LOW);
- Serial.println("Back");
- }
- void advance()
- {
- digitalWrite(pinRB, HIGH);
- digitalWrite(pinRF, LOW );
- digitalWrite(pinLB, LOW);
- digitalWrite(pinLF, HIGH);
- Serial.println("Front");
- }
- void stopp()
- {
- digitalWrite(pinRB, HIGH);
- digitalWrite(pinRF, HIGH);
- digitalWrite(pinLB, HIGH);
- digitalWrite(pinLF, HIGH);
- Serial.println("STOP!!!!!!");
- }
- void turnL()
- {
- digitalWrite(pinRB, HIGH);
- digitalWrite(pinRF, LOW);
- digitalWrite(pinLB, HIGH);
- digitalWrite(pinLF, LOW);
- Serial.println("LEFT");
- }
- void hornON() {
- digitalWrite(4, 1);
- }
- void hornOFF() {
- digitalWrite(4, 0);
- }
- void setup()
- {
- //Serial.begin(9600);
- pinMode(4, OUTPUT);
- M_Control_IO_config();
- Set_Speed(Lpwm_val, Rpwm_val);
- stopp();
- delay(5000);
- }
- void Sensor_Scan(void)
- {
- digitalWrite(trigPin, LOW);
- delayMicroseconds(2);
- digitalWrite(trigPin, HIGH);
- delayMicroseconds(10);
- digitalWrite(trigPin, LOW);
- duration = pulseIn(echoPin, HIGH);
- distance = duration * 0.034 / 2;
- SL = digitalRead(SensorLeft);
- SM = digitalRead(SensorMiddle);
- SR = digitalRead(SensorRight);
- //Serial.println(distance);
- //Serial.print(SL);
- //Serial.print(SM);
- //Serial.println(SR);
- }
- void loop()
- {
- Sensor_Scan();
- if (distance > 10) {
- hornOFF();
- ///////////////////////////////////////////////////////////////////////////////
- if (SM == HIGH)// middle sensor in black area
- {
- if (SL == LOW & SR == HIGH) // black on left, white on right, turn left
- {
- turnR();
- }
- else if (SR == LOW & SL == HIGH) // white on left, black on right, turn right
- {
- turnL();
- }
- else // white on both sides, going forward
- {
- advance();
- }
- }
- ///////////////////////////////////////////////////////////////////////////////
- else // middle sensor on white area
- {
- if (SL == LOW & SR == HIGH) // black on left, white on right, turn left
- {
- turnR();
- }
- else if (SR == LOW & SL == HIGH) // white on left, black on right, turn right
- {
- turnL();
- }
- else // all white, stop
- {
- // back();
- delay(100);
- stopp() ;
- }
- }
- ///////////////////////////////////////////////////////////////////////////////
- }
- else {
- stopp();
- hornON();
- delay(1000);
- hornOFF();
- delay(1000);
- }
- // delay(1000);
- }//end of loop
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement