Selbstfahrendes Auto Code nicht funktionsfähig

jens069:
Wieso ist die Spannungsversorgung falsch? Ich meinte in diesem Post, dass ich den Arduino mit dem PC verbunden und nichts eingesteckt hatte. Selbst wenn keine Bauteile angeschlossen sind bekomme ich nicht das im setup definierte "Ready" im Seriellen Monitor?

Ich verstehe nicht so ganz wo dann das Problem an der Spannungsversorgung liegen kann? :frowning:

Edit:
Den Arduino Yun Rev 2
Arduino Yún Rev 2 | Arduino Official Store

Warum hast du das nicht in deiner Beschreibung so drin.
Da steht was total dummes von 5V oder 6V oder 7V.

Was soll das ?

Wenn du dir das Datenblatt richtig durchliest dann wüsstest du, das der Yun nur 5 Volt auf Vin bekommen darf, auch wenn hier andere schlauerweise was falsches schreiben.

Und nochmal, wie schließt du I2C an ?

jens069:
Selbst wenn keine Bauteile angeschlossen sind bekomme ich nicht das im setup definierte "Ready" im Seriellen Monitor?

Ich habe gelesen, dass der YUN als Prozessor einen Mega32u4 nutzt. Der hat eine native USB Schnittstelle. Nach einem Upload bzw. Reset baut der die USB-Verbindung zum PC komplett neu auf. Das dauert eine gewisse Zeit. Wird die Schnittstelle genutzt ( Serial.print ) bevor dieser Verbindungsaufbau angeschlossen ist, funktioniert Serial nicht mehr.
Was also in deinem Sketch fehlt ist ein Warten auf den Aufbau der Verbindung. Bevor Du die serielle Schnittstelle das erste mal nutzt, muss Du mit

while(!Serial);

warten, bis die Verbindung steht.
Ich kenne das von Micro und Leonardo Boards, die auch den Mega32u4 verwenden. Das YUN Board kenne ich zwar nicht, aber da es den gleichen Prozessor verwendet, wird es wohl das gleiche Problem sein.
Wenn im Normalbetrieb keine Verbindung zum PC besteht, musst Du noch absichern, dass er bei dem while nicht ewig wartet.

Peter-CAD-HST:
Moin

Die Spannung an Vin muss mindestens 7Volt betragen.

Gruss Peter
und gesund bleiben

Das ist für die meisten Arduino-Modelle richtig, aber nicht für den YUN bzw YUN2 die Vertragen an Vin nur 5V.

@jens069

Besorg Dir einen neuen Yun2 und versuche es mit dem weiter.

Grüße Uwe

(deleted)

Danke

uwefed:
Das ist für die meisten Arduino-Modelle richtig, aber nicht für den YUN bzw YUN2 die Vertragen an Vin nur 5V.

@jens069

Besorg Dir einen neuen Yun2 und versuche es mit dem weiter.

Grüße Uwe

Zum Glück war noch keine Spannung auf dem Vin Port :slight_smile:

while(!Serial); hat das Problem mit der fehlenden Ready-Anzeige behoben, danke dafür!

Ich baue jetzt alles nochmal Teil für Teil auf.

Grüße
Jens

HotSystems:
Warum hast du das nicht in deiner Beschreibung so drin.
Da steht was total dummes von 5V oder 6V oder 7V.

Was soll das ?

Wenn du dir das Datenblatt richtig durchliest dann wüsstest du, das der Yun nur 5 Volt auf Vin bekommen darf, auch wenn hier andere schlauerweise was falsches schreiben.

Und nochmal, wie schließt du I2C an ?

Sorry für diese Ungenauigkeit.
Ich habe Port 15-17 des MCP23017 auf GND gesetzt und Port 12+13 auf A0,A1 bzw. A4,A5.

Das Display bekommt dementsprechend A4,A5 bzw. A0,A1.

jens069:
Zum Glück war noch keine Spannung auf dem Vin Port :slight_smile:

while(!Serial); hat das Problem mit der fehlenden Ready-Anzeige behoben, danke dafür!

Ich baue jetzt alles nochmal Teil für Teil auf.

Das ist gut und Dank Franz-Peter hast du ja das Problem behoben.

