Argus (3 / 5 steg)
Steg 3: programmering
kodningen som jag använde är en från
Jesper Birk
autonoma bil
Skapad av Jesper Birk - 2014
int motorPin1 = 6; motoriska tråd ansluten till digital stift 5
int motorPin2 = 5; motoriska tråd ansluten till digital stift 6
int motorPin3 = 7. styrning motor tråd ansluten till digital stift 7
int motorPin4 = 8; styrning motor tråd ansluten till digital stift 8
int steeringMotorSpeed = 150; Ställa in standard makt att skicka till styrning motor
int avoidDistance = 25;
int endAvoidDistance = 30.
int goToReverseDistance = 45;
int reverseTime = 2000.
int fullTrottleMinDistance = 150;
int fullTrottleSpeed = 220;
int cruiseSpeed = 160;
int avoidSpeed = 120;
int reverseSpeed = 130;
int sensorDelay = 100; //
lång randNumber;
int avoidDirection = 1;
int avoidCirclesBeforeDirectionChange = 10;
int countDown = 1;
int distanceCountDown = 1;
#include "Ultrasonic.h"
Ultrasonic ultrasonic(12,13);
int avstånd = (ultraljud. Ranging(cm));
Metoden setup() körs en gång, när skissen startar
void setup() {
initiera seriell kommunikation på 9600 bitar per sekund:
Serial.BEGIN(9600);
randomSeed(analogRead(0));
initiera digital stiften som en utgång:
pinMode (motorPin1, produktionen);
pinMode (motorPin2, produktionen);
pinMode (motorPin3, produktionen);
pinMode (motorPin4, produktionen);
}
//////////// LOOP ////////////
void loop()
{
Serial.println ("start loop");
Serial.println (ultraljud. Ranging(cm));
choseMode();
avståndet = (ultraljud. Ranging(cm));
OMVÄND LÄGE / / /
om (avstånd < = goToReverseDistance) {
avoidDirection = avoidDirection * -1;
While(Distance < avoidDistance) {
Serial.println ("start bakåt");
IF(avoidDirection == 1) {/ / slå ett sätt
analogWrite (motorPin3, steeringMotorSpeed);
digitalWrite (motorPin4, låg);
} annat {/ /... eller tvärtom
analogWrite (motorPin4, steeringMotorSpeed);
digitalWrite (motorPin3, låg);
}
analogWrite (motorPin2, reverseSpeed); roterar motor - bakåt
digitalWrite (motorPin1, låg);
Delay(reverseTime); för tiden i reverseTime
Delay(sensorDelay);
avståndet = (ultraljud. Ranging(cm));
// }
digitalWrite (motorPin2, låg); stoppa motorer
digitalWrite (motorPin3, låg);
digitalWrite (motorPin4, låg);
avoidDirection = avoidDirection * -1; Switch styrning riktning
avståndet = (ultraljud. Ranging(cm));
}
///////////////////////////////////////////////
UNDVIKA LÄGE / / /
avståndet = (ultraljud. Ranging(cm));
IF(Distance < avoidDistance) {
Serial.println ("start undvika");
avståndet = (ultraljud. Ranging(cm));
countDown = avoidCirclesBeforeDirectionChange;
distanceCountDown = avstånd;
medan (avstånd < = endAvoidDistance & & avstånd > goToReverseDistance) {
IF(avoidDirection == 1) {
analogWrite (motorPin3, steeringMotorSpeed); vända ett sätt
digitalWrite (motorPin4, låg);
} annat {
analogWrite (motorPin4, steeringMotorSpeed); eller vända den andra vägen
digitalWrite (motorPin3, låg);
}
analogWrite (motorPin1, avoidSpeed); roterar motor
digitalWrite (motorPin2, låg); Ange Pin motorPin2 låg
Delay(sensorDelay);
avståndet = (ultraljud. Ranging(cm));
IF(Distance < distanceCountDown) {countDown--;} / / om hindret är att komma närmare - räkna ner till ändra riktning
om (nedräkning < 1) {
avoidDirection = avoidDirection * -1; Switch styrning riktning
countDown = avoidCirclesBeforeDirectionChange;
distanceCountDown = avstånd;
}
Serial.println(Distance);
Serial.println(avoidDirection);
} / / end medan (Undvik)
digitalWrite (motorPin3, låg);
digitalWrite (motorPin4, låg);
}
///////////////////////////////
CRUISE MODE / / /
avståndet = (ultraljud. Ranging(cm));
medan (avstånd > avoidDistance & & avstånd < fullTrottleMinDistance) {
analogWrite (motorPin1, cruiseSpeed); roterar motor
digitalWrite (motorPin2, låg); Ange Pin motorPin2 låg
Delay(sensorDelay);
avståndet = (ultraljud. Ranging(cm));
Serial.println("Cruise");
Serial.println(Distance);
} / / end medan
FULL FART LÄGE / / /
avståndet = (ultraljud. Ranging(cm));
While(Distance > fullTrottleMinDistance) {
analogWrite (motorPin1, fullTrottleSpeed); roterar motor
digitalWrite (motorPin2, låg); Ange Pin motorPin2 låg
Delay(sensorDelay);
avståndet = (ultraljud. Ranging(cm));
Serial.println("full");
Serial.println(Distance);
} / / end medan
Serial.println ("starta om loop");
Serial.println(Distance);
}