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
Arduino HC-SR04 Interrupt
24.04.2015, 15:27
Beitrag #9
RE: Arduino HC-SR04 Interrupt
Ich habe mal versucht das ganze umzusetzen.
LED1 im Hauptprogramm blinkt, aber es tut sich nichts beim Sensor außer das zur Zeit LED2 Dauer Leuchten angenommen hat.
Bin ich auf den richtigen Weg?

Code:
boolean value = LOW;                  
unsigned long previousMillis = 0;
unsigned long interval = 1000;
int LED2 = 8;
int trigger=9;
byte LED1 = 13;  
volatile int echo = LOW;


long dauer=0;
long entfernung=0;


void setup()
{
   pinMode(LED1, OUTPUT);
   pinMode(LED2, OUTPUT);
   attachInterrupt(0, blink, CHANGE);
   pinMode(trigger, OUTPUT);
}

void loop()
{
  digitalWrite(trigger, LOW);
  delay(5);
  digitalWrite(trigger, HIGH);
  delay(10);
  digitalWrite(trigger, LOW);
  dauer = pulseIn(echo, HIGH);

  entfernung = (dauer/2) / 29.1;

  if (entfernung >= 500 || entfernung <= 0)
    {
    Serial.println("Kein Messwert");
    }

  else
    {
   Serial.print(entfernung);
   Serial.println(" cm");
    }
    
   if (millis() - previousMillis > interval) {
   previousMillis = millis();
   value = !value;
   digitalWrite(LED1, value);
}
}


void blink()
{
   if (entfernung <= 20)
    {
    digitalWrite(LED2,HIGH);
    }
  else
    {
    digitalWrite(LED2,LOW);
    }
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.04.2015, 15:45 (Dieser Beitrag wurde zuletzt bearbeitet: 24.04.2015 15:47 von Thorsten Pferdekämper.)
Beitrag #10
RE: Arduino HC-SR04 Interrupt
Hi,
lass das mit dem Interrupt mal ganz bleiben. Stattdessen baue noch folgendes in loop() ein:
Code:
static unsigned long previousMillis2 = 0;
  if (millis() - previousMillis2 > 1000 && entfernung < 20) {
    previousMillis2 = millis();
    digitalWrite(LED2, !digitalRead(LED2));
}

Ich habe noch was vergessen. Ich glaube, dass das pulseIn 0 liefert, wenn es kein Echo empfängt. Sind die Ausgaben der Entfernung richtig?

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
24.04.2015, 15:58 (Dieser Beitrag wurde zuletzt bearbeitet: 24.04.2015 16:22 von Lehmann84.)
Beitrag #11
RE: Arduino HC-SR04 Interrupt
Das mit den Interrupt ist doch gerade das was ich suche. Das Hauptprogramm LED1 soll mit dem Sensor unterbrochen werden und das Unterprogramm LED2 soll blinken oder wenn man in dem Bereich des Sensors ist angehen.

Eine weiterführende Idee ist es dann später vielleicht einen kleinen selbstständig fahrenden Roboter zu bauen.
Das heißt im Hauptprogramm werden die Motoren angesteuert und sollte jetzt zum Beispiel zu drohen, das das Ding von der Tischkante
fällt, sollen am Unterboden die Sensoren das verhindern. Das die Motoren im Hauptprogramm stoppen, im Unterprogramm
fährt in die andere Richtung (aus der Gefahrenzone) und setzt das Hauptprogramm fort.
Deswegen denke ich das ich dafür die Interrupts brauche.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.04.2015, 17:04
Beitrag #12
RE: Arduino HC-SR04 Interrupt
Nein, dafür brauchst Du keine Interrupts. Da hast Du was falsch verstanden.
Man macht sowas, indem man eine Hauptschleife hat (also loop()), in der eigentlich alles abgehandelt wird. Dabei vermeidet man alles, was den Prozessor blockiert (wie z.B. delay). Irgendwelche Aktionen, die eine gewisse Zeit brauchen, macht man mit der millis()-Technik.
Versuch's ruhig mal so, wie ich es vorgeschlagen habe.

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
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Kettenoeler = EEPROM, serielle Kommunikation, externer Interrupt anwo 0 716 19.01.2016 12:21
Letzter Beitrag: anwo
  Arduino Neuling: Zugeklappten Laptop mit Arduino aufwecken + Kiste aufklappen? Ikearegal 2 2.528 02.02.2014 07:59
Letzter Beitrag: Ikearegal

Gehe zu:


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