Dennoch solltest du das mit den Verbindungen zum Display bzw. MCP nochmals überdenken.

Ist das nun ein Display mit I2C oder nicht ?

Dieses Display wird verwendet: Bei Reichelt die Artikel-Nr.: DEBO LCD 20X4 BL.

Der MCP23017 und das Display sollen über I2C verwendet werden… Daher habe ich die Analogen Ports A0,A1 und A4,A5 dafür vorgesehen.

Grüße

jens069:
Der MCP23017 und das Display sollen über I2C verwendet werden.. Daher habe ich die Analogen Ports A0,A1 und A4,A5 dafür vorgesehen.

Wo wir wieder beim I2C-Problem sind.

I2C ist ein Bus, da kannst du beide Boards zusammen schalten.
A0, A1, A4 und A5 sind beim Yun keine I2C-Pins, sondern PD0 und PD1 (Pin 3 und 2)

Du musst dir zwingend mal das Pinout vom Yun ansehen.

Zuallererst danke allen, die mir geantwortet haben!

Ich habe alles neu aufgebaut und ein paar Sachen geändert. Der I2C-Bus ist nun korrekt angeschlossen (ich bekomme das Display zum laufen). Da dieser nun an den richtigen Pins ist bekomme ich auch nicht mehr das Problem, dass mein Code nicht anfängt zu starten. Jetzt stehe ich nur noch vor 2 Problemen:

  1. Wie bekomme ich den Display (0x27) zum laufen zusammen mit dem MCP (3x GND -> 0x20)? Aktuell geht der Display, jedoch hat der MCP keine Funktion.
Adafruit_MCP23017 mcp1;
LiquidCrystal_I2C lcd1(0x27, 20, 4);

int keyinput_follow = 9;

...

void setup() {
mcp1.begin(0);
mcp1.pinMode(keyinput_follow, INPUT);

...

lcd1.init();
lcd1.clear();
}

...
  1. Ich möchte den Trigger der 6x HC-SR04 über einen Pin machen. Jedoch habe ich festgestellt, dass dieser nur in der Lage ist einen HC-SR04 zum Triggern zu bringen. Sobald ich alle zusammen laufen lasse wird keiner getriggert (Abstand = 0). Gibt es eine Lösung dazu?

Ich danke schonmal im Voraus für alle Antworten!

Viele Grüße
Jens

@1) MCP funktioniert alleine (ohne Display)?
@1) immer nur einen triggern.

jens069:

  1. Wie bekomme ich den Display (0x27) zum laufen zusammen mit dem MCP (3x GND -> 0x20)? Aktuell geht der Display, jedoch hat der MCP keine Funktion.

  2. Ich möchte den Trigger der 6x HC-SR04 über einen Pin machen. Jedoch habe ich festgestellt, dass dieser nur in der Lage ist einen HC-SR04 zum Triggern zu bringen. Sobald ich alle zusammen laufen lasse wird keiner getriggert (Abstand = 0). Gibt es eine Lösung dazu?

Schön, dass es jetzt bei dir soweit funktioniert.

  1. Dann sieh dir mal die Beispiele zu MCP-Library an.
  2. Ja, die Lösung ist, jeden US-Sensor einzeln ansprechen.

Guten Morgen :slight_smile:

@1. Also ich habe mir mal die Library von Adafruit angeschaut. Der MCP hat bei 3x GND (A0-2) die Adresse 0x20, soweit richtig? Ich spreche ihn an mit mcp.begin();. Dabei ist keine Zahl in der Klammer notwendig, da dies die Standardadresse ist?

@2. Wie ist das Ansprechen jedes einzelnen gemeint? Für jeden einen Port am Arduino als Trigger? Dafür müsste ich die Analogen Pins nutzen, da sonst alles voll ist.. jedoch bekomme ich keinen digitalen Output durch die Analogen I/O-Ports vom Yun (REV 2). Hatte bereits alle separat angeschlossen: einen über Digital und 5 über Analog, einer funktionierte und 5 nicht :disappointed_relieved:

Dabei hatte ich versucht im Code die Analogen Ports anzusprechen mit digitalWrite(A0, HIGH);. Daraufhin kam nichts, dann habe ich es so versucht: digitalWrite(14, HIGH);.. wieder kein Erfolg. Hat jemand da einen Tipp, werde aus dem Netz auch nicht wirklich schlau :blush:

