Go Down

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

ProfessorQuack

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ö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
Denn sie wissen nicht was sie tuen....


.Project : Blindguarstaff [ ]

uwefed

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

ProfessorQuack

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


ProfessorQuack

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

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

Der Strichpunkt muß weg.

Grüße Uwe

ProfessorQuack

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

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

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