Selbstfahrendes Auto Code Hilfe

Hey Community,
ich baue grade ein Auto was mit Ultraschall hindernissen ausweichen kann...
Aber meine konkrete Frage ist wie kann ich die beiden anderen programmieren...
Einen hab ich schon...

(Bevor jemand schreibt kopiere und ändere die pins hab ich schon probiert(Fehlermeldungen))

Hier ist der Code:

#define trigPin 13


#define echoPin 12


#define motor 7


#define buzzer 6


#define motor2 8


#define rmotor 0


#define rmotor2 1


void setup()

{

pinMode(trigPin, OUTPUT);


pinMode(echoPin, INPUT);


pinMode(motor, OUTPUT);


pinMode(motor2, OUTPUT);


pinMode(rmotor, OUTPUT);


pinMode(buzzer,OUTPUT);


}


void loop()


{


long duration, distance;


digitalWrite(trigPin, LOW);



delayMicroseconds(2);


digitalWrite(trigPin, HIGH);



delayMicroseconds(10);


digitalWrite(trigPin, LOW);


duration = pulseIn(echoPin, HIGH);



distance = (duration/2) / 29.1;


if (distance < 30)     // hier schaut man ob die distanz größer als 30 ist


{


digitalWrite(motor,HIGH);    // Wenn die distanz größer als 30 ist, dann wird dieser code ausgeführt
digitalWrite(motor2,HIGH);
digitalWrite(rmotor,LOW);

digitalWrite(buzzer,HIGH);


} else


{


digitalWrite(motor,LOW);   // when kleiner als 30 dann...
digitalWrite(motor2,LOW);

digitalWrite(rmotor,HIGH);

digitalWrite(buzzer,LOW);


}
}

Danke im vorraus...

Die beiden anderen was?

Erst mall Willkommen im Forum :wink:
Was für System ist das Arduino? wen ja welscher, was für Fehler werden angezeigt?
Zu dem alle leere Zeilen löschen , auf tragbares Geräten ist das schlecht lesbar.

Was für ein Controller ist das ?
Bei einem Uno o.ä. solltest du Pin D0 und D1 frei lassen. Die stören sich mit dem USB-SERIALWANDLER.

Das Löschen der Leerzeile (Info @fony ) geht auch noch nachträlich.
So ist es schlecht lesbar. Auch solltest du in der IDE Strg + t drücken, dann wird der Sketch schön formatiert.

Schätze mall die MCU ist im Auto und hat kein SerMon, also ist vor erst halb so wild, jedoch D0 und D1 sollte frei bleiben.
Ihr habt für Notfall Analog Pins die kann man auch Digital nutzen.
Noch mall was für Fehler?
Bei mir Kompiliert sauber.

Der Sketch verwendet 1816 Bytes (5%) des Programmspeicherplatzes. Das Maximum sind 30720 Bytes.
Globale Variablen verwenden 9 Bytes (0%) des dynamischen Speichers, 2039 Bytes für lokale Variablen verbleiben. Das Maximum sind 2048 Bytes.

Als MCU ist Nano R3 eingestellt.
Wie werden die Motoren angetrieben?

Das Raten habe ich mir abgewöhnt und meiner Kristallkugel habe ich gekündigt. Die will doppelten Mindestlohn. :rofl:

Ultraschallsensoren

mach ich moment...

Ich habe jetzt d0 und d1 mit d4 und 5 getauscht

Mit einem Ultraschallsensor funktioniert es ja aber mit 2 oder mehr nicht weiß nicht wieso ich bräuchte da hilfe wie ich dies programmieren soll

Hängt da eine H-Brücke mit 2 Motoren an den Pins?


Ich weiß nicht was eine h brücke ist aber so sieht das auto aus

Ok, finden wir raus.
Hast Du ein Link zum gekauften Artikel?

Ich bau mal schnell was, damit ich sehe, ob das macht was ich will.
Dann bekommst Du auch den 2ten Sensor.

Zwei Sensoren unter einem Pin klemmen sollte man nicht, nehme Blattpapier und zeichne mal wie es verbunden ist. Auf deinem Foto kann man nichts erkennen, bischien Ordnung in der Verkabelung we're schön.

Hier ist nochmal der überabeitete code

#define trigPin 13


#define trigPin2 11


#define echoPin2 6


