Arduino Roboter macht Probleme (Mblock)

c:/users/XXX/appdata/local/arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/../lib/gcc/avr/7.3.0/../../../../avr/lib/avr5/crtatmega328p.o:(.init9+0x0): undefined reference to `main'
collect2.exe: error: ld returned 1 exit status

exit status 1

Compilation error: exit status 1

Hihi :wink: Da fehlen noch ohne Ende Zeilen.
Drück doch unten Rechts auf Kopieren und hier einfügen.

Auch Fehlermeldungen richtig formatieren, wenn Sie auch nicht ganz sind, so ist es aber übersichtlicher:

c:/users/XXX/appdata/local/arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/../lib/gcc/avr/7.3.0/../../../../avr/lib/avr5/crtatmega328p.o:(.init9+0x0): undefined reference to `main'
collect2.exe: error: ld returned 1 exit status

exit status 1

Compilation error: exit status 1

Ich habe auf der IDE versucht den Code umzuschreiben (Alles hat ohne Probleme funktioniert). Als ich später am Abend weitermachen wollte (Habe am Code bis dahin noch nichts geändert) kam diese Fehlermeldung. Ich habe das ganze nochmals heruntergeladen und versucht die IDE zu löschen, da ich das Programm nicht in den Einstellungen bei den Apps löschen konnte, habe ich das trotzdem installiert. Es kam immer die Meldung ,,Diese Datei ist bereits vorhanden.,, Deswegen habe ich den Autoklicker die ganze Zeit auf Datei ersetzen klicken lassen. Hat trotzdem nichts gebracht

Habe ich gerade beschrieben.
Bitte genauso machen.

Und dann gib mal Deinen Code - ichglaub das geht schneller.

Ich vermute mal, dass du den Code meinst an dem ich bisschen probiert habe.
Es ist der Code den du mir geschickt hast, ich habe den nur ein bisschen bearbeitet.

const byte motL[2] = {5, 10};
const byte motR[2] = {6, 9};


void setup() {
    Serial.begin(9600);
  Serial.println(F("\r\nStart...\r\n"));
  for (byte b = 0; b < 2; b++)
  {
    pinMode(motL[b], OUTPUT);
    pinMode(motR[b], OUTPUT);
    digitalWrite(motL[b], LOW);
    digitalWrite(motR[b], LOW);
  }

}

void loop() {
  //Serial.println(F("Starte Motor L Richtung 1"));
  //digitalWrite(motL[1], HIGH);
  //Serial.println(F("Starte Motor R Richtung 1"));
  //digitalWrite(motR[1], HIGH);
  //delay(5000);
 // Serial.println(F("Stoppe Motor L"));
 // digitalWrite(motL[0], LOW);
 // Serial.println(F("Stoppe Motor R"));
 // digitalWrite(motR[0], LOW);
  
 // delay(5000);
 // digitalWrite(motL[1], LOW); // Linker Motor nach vorne
  //digitalWrite(motR[1], LOW);
  //delay(100); // Kurze Pause zum anhalten




  //Serial.println(F("Starte Motor L Richtung 2"));
  //digitalWrite(motL[0], HIGH);
  //delay(5000);
  //Serial.println(F("Stoppe Motor L"));
 // digitalWrite(motL[0], LOW);


Serial.println(F("Starte Motor L Richtung 1"));
  digitalWrite(motL[1], HIGH);
  Serial.println(F("Starte Motor R Richtung 1"));
  digitalWrite(motR[1], HIGH);
  //delay(5000);

  Serial.println(F("Starte Motor R Richtung 2"));
  digitalWrite(motR[1], LOW);
  delay(100); // Kurze Pause zum anhalten
  digitalWrite(motR[0], HIGH);
  delay(5000);
  Serial.println(F("Stoppe Motor R"));
  digitalWrite(motR[0], LOW);

}

C:\Users\XXX\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7\avr\lib\avr5\crtatmega328p.o

Der Sketch kompiliert fehlerfrei.
Es könnte daran liegen, das Ardublock da was komisches draus macht.

Du benutzt doch windows...
Bitte hole Dir die Version 1.8.19 als .zip und bau Dir eine portable Installation.
(zip entpacken und in der ausgepackten einen Ordner portable anlegen)
grafik

Da kannst Du dann ganz schick mit arbeiten.

Habe das heruntergeladen. Jetzt funktioniert wieder alles.

So und nu erstmal grundlegende Einstellungen. DATEI - VOREINSTELLUNGEN

Ok, das mit dem auf Updates prüfen kann man machen - ich mach es nich...
Und wenn Du nichts weiter daran änderst, dann kannst Du jeden Abend den Ordner portable kopieren und an einem sicheren Ort unterbringen.
Da ist ALLES drin, was Du brauchst, wenn Du mal auf einen anderen rechner umziehst etc. pp. (Auch auf eine mit einem komplett anderem Betriebssystem)
Also alle Sketche und libs und alle Einstellungen....

Vielen dank. Ich habe alle Einstellungen übernommen.