Ich hoffe ihr könnt mir noch etwas weiterhelfen.

Viele Grüße und Danke im Voraus
Jens

Zu 2. Du musst den Pin auch als Output definieren.
Und ja, du brauchst für jeden sensor einen Triggerpin, sowie einen Echopin.

Also der MCP funktioniert nun :smiley:

Das letzte Problem wäre jetzt der Trigger.. Also brauche ich 6 Trigger Pins? Einen habe ich bei den digitalen unter bekommen, also noch 5 bei den analogen.

Ich habe folgende Definitionen gemacht für die analogen Pins.

pinMode(A0, OUTPUT);
pinMode(A1, OUTPUT);
pinMode(A2, OUTPUT);
pinMode(A3, OUTPUT);
pinMode(A4, OUTPUT);

digitalWrite(A0, LOW);
digitalWrite(A1, LOW);
digitalWrite(A2, LOW);
digitalWrite(A3, LOW);
digitalWrite(A4, LOW);
delayMicroseconds(20);
digitalWrite(A0, HIGH);
digitalWrite(A1, HIGH);
digitalWrite(A2, HIGH);
digitalWrite(A3, HIGH);
digitalWrite(A4, HIGH);
delayMicroseconds(10);
digitalWrite(A0, LOW);
digitalWrite(A1, LOW);
digitalWrite(A2, LOW);
digitalWrite(A3, LOW);
digitalWrite(A4, LOW);

Also genau das gleiche wie bei dem digitalen Pin.. nur der ist der einzige, welcher den Befehl umsetzt? :confused:

Irgendeine Idee?

Kann mir keiner weiterhelfen? :frowning:

du triggerst alle gleichzeitig - wie oben beschrieben wird das nicht fnktionieren. Was die Pins angeht: schreib' ein Testprogramm und probier's aus.

jens069:
Kann mir keiner weiterhelfen? :frowning:

Poste bitte den kompletten Sketch.
Und wie zwieblum schrieb, gleichzeitig geht nicht.
Du musst erst einen Triggern, den per echo auswerten und dann den nächsten usw.
Mit genügenderPause zwischendrin, damit die sich nicht gegenseitig stören.

  //Start Trigger for Distance Measurement
  //Calculate and safe Distances
  digitalWrite(trigger1, LOW);
  delayMicroseconds(20);
  digitalWrite(trigger1, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigger1, LOW);
  dauer1 = pulseIn(echo1, HIGH);
  entfernung1 = dauer1 / 58.2;
  delay(1000);
  
  digitalWrite(trigger2, LOW);
  delayMicroseconds(20);
  digitalWrite(trigger2, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigger2, LOW);
  dauer2 = pulseIn(echo2, HIGH);
  entfernung2 = dauer2 / 58.2;
  delay(1000);
  
  digitalWrite(trigger3, LOW);
  delayMicroseconds(20);
  digitalWrite(trigger3, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigger3, LOW);
  dauer3 = pulseIn(echo3, HIGH);
  entfernung3 = dauer3 / 58.2;
  delay(1000);
  
  digitalWrite(trigger4, LOW);
  delayMicroseconds(20);
  digitalWrite(trigger4, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigger4, LOW);
  dauer4 = pulseIn(echo4, HIGH);
  entfernung4 = dauer4 / 58.2;
  delay(1000);
  
  digitalWrite(trigger5, LOW);
  delayMicroseconds(20);
  digitalWrite(trigger5, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigger5, LOW);
  dauer5 = pulseIn(echo5, HIGH);
  entfernung5 = dauer5 / 58.2;
  delay(1000);
  
  digitalWrite(trigger6, LOW);
  delayMicroseconds(20);
  digitalWrite(trigger6, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigger6, LOW);
  dauer6 = pulseIn(echo6, HIGH);
  entfernung6 = dauer6 / 58.2;
  delay(1000);

Ich habe es jetzt so probiert: es wird nun von zwei Sensoren der Wert ausgelesen… aber mehr funktioniert immernoch nicht :frowning:

PS: Den kompletten Code habe ich einmal in den Anhang.

Viele Grüße
Jens

Testcode.txt (11.6 KB)