#define echoPin 12


#define motor 8


#define buzzer 6


#define motor2 7


#define rmotor 5


#define rmotor2 4


void setup()

{

  pinMode(trigPin, OUTPUT);


  pinMode(echoPin, INPUT);


  pinMode(motor, OUTPUT);


  pinMode(motor2, OUTPUT);


  pinMode(rmotor, OUTPUT);


  pinMode(buzzer, OUTPUT);


}


void loop()


{


  long duration, distance;


  digitalWrite(trigPin, LOW);



  delayMicroseconds(2);


  digitalWrite(trigPin, HIGH);



  delayMicroseconds(10);


  digitalWrite(trigPin, LOW);


  duration = pulseIn(echoPin, HIGH);



  distance = (duration / 2) / 29.1;


  if (distance > 30)     // hier schaut man ob die distanz größer als 30 ist


  {


    digitalWrite(rmotor, HIGH);   // Wenn die distanz größer als 30 ist, dann wird dieser code ausgeführt
    digitalWrite(rmotor2, HIGH);
    digitalWrite(motor, LOW);

    digitalWrite(buzzer, HIGH);


  } else


  {


    digitalWrite(rmotor, LOW);  // when kleiner als 30 dann...
    digitalWrite(rmotor2, LOW);

    digitalWrite(motor, HIGH);

    digitalWrite(buzzer, LOW);


  }
}
struct SENSOR
{
  const uint8_t trigPin;
  const uint8_t echoPin;
};

constexpr uint8_t sensNums {2};
SENSOR sensor[sensNums]
{
  {13, 12},    // Erster Sensor TriggerPin, SensorPin
  {11, 6},   // Zweiter Sensor TriggerPin, SensorPin
};

struct MOTOR
{
  const uint8_t dirPin;
  const uint8_t enaPin;
};

constexpr uint8_t motoNums {2};
MOTOR motor[motoNums]
{
  {7, 8},
  {4, 5},
};

enum class Side {links, rechts};
enum class Direction {forward, backward};

void setup()
{
  Serial.begin(115200);
  Serial.println(F("Start..."));

  for (byte b = 0; b < sensNums; b++)
  {
    pinMode(sensor[b].trigPin, OUTPUT);
    pinMode(sensor[b].echoPin, INPUT);
  }

  for (byte b = 0; b < motoNums; b++)
  {
    pinMode(motor[b].dirPin, OUTPUT);
    pinMode(motor[b].enaPin, OUTPUT);
  }
}

void loop()
{
  for (byte b = 0; b < sensNums; b++)
  {
    Serial.print(F("Abstand Sensor "));
    Serial.print(b);
    Serial.print(": ");
    Serial.println(getAbstand(b));
    delay(500);
  }
}

uint16_t getAbstand(const uint8_t sensNum)
{
  long duration, distance;
  digitalWrite(sensor[sensNum].trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(sensor[sensNum].trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(sensor[sensNum].trigPin, LOW);
  duration = pulseIn(sensor[sensNum].echoPin, HIGH);
  distance = (duration / 2) / 29.1;
  return distance;
}

Der Code fragt nur die beiden Sensoren ab.
Er soll nur darstellen, dass die Sensorik funktioniert.
Auf dem Grundgerüst dann auch noch die Motoren angepasst und gut ist.

Du brauchst zur Kontrolle den seriellen Monitor.
WRKZEUGE -> SERIELLER MONItOR

Die geschwindigkeit des Monitors ist auf 115200 einzustellen und dann solltest Du im Abstand von 500ms Die Ausgabe der abstände bekommen.

Weitermqachen macht erst Sinn, wenn ich weiss, was Du da hast. Darum: Link zum Shopartikel....

wo genau muss ich den einsetzen

Mach einen neuen Sketch auf und lösch alles was drin ist raus, dafür kopierst Du den rein.

da kommt das
Start...
Abstand Sensor 0: 19
f⸮⸮⸮⸮⸮⸮⸮⸮ ⸮⸮ ⸮⸮⸮⸮⸮ ⸮⸮ ⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮ ⸮⸮ ⸮⸮⸮⸮⸮

Das sieht fast richtig aus, Du muss den seriellen Monitor auf 115200 stellen, oder im Setup das Serial.begin(115200) auf Serial.begin(9600);