Stap 10: code
#include
#include
Hieronder zijn de symbolische constanten. In plaats van te typen in een niet-sensical pincode telkens wanneer die we iets willen doen kunnen we schrijven een eenvoudig te begrijpen naam waarmee de pin, de compiler zal vervolgens vervangen door de namen van de nummers
#define LeftMotorForward 8
#define LeftMotorBackward 9
#define RightMotorForward 10
#define RightMotorBackward 11
#define USTrigger 3
#define USEcho 2
#define MaxDistance 100
#define LED 13
Hier hebben we twee 'objecten', één voor de servo en één voor de ultrasone sensor
Servo de servo;
NewPing sonar (USTrigger, USEcho, MaxDistance);
Hieronder creëren we niet-ondertekende integer variabelen die we zullen gebruiken later in de code. Ze zijn niet-ondertekende aangezien zij zal alleen postive waarden
unsigned int de duur;
unsigned int afstand;
unsigned int FrontDistance;
unsigned int LeftDistance;
unsigned int RightDistance;
unsigned int tijd;
unsigned int CollisionCounter;
void setup //This blok gebeurt keer bij het opstarten
{
Serial.begin(9600); Ik heb opgenomen van de seriële worden geïnitialiseerd, maar merkte het uit, als u fouten wilt opsporen en afdrukinformatie naar de seriële monitor alleen uncomment
Hier zijn we het instellen van de pin-modi. Zoals we zullen afgeven van signalen van de pins instellen we hen als uitgang
pinMode (LeftMotorForward, uitvoer);
pinMode (LeftMotorBackward, uitvoer);
pinMode (RightMotorForward, uitvoer);
pinMode (RightMotorBackward, uitvoer);
pinMode (LED, uitvoer);
Servo.attach(6); De servo is aangesloten op pin 4
}
void loop //This blok zich herhaalt terwijl de Arduino is ingeschakeld
{
Servo.write(90); De servo om het hoofd van de voorkant te draaien
Scan(); Ga naar de scan-functie
FrontDistance = afstand; De variabele FrontDistance ingesteld op de waarde van de afstand die zijn teruggekeerd uit de scan-functie
Serial.println ("Front afstand =");
Serial.Print(distance);
Als (FrontDistance > 60 || FrontDistance == 0) //If er is niets infront van de robot binnen 15 cm of de afstand waarde is 0 (die voor de newping-bibliotheek geeft geen ping was geretourneerd) vervolgens...
{
moveForward(); Ga naar de moveForward-functie
}
anders //Else (als er iets infront van de robot binnen 40cm) dan...
{
CollisionCounter = CollisionCounter + 1;
moveStop(); Ga naar de moveStop-functie
Navigate();
}
}
ongeldig moveForward() //This functie vertelt de robot om vooruit te gaan
{
Serial.println("");
Serial.println ("vooruit");
digitalWrite (LeftMotorBackward, laag);
digitalWrite (LeftMotorForward, hoge);
digitalWrite (RightMotorBackward, laag);
digitalWrite (RightMotorForward, hoge);
}
ongeldig moveBackward() //This functie vertelt de robot naar achteren verplaatsen
{
Serial.println("");
Serial.println ("Moving achteruit");
digitalWrite (LeftMotorForward, laag);
digitalWrite (LeftMotorBackward, hoge);
digitalWrite (RightMotorForward, laag);
digitalWrite (RightMotorBackward, hoge);
}
ongeldig moveLeft() //This functie vertelt de robot linksaf
{
Serial.println("");
Serial.println ("Moving links");
digitalWrite (LeftMotorForward, laag);
digitalWrite (LeftMotorBackward, hoge);
digitalWrite (RightMotorBackward, laag);
digitalWrite (RightMotorForward, hoge);
}
ongeldig moveRight() //This functie vertelt de robot naar rechtsaf
{
Serial.println("");
Serial.println ("Moving rechts");
digitalWrite (LeftMotorBackward, laag);
digitalWrite (LeftMotorForward, hoge);
digitalWrite (RightMotorForward, laag);
digitalWrite (RightMotorBackward, hoge);
}
ongeldig moveStop() //This functie vertelt de robot te stoppen met bewegen
{
Serial.println("");
Serial.println("stopping");
digitalWrite (LeftMotorBackward, laag);
digitalWrite (LeftMotorForward, laag);
digitalWrite (RightMotorForward, laag);
digitalWrite (RightMotorBackward, laag);
}
ongeldig scan() //This functie bepaalt dat de afstand dingen zijn uit de buurt van de ultrasone sensor
{
Serial.println("");
Serial.println("scanning");
Tijd = sonar.ping();
afstand = tijd / US_ROUNDTRIP_CM;
delay(500);
}
VOID navigate()
{
Serial.println ("er is een obstakel!");
Servo.write(167); Verplaats de servo naar de linkerkant (mijn kleine servo's niet graag gaan tot 180 zodat ik speelde rond met de waarde totdat het werkte keurig)
delay(1000); Wacht een halve seconde voor de servo om er te komen
Scan(); Ga naar de scan-functie
LeftDistance = afstand; De variabele LeftDistance ingesteld op de afstand aan de linkerkant
Serial.println ("links afstand =");
Serial.Print(distance);
Servo.write(0); De servo naar rechts verplaatsen
delay(1000); Wacht een halve seconde voor de servo om er te komen
Scan(); Ga naar de scan-functie
RightDistance = afstand; De variabele RightDistance ingesteld op de afstand aan de rechterkant
Serial.println ("recht afstand =");
Serial.Print(distance);
Als (abs (RightDistance - LeftDistance) < 5)
{
moveBackward(); Ga naar de moveBackward-functie
delay(200); Onderbreken van het programma voor 200 milliseconden zodat de robot omkeren
moveRight(); Ga naar de moveRight functie
delay(100); Onderbreken van het programma voor 200 milliseconden zodat de robot rechtsaf
}
anders if(RightDistance < LeftDistance) //If de afstand aan de rechterkant lager is dan die aan de linkerkant vervolgens...
{
moveLeft(); Ga naar de moveLeft functie
delay(100); Onderbreken van het programma voor een halve seconde te laten de robot zetten
}
anders if(LeftDistance < RightDistance) //Else als de afstand aan de linkerkant kleiner dan die aan de rechterkant dan is...
{
moveRight(); Ga naar de moveRight functie
delay(100); Onderbreken van het programma voor een halve seconde te laten de robot zetten
}