Vielen vielen Dank für die vielen Antworten!! 
Also mal ganz allgemein zu meinem Projekt:
Meine Idee ist es, ein Objekt innerhalb eines Raumes zu orten.
Dafür möchte ich von einem festen Standpunkt aus, ein 433MHz Signal senden (dessen Laufzeit ist für mich vernachlässigbar) und gleichzeitig einen Ultraschall.
Sobald das 433MHz am Messobjekt ankommt, soll die Zeitmessung starten, wie lange der Ultraschall für dieselbe Strecke gebraucht hat.
Mit der Laufzeit des Ultraschalls zum Messobjekt möchte ich die Entfernung ermitteln.
Wenn ich dieses Prinzip von 2 oder 3 Standpunkten aus durchführe, müsste somit eine genaue Ortsbestimmung möglich sein.
Abfolge:
1. Mit einem Impulsgeber, welchen ich im Arduino programmiert habe, soll regelmäßig das 433MHz Signal gesendet werden.
2. Das 433MHz Signal triggert den Ultraschall zum senden am festen Standpunkt zum und am Messobjekt zum empfangen.
3. Das HC-SR04 gibt mit der Zeitdauer des HIGH-Signals die Übertragungszeit an.
4. ...
uwefed:
Von welcher Zeitdauer sprechen wir?
Darf die Messung blockierend sein?
Grüße Uwe
Zeitdauer wird im Bereich von 0,3ms bis 15ms liegen.
Inwiefern blockierend? Also mein restliches Programm darf nicht pausiert werden. (Funktion als Impulsgeber und später weitere Aufgaben)
Rintin:
pinMode()?
Schaltplan?
pinMode()? Ich hab den Pin 8 als Trigger Output definiert.
Fehlt in meinem Programm der Pin 9 als Eingang für den Ultraschall? Dachte das wäre mit Echo = digitalRead(9); im loop überflüssig.
noiasca:
Das ist keine Fehleranalyse. Beschreibe genau, was dein Sketch nicht macht was du willst.
Serial.print helfen immer.
Was macht dein Signal wenn es in der Luft hängt? hast da Pull-Downs?
Bitte stell einen Schaltplan ein.
Mein Sketch hat dauerhaft einen festen Wert angezeigt.
Inwiefern in der Luft hängt? Es gibt doch immer einen definierten Zustand. Bei Input = 0, nichts verändern, bei Input = 1, Zeit messen und ausgeben.
Oder übersehe ich da was?
Schaltplan hab ich noch nicht, da es bisher sehr banal ist. (Mich dennoch zum verzweifeln bringt)
Bisher nutze ich meinen Impulsgeber um den Ultraschall zu triggern und möchte einfach nur die Zeit ausrechnen.
HC-SR04: Vcc an 5V, Trig an Pin 8, Echo an Pin 9, GND an GND
postmaster-ino:
Die reine Erkennung einer Flanke, dafür reicht ein status_jetzt!=status_alt.
Darin schaust Du, wie 'status_jetzt' ist und entscheidest, ob Du Dir die Startzeit merkst, oder die Endzeit.
Dann Laufzeit=Endzeit-Startzeit - fertig.
So wie es uxomm mit der Statemachine macht?
Rentner:
Warum willst du das überhaupt mit einer Flanken Erkennung machen. Wenn der Eingang high ist dann gilt doch:
Messzeit= millis() - Startzeit
Und wenn der Eingang low ist gilt
Startzeit=millis()
Da das im loop steht, wird doch hierbei solange die Flanke HIGH steht, die Zeit neu gesetzt, somit entfällt mir der Zeitpunkt der steigenden Flanke.
Oder wie kann ich das umgehen?
uxomm:
Ich würde das mit einer Statemachine (dt: Endlicher Automat) lösen.
Zum Beispiel so (dein Sketch ein wenig umgebaut):
Hier bekomme ich ein ganz seltsames Ergebnis.
An Pin 9 ist nichts angeschlossen. Der serielle Monitor bleibt leer.
Sobald ich mit dem Oszilloskop den Impulsgeber an Pin 8 messe, werden mir willkürliche Werte ausgegeben. :o Edit: es werden mir ca. 100ms ausgegeben, also mein Intervall für den Impuls
Hier mein aktueller vollständiger Code. Der erste war lediglich ein Ausschnitt des relevanten Teils.
//Impulsgeber zum Triggern
#define Trigger 8
int TriggerState;
unsigned long currentMillis;
unsigned long previousMillis = 0;
const long interval = 100;
//Zeitmessung des Echos
unsigned long TimeStart;
unsigned long Time;
const byte inputPin = 9;
byte myState = 0;
void setup() {
Serial.begin(115200);
}
void loop() {
//Impulsgeber zum Triggern
currentMillis = millis();
if (currentMillis - previousMillis >= interval)
{
previousMillis = currentMillis;
if (TriggerState == LOW)
{
TriggerState = HIGH;
}
else
{
TriggerState = LOW;
}
digitalWrite(Trigger, TriggerState);
}
// Statemachine
switch (myState) {
case 0: // warten auf HIGH
if (digitalRead(inputPin)) {
TimeStart = millis();
myState = 1;
}
break;
case 1: // warten auf LOW
if (!digitalRead(inputPin)) {
Time = millis() - TimeStart;
myState = 2;
}
break;
case 2: // Ausgabe
Serial.print("Time: ");
Serial.print(Time);
Serial.println(" µs");
myState = 0;
break;
}
}