# Tone() Variablen Deklaration und abgreifung von Distanz Daten frage !!

Hi

hab nen Problem hab den parallax ping und den Standard code und möchte jetzt den Distanz Daten ein audi ton zuweisen

``````const int pingPin = 7;
int speaker = 3;
int distance = duration /29/2;

void setup() {
// initialize serial communication:
Serial.begin(9600);
}

void loop()
{
// establish variables for duration of the ping,
// and the distance result in inches and centimeters:
long duration, cm;

// The PING))) is triggered by a HIGH pulse of 2 or more microseconds.
// Give a short LOW pulse beforehand to ensure a clean HIGH pulse:
pinMode(pingPin, OUTPUT);
pinMode(speaker, OUTPUT);
digitalWrite(pingPin, LOW);
delayMicroseconds(2);
digitalWrite(pingPin, HIGH);
delayMicroseconds(5);
digitalWrite(pingPin, LOW);

// The same pin is used to read the signal from the PING))): a HIGH
// pulse whose duration is the time (in microseconds) from the sending
// of the ping to the reception of its echo off of an object.
pinMode(pingPin, INPUT);
duration = pulseIn(pingPin, HIGH);

// convert the time into a distance
microsecondsToCentimeters(duration);

Serial.print(cm);
Serial.print("cm");
Serial.println();

delay(100);
}

long microsecondsToCentimeters (long microseconds)
{
// The speed of sound is 340 m/s or 29 microseconds per centimeter.
// The ping travels out and back, so to find the distance of the
// object we take half of the distance travelled.
return microseconds / 29 / 2;
}

// Umwandlung der Ton Information in Töne
distanceToAudiosignales;
{
if ((distance <= 50) && ( distance >= 35));
tone(3, 50,1000);
delay (1000);
if ((distance <= 34) && ( distance >= 20));
tone(3,40,500);
delay(1000);
if ((distance <= 19) && ( distance >= 10));
tone(3,35,420);
delay(300);
if ((distance <=9) && ( distance >= 5));
tone(3,30,300);
delay (100);
}/code]

so wie deklariert man nun die Distanz wenn diese erst in der loop ermittelt wird ? wie kann ich die variable mit dem Distanz wert dann in der if schleife wieder abfragen/aufrufen ??

Bitte um Hilfe :)

Quack
``````

Du hast die Funktion distanceToAudiosignales; nicht richtig deklariert.
Grüße Uwe

uwe habs jetzt geschafft hab nur noch einen Fehler im compiler
sketch_jan07a:81: error: expected unqualified-id before '{' token

was bedeutet das was ist die erwartetet unqualified id ?

Bitte den Sketch.
Grüße Uwe

``````const int pingPin = 7;
int speaker = 3;
int distance;

void setup() {
// initialize serial communication:
Serial.begin(9600);
}

void loop()
{
// establish variables for duration of the ping,
// and the distance result in inches and centimeters:
long duration, cm;

// The PING))) is triggered by a HIGH pulse of 2 or more microseconds.
// Give a short LOW pulse beforehand to ensure a clean HIGH pulse:
pinMode(pingPin, OUTPUT);
pinMode(speaker, OUTPUT);
digitalWrite(pingPin, LOW);
delayMicroseconds(2);
digitalWrite(pingPin, HIGH);
delayMicroseconds(5);
digitalWrite(pingPin, LOW);

// The same pin is used to read the signal from the PING))): a HIGH
// pulse whose duration is the time (in microseconds) from the sending
// of the ping to the reception of its echo off of an object.
pinMode(pingPin, INPUT);
duration = pulseIn(pingPin, HIGH);

// convert the time into a distance
microsecondsToCentimeters(duration);

Serial.print(cm);
Serial.print("cm");
Serial.println();

delay(100);
}

long microsecondsToCentimeters (long microseconds)
{
// The speed of sound is 340 m/s or 29 microseconds per centimeter.
// The ping travels out and back, so to find the distance of the
// object we take half of the distance travelled.
return microseconds / 29 / 2;
}

// Umwandlung der Ton Information in Töne
long distanceToAudiosignales( long distance) ;
{
if ((distance <= 50) && ( distance >= 35));
tone(3, 50,1000);
delay (1000);
if ((distance <= 34) && ( distance >= 20));
tone(3,40,500);
delay(1000);
if ((distance <= 19) && ( distance >= 10));
tone(3,35,420);
delay(300);
if ((distance <=9) && ( distance >= 5));
tone(3,30,300);
delay (100);
}

/code] hier
``````

Der Fehler ist hier:
long distanceToAudiosignales( long distance) ;
{

Der Strichpunkt muß weg.

Grüße Uwe

jop hab ich auch gerade gemerkt nur iwie kommt beim serialmonitor jetzt nur noch nullen also 0cm raus obwohl ich diesen kern überhaupt nicht geändert habe

wie kann ich denn ganz oben bei der variablen Deklaration die Distanz als unbestimmt setzen ? oder als abhängig von anderen werten ?

wie kann ich denn ganz oben bei der variablen Deklaration die Distanz als unbestimmt setzen ? oder als abhängig von anderen werten ?

Verstehe ich nicht. Die Variable cm ist nach der Deklaration als Typ int oben in loop im Wert erstmal unbestimmt.

iwie kommt beim serialmonitor jetzt nur noch nullen also 0cm raus

Normalwerweise ruft man Funktionen, die einen Wert zurückliefern, so auf:

``````  // convert the time into a distance
cm = microsecondsToCentimeters(duration);
``````

Ausserdem denke ich, da sind auch noch zu viele Semikolons nach den if.
Du meinst doch sicher:

``````if ((distance <= 50) && ( distance >= 35)) {
tone(3, 50,1000);
delay (1000);
}
if (( distance < 35) && (distance >= .....
``````