So und nu kannst mal austesten, was der Sensor so von sich gibt.
Und ja, der kann gut messen.
Schön zu wissen, was da verbaut ist.
Der zweite Sensor ist ein Reflexionssensor.
Eine LED sendet udn eine empfängt.
Gerne nach unten gerichtet genutzt um einer Linie zu folgen. (Da geht nur reflexion erkannt / Reflexion nicht erkannt)

Ich habe deinen Code eingefügt, da sich der Roboter nicht bewegt vermute ich, dass die pinnst nicht stimmen. Auf der Platine ist beim Sensor 1 ist 6 und 7 und beim Sensor 2 ist 8 und 9.


Im Code steht etwas von trigger- echoPin. Allerdings weiss ich nicht ganz wo welche der Zahlen rein muss.

Las mir einen Moment - ich ergänz das gleich.

const byte motL[2] = {5, 10};
const byte motR[2] = {6, 9};

const byte triggerPin = 2;            // BLAU
const byte echoPin = 3;               // GRUEN
const unsigned int maxRange = 300;
unsigned long signalzeit;
unsigned int entfernung;


void setup()
{
  Serial.begin(9600);
  Serial.println(F("\r\nStart...\r\n"));
  pinMode(triggerPin, OUTPUT);
  pinMode(echoPin, INPUT);
  for (byte b = 0; b < 2; b++)
  {
    pinMode(motL[b], OUTPUT);
    pinMode(motR[b], OUTPUT);
    digitalWrite(motL[b], LOW);
    digitalWrite(motR[b], LOW);
  }
}

void loop()
{
  messung();
  if (entfernung < 20)       // Objekt in der Nähe
  {
    rueckwaerts();           // Objekt weiter weg
  }
  else if (entfernung < 100)
  {
    vorwaerts();
  }
  else                       // Ich weiss nicht, wo ich bin
  {
    halt();
  }
}

void vorwaerts()
{
  digitalWrite(motL[1], LOW);
  digitalWrite(motR[1], LOW);
  digitalWrite(motL[0], LOW);
  digitalWrite(motR[0], LOW);
}
void rueckwaerts()
{
  digitalWrite(motL[0], LOW);
  digitalWrite(motR[0], LOW);
  digitalWrite(motL[1], LOW);
  digitalWrite(motR[1], LOW);
}
void halt()
{
  for (byte b = 0; b < 2; b++)
  {
    digitalWrite(motL[b], LOW);
    digitalWrite(motR[b], LOW);
  }
}
void messung()
{
  unsigned long letzteMessung = 0;
  digitalWrite(triggerPin, LOW);
  delayMicroseconds(2);
  digitalWrite(triggerPin, HIGH);
  delayMicroseconds(10);
  signalzeit = pulseIn(echoPin, HIGH);
  entfernung = signalzeit / 58;
  if (letzteMessung != entfernung)
  {
    if (entfernung > maxRange || entfernung <= 0)
    {
      Serial.println(F("kein Messwert"));
    }
    else
    {
      Serial.print(F("Entfernung: "));
      Serial.print(entfernung);
      Serial.println(F(" cm"));
    }
  }
}

Ok, Vielen Dank

Aus Neugier was steht auf dem IC, Danke.

OK. Danke :wink:
Ist eine Halb H Brücke = Motortreiber.

Vielen Dank für den Code. Ich habe das auf den Roboter geladen, jedoch bewegt er sich nicht.

Ok.
Der Code passt aber zu den Bildern.
Ich hab mal runter gekürzt.
Der Serielle Monitor (WERKZUGE - Serieller Monitor) sollte Dir mit dem folgenden Code alle 100ms einen Wert ausgeben.
Wenn Du die hand an den Sensor führst, sollte der kleiner werden...
Wenn nicht, haben wir evtl. ein Problem...

const byte triggerPin = 2;            // BLAU
const byte echoPin = 3;               // GRUEN
const unsigned int maxRange = 300;
unsigned long signalzeit;
unsigned int entfernung;


void setup()
{
  Serial.begin(9600);
  Serial.println(F("\r\nStart...\r\n"));
  pinMode(triggerPin, OUTPUT);
  pinMode(echoPin, INPUT);
}

void loop()
{
  messung();
  delay(200);
}


void messung()
{
  unsigned long letzteMessung = 0;
  digitalWrite(triggerPin, LOW);
  delayMicroseconds(2);
  digitalWrite(triggerPin, HIGH);
  delayMicroseconds(10);
  signalzeit = pulseIn(echoPin, HIGH);
  entfernung = signalzeit / 58;
  if (letzteMessung != entfernung)
  {
    if (entfernung > maxRange || entfernung <= 0)
    {
      Serial.println(F("kein Messwert"));
    }
    else
    {
      Serial.print(F("Entfernung: "));
      Serial.print(entfernung);
      Serial.println(F(" cm"));
    }
  }
}

Da ich gerade wieder mal auds dem Forum geflogen bin: Wenn ich wieder raus bin, ist für mich dann auch Schluß...