#include #include "configuration.h" Servo head; /*motor control*/ void go_Advance(void) //Forward { digitalWrite(dir1PinL, HIGH); digitalWrite(dir2PinL,LOW); digitalWrite(dir1PinR,HIGH); digitalWrite(dir2PinR,LOW); } void go_Left() //Turn left { digitalWrite(dir1PinL, HIGH); digitalWrite(dir2PinL,LOW); digitalWrite(dir1PinR,LOW); digitalWrite(dir2PinR,HIGH); } void go_Right() //Turn right { digitalWrite(dir1PinL, LOW); digitalWrite(dir2PinL,HIGH); digitalWrite(dir1PinR,HIGH); digitalWrite(dir2PinR,LOW); } void go_Back() //Reverse { digitalWrite(dir1PinL, LOW); digitalWrite(dir2PinL,HIGH); digitalWrite(dir1PinR,LOW); digitalWrite(dir2PinR,HIGH); } void stop_Stop() //Stop { digitalWrite(dir1PinL, LOW); digitalWrite(dir2PinL,LOW); digitalWrite(dir1PinR,LOW); digitalWrite(dir2PinR,LOW); } /*set motor speed */ void set_Motorspeed(int speed_L,int speed_R) { analogWrite(speedPinL,speed_L); analogWrite(speedPinR,speed_R); } void buzz_ON() //open buzzer { digitalWrite(BUZZ_PIN, LOW); } void buzz_OFF() //close buzzer { digitalWrite(BUZZ_PIN, HIGH); } void alarm(){ buzz_ON(); delay(100); buzz_OFF(); } /*detection of ultrasonic distance*/ int watch(){ long howfar; digitalWrite(Trig_PIN,LOW); delayMicroseconds(5); digitalWrite(Trig_PIN,HIGH); delayMicroseconds(15); digitalWrite(Trig_PIN,LOW); howfar=pulseIn(Echo_PIN,HIGH); howfar=howfar*0.01657; //how far away is the object in cm //Serial.println((int)howfar); return round(howfar); } //Meassures distances to the right, left, front, left diagonal, right diagonal and asign them in cm to the variables rightscanval, //leftscanval, centerscanval, ldiagonalscanval and rdiagonalscanval (there are 5 points for distance testing) void watchsurrounding(){ centerscanval = watch(); if(centerscanval100){ //Watch if something is around every 100 loops while moving forward watchsurrounding(); if(leftscanvaldistancelimit){ thereis=0;} //Count is restarted if (thereis > 25){ stop_Stop(); // Since something is ahead, stop moving. thereis=0; } } void setup() { /*setup L298N pin mode*/ pinMode(dir1PinL, OUTPUT); pinMode(dir2PinL, OUTPUT); pinMode(speedPinL, OUTPUT); pinMode(dir1PinR, OUTPUT); pinMode(dir2PinR, OUTPUT); pinMode(speedPinR, OUTPUT); stop_Stop();//stop move /*init HC-SR04*/ pinMode(Trig_PIN, OUTPUT); pinMode(Echo_PIN,INPUT); /*init buzzer*/ pinMode(BUZZ_PIN, OUTPUT); digitalWrite(BUZZ_PIN, HIGH); buzz_OFF(); digitalWrite(Trig_PIN,LOW); /*init servo*/ head.attach(SERVO_PIN); head.write(90); /*baud rate*/ Serial.begin(9600); } void loop() { auto_avoidance(); }