Bygga en enkel Arduino Robot (10 / 10 steg)
Steg 10: Programmering din Robot
Nu när roboten är klar, kommer du vill programmera det är beteende.
Kolla in koden för denna robot.
#include
skapa servo objekt Servo leftMotor; Servo rightMotor;
CONST int serialPeriod = 250; bara Skriv ut till seriekonsoll varje 1/4 sekund osignerade långa timeSerialDelay = 0;
CONST int loopPeriod = 20; en period av 20ms = en frekvens på 50Hz osignerade långa timeLoopDelay = 0;
Ange trig & echo stift används för ultraljudssensorer const int ultrasonic2TrigPin = 8; CONST int ultrasonic2EchoPin = 9;
int ultrasonic2Distance; int ultrasonic2Duration;
definiera staterna #define DRIVE_FORWARD 0 #define TURN_LEFT 1
int state = DRIVE_FORWARD; 0 = köra framåt (standard), 1 = sväng vänster
void setup() {Serial.begin(9600); / / ultrasonic sensor stift konfigurationer pinMode (ultrasonic2TrigPin, produktionen), pinMode (ultrasonic2EchoPin, ingång); leftMotor.attach(13); rightMotor.attach(12);}
void loop() {debugOutput(); / / utskrifter felsökning meddelanden till seriekonsoll if(millis() - timeLoopDelay > = loopPeriod) {readUltrasonicSensors(); / / läsa och lagra de uppmätta avstånden stateMachine(); timeLoopDelay = millis();}}
void stateMachine() {if(state == DRIVE_FORWARD) / / inga hinder upptäcks {om (ultrasonic2Distance > 6 || ultrasonic2Distance < 0) / / om det inte finns något framför oss (Obs: ultrasonicDistance blir negativ för vissa ultraljud om det finns ingenting i intervall) {/ / enhet framåt rightMotor.write(180); leftMotor.write(0);} annat / / det finns ett objekt framför oss {state = TURN_LEFT;}} annat if(state == TURN_LEFT) / / hinder upptäcks--sväng vänster {osignerade långa timeToTurnLeft = 1100; / / det tar omkring 1,1 sekunder för att vända 90 grader osignerade långa turnStartTime = millis(); / / spara den tid som vi började vrida
While((Millis()-turnStartTime) < timeToTurnLeft) / / bo i denna slinga tills timeToTurnLeft (1,1 sekunder) förflutit {/ / slå vänster rightMotor.write(180); leftMotor.write(180);} state = DRIVE_FORWARD; } }
void readUltrasonicSensors() {/ / ultraljud 2 digitalWrite (ultrasonic2TrigPin, hög); delayMicroseconds(10); / / måste hålla trig pin hög för minst 10us digitalWrite (ultrasonic2TrigPin, låg); ultrasonic2Duration = pulseIn (ultrasonic2EchoPin, hög), ultrasonic2Distance = (ultrasonic2Duration/2) / 29;}
void debugOutput() {if((millis() - timeSerialDelay) > serialPeriod) {Serial.print ("ultrasonic2Distance:"); Serial.Print(ultrasonic2Distance); Serial.Print("cm"); Serial.println(); timeSerialDelay = millis(); } }