INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Probleme!!
13.05.2015, 17:53
Beitrag #1
Probleme!!
Hallo zusammen,
habe ein Problem, möchte zwei Ultraschallsenoren(HC-SR04) auslesen,aber irgendwie funktioniert das nicht,einer funktioniert, beim anderen leuchtet die Led dauernd.
Hier mein Code:

int TrigPinRechts = 7;
int EchoPinRechts = 6;
int LedPinRechts = 13;
int LedPinLinks = 12;
int TrigPinLinks = 8;
int EchoPinLinks = 9;

void setup() {
Serial.begin(9600);
pinMode(TrigPinRechts,OUTPUT);
pinMode(EchoPinRechts,INPUT);
pinMode(LedPinRechts,OUTPUT);
pinMode(TrigPinRechts,OUTPUT);
pinMode(EchoPinLinks,INPUT);
pinMode(LedPinLinks,OUTPUT);


}

void loop() {
int distance, AbstandRechts;
int distance2, AbstandLinks;


digitalWrite(TrigPinRechts,HIGH);
delayMicroseconds(11);
digitalWrite(TrigPinRechts,LOW);
AbstandRechts = pulseIn(EchoPinRechts, HIGH);
// In cm umrechnen. Schalgeschwindigkeit ist 340 m/s oder 29 Microseconden per cm.
AbstandRechts = AbstandRechts/29/2;

Serial.print(AbstandRechts);
Serial.print("cm");
Serial.println();
delay(100);



if(AbstandRechts > 40){
digitalWrite(LedPinRechts, LOW);
}
else{
digitalWrite(LedPinRechts, HIGH);
}
delay(100);


digitalWrite(TrigPinLinks,HIGH);
delayMicroseconds(11);
digitalWrite(TrigPinLinks,LOW);
AbstandLinks = pulseIn(EchoPinLinks, HIGH);
// In cm umrechnen. Schalgeschwindigkeit ist 340 m/s oder 29 Microseconden per cm.
AbstandLinks = AbstandLinks/29/2;

Serial.print(AbstandLinks);
Serial.print("cm");
Serial.println();
delay(100);

if(AbstandLinks > 40){
digitalWrite(LedPinLinks,HIGH);
}
else{
digitalWrite(LedPinLinks,LOW);
}
delay(100);

}

Led Rechts funktionert, Links nicht.
Bin für jede Hilfe dankbar!!

Viele Grüße!!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
14.05.2015, 10:32
Beitrag #2
RE: Probleme!!
Hi,
hast Du mal die zwei Sensoren vertauscht? Vielleicht ist der eine einfach kaputt...
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
14.05.2015, 15:23
Beitrag #3
RE: Probleme!!
Hallo,
also ich habe beide sensoren unabhängig probiert,
beide funktionieren.

Viele Grüße!!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
14.05.2015, 16:04 (Dieser Beitrag wurde zuletzt bearbeitet: 14.05.2015 16:05 von rkuehle.)
Beitrag #4
RE: Probleme!!
Öhm,

nur mal so:
Code:
void setup() {
Serial.begin(9600);
pinMode(TrigPinRechts,OUTPUT);
pinMode(EchoPinRechts,INPUT);
pinMode(LedPinRechts,OUTPUT);
pinMode(TrigPinRechts,OUTPUT); // <-- Passt das ? Müsste hier nicht TrigPinLinks stehen?
pinMode(EchoPinLinks,INPUT);
pinMode(LedPinLinks,OUTPUT);
}
Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.05.2015, 15:58
Beitrag #5
RE: Probleme!!
Das war ein ganz klarer Userfehler!!Big GrinBig GrinBig Grin
gruß
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.05.2015, 10:54
Beitrag #6
RE: Probleme!!
hi,
mich würde mal interessieren, ob man den Code so umschreiben kann, dass man millis() statt der pulseIn Funktion verwenden kann.

