Go Down

### Topic: Tone() Variablen Deklaration und abgreifung von Distanz Daten frage !! (Read 837 times)previous topic - next topic

#### ProfessorQuack

##### Jan 08, 2013, 09:17 pm
Hi

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

Code: [Select]
`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önedistanceToAudiosignales;{  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`
Denn sie wissen nicht was sie tuen....

.Project : Blindguarstaff [ ]

#### uwefed

#1
##### Jan 08, 2013, 09:35 pm
Du hast die Funktion distanceToAudiosignales; nicht richtig deklariert.
Grüße Uwe

#### ProfessorQuack

#2
##### Jan 08, 2013, 09:43 pm
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 ?
Denn sie wissen nicht was sie tuen....

.Project : Blindguarstaff [ ]

#### uwefed

#3
##### Jan 08, 2013, 09:55 pm
Bitte den Sketch.
Grüße Uwe

#### ProfessorQuack

#4
##### Jan 08, 2013, 09:57 pm
Code: [Select]
`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`
Denn sie wissen nicht was sie tuen....

.Project : Blindguarstaff [ ]

#### uwefed

#5
##### Jan 08, 2013, 10:09 pm
Der Fehler ist hier:
long distanceToAudiosignales( long distance) ;
{

Der Strichpunkt muß weg.

Grüße Uwe

#### ProfessorQuack

#6
##### Jan 08, 2013, 10:16 pm
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
Denn sie wissen nicht was sie tuen....

.Project : Blindguarstaff [ ]

#### ProfessorQuack

#7
##### Jan 08, 2013, 10:18 pm
wie kann ich denn ganz oben bei der variablen Deklaration die Distanz als unbestimmt setzen ? oder als abhängig von anderen werten ?
Denn sie wissen nicht was sie tuen....

.Project : Blindguarstaff [ ]

#### michael_x

#8
##### Jan 09, 2013, 11:38 am
Quote
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.
Quote
iwie kommt beim serialmonitor jetzt nur noch nullen also 0cm raus

Normalwerweise ruft man Funktionen, die einen Wert zurückliefern, so auf:
Code: [Select]
`  // 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:
Code: [Select]
`  if ((distance <= 50) && ( distance >= 35)) {     tone(3, 50,1000);     delay (1000);  }if (( distance < 35) && (distance >= .....`

Go Up

Please enter a valid email to subscribe

To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy