Go Down

Topic: error: a function-definition is not allowed here before '{' token (Read 2244 times) previous topic - next topic

raphael753

Hello everybody !

Just beggining with arduino and I have some issue with a parallax sonic ultrasonic.

Error is :

error: a function-definition is not allowed here before '{' token  .

The line which cause this is (I think)

Code: [Select]
}

long microsecondsToInches(long microseconds)
{


The entire code is


Code: [Select]


// this constant won't change.  It's the pin number
// of the sensor's output:
const int pingPin = 7;
const int pompe=12;//Pour controler la pompe

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

void loop()
{
 // establish variables for duration of the ping,
 // and the distance result in inches and centimeters:
 long duration, inches, 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);
 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
 inches = microsecondsToInches(duration);
 cm = microsecondsToCentimeters(duration);

 Serial.print(inches);
 Serial.print("in, ");
 Serial.print(cm);
 Serial.print("cm");
 Serial.println();

 delay(100);

   while(cm <= 5){   //  Tant que la distance entre le parallax et ce qu'il détecte (c'est à dire l'eau) est de moins de 5 cm alors...
      digitalWrite(pompe,HIGH);  // On active la pompe
      if (cm >= 15)  {     // Si la distance entre le parallax ce qu'il détecte (c'est à dire l'eau) est de plus de 15 cm alors...  
      digitalWrite(pompe, LOW);      // On éteint la pompe
 
}

long microsecondsToInches(long microseconds)
{
 // According to Parallax's datasheet for the PING))), there are
 // 73.746 microseconds per inch (i.e. sound travels at 1130 feet per
 // second).  This gives the distance travelled by the ping, outbound
 // and return, so we divide by 2 to get the distance of the obstacle.
 // See: http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf
 return microseconds / 74 / 2;
}

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;
}

 
   



Thanks a lot !!
Merci Beaucoup !

Arrch

Count the number of left brackets and right brackets and notice that they are not equal, particularly near the end of your loop.

kjablonski

#2
Oct 18, 2012, 04:02 pm Last Edit: Oct 18, 2012, 04:05 pm by kjablonski Reason: 1
Edit: Arrch beat me to it...
Code: [Select]
delay(100);

   while(cm <= 5){   //  Tant que la distance entre le parallax et ce qu'il détecte (c'est à dire l'eau) est de moins de 5 cm alors...
      digitalWrite(pompe,HIGH);  // On active la pompe
      if (cm >= 15)  {     // Si la distance entre le parallax ce qu'il détecte (c'est à dire l'eau) est de plus de 15 cm alors...  
      digitalWrite(pompe, LOW);      // On éteint la pompe
 
}

long microsecondsToInches(long microseconds)
{


The issue is that you never closed the braces from your if and while.  If the code is trying to do what I think, then the program will be stuck inside the while loop as cm will never change inside the loop but, Try this:
Code: [Select]

...SNIP...
delay(100);

   while(cm <= 5)
   {   //  Tant que la distance entre le parallax et ce qu'il détecte (c'est à dire l'eau) est de moins de 5 cm alors...
      digitalWrite(pompe,HIGH);  // On active la pompe
      if (cm >= 15)
      {     // Si la distance entre le parallax ce qu'il détecte (c'est à dire l'eau) est de plus de 15 cm alors...  
          digitalWrite(pompe, LOW);      // On éteint la pompe
      }
   }  
}

long microsecondsToInches(long microseconds)
{
...SNIP...

PeterH


Count the number of left brackets and right brackets and notice that they are not equal, particularly near the end of your loop.


I recommend that you put each { and } on a line on its own, with matching pairs indented by the same amount and the lines between them indented one extra level. It makes mistakes like this very obvious to spot.
I only provide help via the forum - please do not contact me for private consultancy.

PaulS

Quote
with matching pairs indented by the same amount and the lines between them indented one extra level.

Tools + Auto Format will do this for you, if you don't get it right to start with. Or if you cut and paste code that needs to be indented differently.

guix


I recommend that you put each { and } on a line on its own, with matching pairs indented by the same amount and the lines between them indented one extra level. It makes mistakes like this very obvious to spot.


I agree, Allman style FTW :)

Go Up