Dann könnte man nämlich 2 (oder mehr) Sensoren in verschiedene Richtungen gleichzeitig starten und auch vorzeitig das Warten auf ein Echo abbrechen, falls es z. B. länger dauert als z. B. 5 ms.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.05.2015, 11:10
Beitrag #7
RE: Probleme!!
(16.05.2015 10:54)HaWe schrieb:  mich würde mal interessieren, ob man den Code so umschreiben kann, dass man millis() statt der pulseIn Funktion verwenden kann.
Hi,
millis() ist dafür nicht genau genug. Da brauchst Du schon micros(). Außerdem wäre es dann geschickt, mit Interrupts zu arbeiten. Also entweder per Interrupt 0 und 1 (Pin 2 und 3). Das hat den Nachteil, dass man nur zwei von den Teilen benutzen kann. (Oder zumindest nicht weiß, welches geantwortet hat.)
...oder aber PinChangeInterrupt. Dafür gibt's auch eine ganz nette Library.
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.05.2015, 11:57 (Dieser Beitrag wurde zuletzt bearbeitet: 16.05.2015 12:17 von HaWe.)
Beitrag #8
RE: Probleme!!
hallo,
ich würde den Mega nehmen und hätte da noch ein paar Pins frei.
Die Sache ohne Interrupts wäre mir sympathischer, da ich schon 200µs IRQs hier für Motoren verwende, d.h. dann die Lösung mit micros().

Könnte man das wie folgt umsetzen... ?
Mir fehlt hier zur Funktionsweise noch etwas die konkrete Vorstellung, leider habe ich selber (noch) keine Sensoren zum Austesten...

Code:
uint32_t   tmicro, emicro1, emicro2; // timestamp, echo1, echo2
bool eread1, eread2;

pinMode(TrigPinRechts,OUTPUT);
pinMode(EchoPinRechts,INPUT);
pinMode(LedPinRechts,OUTPUT);
pinMode(TrigPinLinks ,OUTPUT);
pinMode(EchoPinLinks,INPUT);
pinMode(LedPinLinks,OUTPUT);


void loop() {

  digitalWrite(TrigPinRechts,HIGH);
  digitalWrite(TrigPinLinks,HIGH);
  delayMicroseconds(11);
  digitalWrite(TrigPinRechts,LOW);
  digitalWrite(TrigPinLinks,LOW);


  tmicro=micros();
  emicro1=emicro2=0;
  eread1=eread2=0;
  
  while ( micros()-tmicros<=5000)  ) {
    if ( (! eread1) && ( digitalRead(EchoPinLinks)==HIGH) {
      emicro1=micros()-tmicros;
      eread1=1;  
    }
  
    if ( (! eread2) && ( digitalRead(EchoPinRechts)==HIGH) {
      emicro2=micros()-tmicros;
      eread2=1;
    }
  }
  
  // jetzt sollte man eigentlich wissen, ob nach 5000µs ein Echo
  // links oder rechts empfangen wurde oder nicht, und wenn ja, wie lang genau...
}

wäre das eine Idee ?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  ArduinoDroid Probleme Brother Tak 1 201 10.09.2016 22:12
Letzter Beitrag: Brother Tak
  Roboter-Bau Probleme blebbens 8 378 12.07.2016 07:35
Letzter Beitrag: Binatone
  Probleme mit sprintf() und dtostrf() GMBU 11 812 22.06.2016 10:52
Letzter Beitrag: GMBU
  Makeblock mit Scratch programmieren- Probleme Keinen Schimmer 6 963 06.05.2016 18:34
Letzter Beitrag: arduinopeter
  Programme vom UNO auf nano , mini Pro portieren Probleme anwo 19 1.176 17.04.2016 21:12
Letzter Beitrag: hotsystems
  Probleme beim Auslesen eines IR Empfängers linuxpaul 7 574 06.03.2016 14:44
Letzter Beitrag: hotsystems
  I²C vom NANO zum PI Probleme mit High/Low Bit Tobias1984 4 331 29.02.2016 00:00
Letzter Beitrag: hotsystems
  Probleme beim auswählen des Ports Levi 11 829 21.02.2016 18:00
Letzter Beitrag: hotsystems
  IRemote probleme mit abfrage schnutzkurt 18 1.148 20.02.2016 01:30
Letzter Beitrag: SkobyMobil
  Probleme mit SPI - Ethernet und nRF24L01 itsy 35 2.980 21.11.2015 19:59
Letzter Beitrag: ardu_arne

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste