#include <AFMotor.h>
#include <Arduino.h>
#include <HCSR04.h>
byte triggerPin = 9;
byte echoPin = 10;
int duration, distance;
int number;
AF_DCMotor motor1(1);
AF_DCMotor motor2(2);
AF_DCMotor motor3(3);
AF_DCMotor motor4(4);
void setup() {
Serial.begin(9600);
}
void loop() {
motor1.setSpeed(120);
motor2.setSpeed(120);
motor3.setSpeed(120);
motor4.setSpeed(120);
pinMode(triggerPin, OUTPUT);
pinMode(echoPin, INPUT);
switchdrive();
}
void switchdrive(){
distance=0;
digitalWrite(triggerPin, LOW);
delayMicroseconds(4);
digitalWrite(triggerPin, HIGH);
delayMicroseconds(10);
digitalWrite(triggerPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = round(duration * .0343) / 2;
Serial.print("Distance: ");
Serial.println(distance);
delay(100);
switch (distance){
case 1 ... 15: car_front();Serial.println("zurueck");delay(1500);drive();Serial.println(number);break;
case 16 ... 30: motor1.setSpeed(90);motor2.setSpeed(90);motor3.setSpeed(90);motor4.setSpeed(90);car_back();Serial.println("langsam vor");break;
case 31 ... 45: car_back();Serial.println("Vorwaerts");break;
default: car_back();Serial.println("default");break;
}
}
void drive (){
number=random(1,2);
if (number==1) {
car_left();
}
if (number==2) {
car_right();
}
else {//do nothing
}
}
void car_back() {
motor1.run(BACKWARD);
motor2.run(BACKWARD);
motor3.run(BACKWARD);
motor4.run(BACKWARD);
}
void car_front() {
motor1.run(FORWARD);
motor2.run(FORWARD);
motor3.run(FORWARD);
motor4.run(FORWARD);
}
void car_left() {
motor1.run(RELEASE);
motor2.run(RELEASE);
motor3.run(FORWARD);
motor4.run(FORWARD);
}
void car_right() {
motor3.run(RELEASE);
motor4.run(RELEASE);
motor1.run(FORWARD);
motor2.run(FORWARD);
}
void car_Stop() {
motor1.run(RELEASE);
motor2.run(RELEASE);
motor3.run(RELEASE);
motor4.run(RELEASE);
}
Mit dem HC-SR funktioniert soweit alles. Nun möchte ich, wie man vielleicht im Bereich
void switchdrive(){
distance=0;
digitalWrite(triggerPin, LOW);
delayMicroseconds(4);
digitalWrite(triggerPin, HIGH);
delayMicroseconds(10);
digitalWrite(triggerPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = round(duration * .0343) / 2;
Serial.print("Distance: ");
Serial.println(distance);
delay(100);
switch (distance){
case 1 ... 15: car_front();Serial.println("zurueck");delay(1500);drive();Serial.println(number);break;
case 16 ... 30: motor1.setSpeed(90);motor2.setSpeed(90);motor3.setSpeed(90);motor4.setSpeed(90);car_back();Serial.println("langsam vor");break;
case 31 ... 45: car_back();Serial.println("Vorwaerts");break;
default: car_back();Serial.println("default");break;
}
}
void drive (){
number=random(1,2);
if (number==1) {
car_left();
}
if (number==2) {
car_right();
}
sehen kann, den arduino willkürlich zwischen links und rechts abbiegen entscheiden lassen. Eigentlich ganz simpel, aber er gibt IMMER 1 aus, also links abbiegen. Das macht er dann auch.