Min sjätte projekt: Smart Tank chassi med Ultrasonic Sensor (6 / 7 steg)
Steg 6: felsökning
Google säger mig att jag kan använda funktionen "millis" eller "Avbryt" för att göra det, men jag förstår fortfarande inte efter att ha läst flera artiklar...: (det vanligaste exemplet kallas blinka utan dröjsmål. Jag vet fortfarande inte hur man använder det i min situation... So... Jag prova ett annat sätt som är mycket betungande och koden är som följer:
#include < Servo.h >
#define trigPin 5
#define echoPin 6
Servo myservo; skapa objekt för att styra en servo servo
int pos = 0; variabel att lagra servo position
int servoDirection = 100;
int servoDelay = 20;
int motorPin = 8; höger sida till IB - framåt
int motorPin2 = 9; vänster sida till IA - framåt
int motorPin3 = 10; höger sida till IA - bakåt
int motorPin4 = 11; vänster sida till IB - bakåt
void setup()
{
Serial.BEGIN (9600);
myservo.attach(7); tillmäter objektet servo servo på stift 7
myservo.write(POS);
pinMode (motorPin, produktionen);
pinMode (motorPin2, produktionen);
pinMode (motorPin3, produktionen);
pinMode (motorPin4, produktionen);
pinMode (trigPin, produktionen);
pinMode (echoPin, ingång);
}
void forward() {
digitalWrite (motorPin, hög);
digitalWrite (motorPin2, hög);
digitalWrite (motorPin3, låg);
digitalWrite (motorPin4, låg);
}
void backward() {
digitalWrite (motorPin, låg);
digitalWrite (motorPin2, låg);
digitalWrite (motorPin3, hög);
digitalWrite (motorPin4, hög);
}
void turnLeft() {
digitalWrite (motorPin, hög);
digitalWrite (motorPin2, låg);
digitalWrite (motorPin3, låg);
digitalWrite (motorPin4, hög);
}
void turnRight() {
digitalWrite (motorPin, låg);
digitalWrite (motorPin2, hög);
digitalWrite (motorPin3, hög);
digitalWrite (motorPin4, låg);
}
int CheckDistance()
{
lång varaktighet, avstånd;
digitalWrite (trigPin, låg); Lagt till denna rad
delayMicroseconds(2); Lagt till denna rad
digitalWrite (trigPin, hög);
delayMicroseconds(10); Lagt till denna rad
digitalWrite (trigPin, låg);
längd = pulseIn (echoPin, hög);
avståndet = (längd/2) / 29,1;
returnera avstånd;
}
void sweepServo1() {
för (pos = 10; pos < 40; pos + = 1) / / går från 0 grader till 100 grader
{/ / i steg om 1 grad
myservo.write(POS); berätta servo gå för att placera i variabel "pos"
Delay(10);
}
int testDistance = CheckDistance(); få objekt avstånd med hjälp av ping
om objektet är mer än 30 cm bort det är utanför intervallet
om (testDistance > = 30 || testDistance < = 0) / / / om objektet är mer än 30 cm bort det är utanför intervallet
{
Forward();
}
annat / / / objektet är närmare än 30cm, Lisäs avstånd
{
turnRight();
Serial.Print(testDistance);
Serial.println("cm");
}
}
void sweepServo2() {
för (pos = 40; pos < 80; pos + = 1) / / går från 0 grader till 100 grader
{/ / i steg om 1 grad
myservo.write(POS); berätta servo gå för att placera i variabel "pos"
Delay(10);
}
int testDistance = CheckDistance(); få objekt avstånd med hjälp av ping
om (testDistance > = 30 || testDistance < = 0) / / om objektet är mer än 30 cm bort det är utanför intervallet
{
Forward();
}
annat / / objektet är närmare än 30cm, Lisäs avstånd
{
turnRight();
Serial.Print(testDistance);
Serial.println("cm");
}
}
void sweepServo3() {
för (pos = 80; pos < 120; pos + = 1) / / går från 0 grader till 100 grader
{/ / i steg om 1 grad
myservo.write(POS); berätta servo gå för att placera i variabel "pos"
Delay(10);
}
int testDistance = CheckDistance(); få objekt avstånd med hjälp av ping
om (testDistance > = 30 || testDistance < = 0) / / om objektet är mer än 30 cm bort det är utanför intervallet
{
Forward();
}
annat / / objektet är närmare än 30cm, Lisäs avstånd
{
turnRight();
Serial.Print(testDistance);
Serial.println("cm");
}
}
void loop()
{
sweepServo1();
sweepServo2();
sweepServo3();
}
Jag separata servo svep i tre delar (sweepServo1 3). Varje del styr olika vinklar och alla delar är loopas tillsammans i order.