Arduino robot i 5 min (10 / 10 steg)
Steg 10: kod
#include
#include
Nedan är de symboliska konstanterna. I stället för att skriva i en icke-sensical pin-kod varje gång vi vill göra något vi kan skriva ett lätt att förstå namn som representerar stiftet, kompilatorn kommer sedan ersätta namnen med siffrorna
#define LeftMotorForward 8
#define LeftMotorBackward 9
#define RightMotorForward 10
#define RightMotorBackward 11
#define USTrigger 3
#define USEcho 2
#define MaxDistance 100
#define LED 13
Här har vi skapat två "objekt", en för servo och en för ultrasonic sensor
Servo servo;
NewPing sonar (USTrigger, USEcho, MaxDistance);
Nedan skapar vi osignerat heltal variabler som vi kommer att använda senare i koden. De är osignerade som de kommer bara att ha positiva värden
unsigned int varaktighet;
unsigned int avstånd;
unsigned int FrontDistance;
unsigned int LeftDistance;
unsigned int RightDistance;
unsigned int tid;
unsigned int CollisionCounter;
void setup() //This block händer en gång vid start
{
Serial.BEGIN(9600); Jag har inkluderat den seriella initieringen men kommenterade det, om du vill felsöka och tryckta information till seriell monitor bara avkommentera
Här ställer vi in pin lägen. Som vi kommer att skicka ut signaler från stiften vi ställa in dem som utgångar
pinMode (LeftMotorForward, OUTPUT);
pinMode (LeftMotorBackward, OUTPUT);
pinMode (RightMotorForward, OUTPUT);
pinMode (RightMotorBackward, OUTPUT);
pinMode (LED, OUTPUT);
servo.attach(6); Servo är kopplad till stift 4
}
void loop() //This block upprepar sig medan Arduino är påslagen
{
servo.write(90); Rotera servo för att möta främre
Scan(); Gå till funktionen scan
FrontDistance = avstånd; Ange värde avstånd återvände från scan-funktionen för variabeln FrontDistance
Serial.println ("Front avstånd =");
Serial.Print(Distance);
om (FrontDistance > 60 || FrontDistance == 0) //If det finns inget infront av roboten inom 15 cm eller avståndet är 0 (som för newping biblioteket betyder ingen ping returnerades) sedan...
{
moveForward(); Gå till funktionen moveForward
}
annan //Else (om det finns något infront av roboten inom 40cm) sedan...
{
CollisionCounter = CollisionCounter + 1.
moveStop(); Gå till funktionen moveStop
Navigate();
}
}
void moveForward() //This funktion berättar roboten att gå framåt
{
Serial.println("");
Serial.println ("framåt");
digitalWrite (LeftMotorBackward, låg);
digitalWrite (LeftMotorForward, hög);
digitalWrite (RightMotorBackward, låg);
digitalWrite (RightMotorForward, hög);
}
void moveBackward() //This funktion berättar roboten att flytta bakåt
{
Serial.println("");
Serial.println ("flytta bakåt");
digitalWrite (LeftMotorForward, låg);
digitalWrite (LeftMotorBackward, hög);
digitalWrite (RightMotorForward, låg);
digitalWrite (RightMotorBackward, hög);
}
void moveLeft() //This funktion berättar roboten att svänga vänster
{
Serial.println("");
Serial.println ("flytta vänster");
digitalWrite (LeftMotorForward, låg);
digitalWrite (LeftMotorBackward, hög);
digitalWrite (RightMotorBackward, låg);
digitalWrite (RightMotorForward, hög);
}
void moveRight() //This funktion berättar roboten till höger
{
Serial.println("");
Serial.println ("flytta rätt");
digitalWrite (LeftMotorBackward, låg);
digitalWrite (LeftMotorForward, hög);
digitalWrite (RightMotorForward, låg);
digitalWrite (RightMotorBackward, hög);
}
void moveStop() //This funktion berättar roboten att sluta flytta
{
Serial.println("");
Serial.println("stopping");
digitalWrite (LeftMotorBackward, låg);
digitalWrite (LeftMotorForward, låg);
digitalWrite (RightMotorForward, låg);
digitalWrite (RightMotorBackward, låg);
}
void scan() //This funktion bestämmer avståndet saker är från ultraljud sensorn
{
Serial.println("");
Serial.println("scanning");
Tid = sonar.ping();
avståndet = tid / US_ROUNDTRIP_CM;
Delay(500);
}
void navigate()
{
Serial.println ("det finns ett hinder!");
servo.write(167); Flytta servo till vänster (min lilla servon inte gillar kommer att 180 så jag lekte med värdet tills det fungerade fint)
Delay(1000); Vänta en halv sekund för servo att komma dit
Scan(); Gå till funktionen scan
LeftDistance = avstånd; Den variabla LeftDistance inställd på avståndet till vänster
Serial.println ("lämnade avstånd =");
Serial.Print(Distance);
servo.write(0); Flytta servo till höger
Delay(1000); Vänta en halv sekund för servo att komma dit
Scan(); Gå till funktionen scan
RightDistance = avstånd; Den variabla RightDistance inställd på avståndet till höger
Serial.println ("rätt avstånd =");
Serial.Print(Distance);
om (abs (RightDistance - LeftDistance) < 5)
{
moveBackward(); Gå till funktionen moveBackward
Delay(200); Pausa programmet för 200 millisekunder att låta roboten vända
moveRight(); Gå till funktionen moveRight
Delay(100); Pausa programmet för 200 millisekunder att låta roboten sväng höger
}
annat if(RightDistance < LeftDistance) //If avståndet till höger är mindre än den till vänster då...
{
moveLeft(); Gå till funktionen moveLeft
Delay(100); Pausa programmet i en halv sekund att låta roboten vända
}
annat if(LeftDistance < RightDistance) //Else om avståndet till vänster är mindre än den till höger sedan...
{
moveRight(); Gå till funktionen moveRight
Delay(100); Pausa programmet i en halv sekund att låta roboten vända
}