Код Arduino: ожидается '}' в конце ввода - PullRequest
0 голосов
/ 24 февраля 2019

Пока я кодировал в Arduino, у последних строк моего кода были проблемы.Программа сказала, что

ожидаемое объявление перед токеном '}'

, но я не уверен, как это исправить.Код внизу и ошибка в последней строке кода.Я не уверен, почему последняя скобка, которая имеет проблему, не находится в "коробке" или коде, но проблема все еще там.

void loop(){

 if(digitalRead(pirPin) == HIGH){
   digitalWrite(ledPin, HIGH);   //the led visualizes the sensors output pin state
   if(lockLow){  
     //makes sure we wait for a transition to LOW before any further output is made:
     lockLow = false;            
     Serial.println("---");
     Serial.print("motion detected at ");
     Serial.print(millis()/1000);
     Serial.println(" sec"); 
     delay(50);
     }         
     takeLowTime = true;
   }

 if(digitalRead(pirPin) == LOW){       
   digitalWrite(ledPin, LOW);  //the led visualizes the sensors output pin state

   if(takeLowTime){
    lowIn = millis();          //save the time of the transition from high to LOW
    takeLowTime = false;       //make sure this is only done at the start of a LOW phase
    }
   //if the sensor is low for more than the given pause, 
   //we assume that no more motion is going to happen
   if(!lockLow && millis() - lowIn > pause){  
       //makes sure this block of code is only executed again after 
       //a new motion sequence has been detected
       lockLow = true;  

            for (int pos1 = 0; pos1 <= 89; pos1 += 1)
          {
            servo1.write(pos1);
            delay(10);
          }
          for (int pos1 = 89; pos1 >= 1; pos1 -= 1)
          {
            servo1.write(pos1);
            delay(10);            
          }
       Serial.print("motion ended at ");      //output
       Serial.print((millis() - pause)/1000);
       Serial.println(" sec");
       delay(50);








       {

 if(digitalRead(pirPin) == HIGH){
   digitalWrite(ledPin, HIGH);   //the led visualizes the sensors output pin state
   if(lockLow){  
     //makes sure we wait for a transition to LOW before any further output is made:
     lockLow = false;            
     Serial.println("---");
     Serial.print("motion detected at ");
     Serial.print(millis()/1000);
     Serial.println(" sec"); 
     delay(50);
     }         
     takeLowTime = true;
   }

 if(digitalRead(pirPin) == LOW){       
   digitalWrite(ledPin, LOW);  //the led visualizes the sensors output pin state

   if(takeLowTime){
    lowIn = millis();          //save the time of the transition from high to LOW
    takeLowTime = false;       //make sure this is only done at the start of a LOW phase
    }
   //if the sensor is low for more than the given pause, 
   //we assume that no more motion is going to happen
   if(!lockLow && millis() - lowIn > pause){  
       //makes sure this block of code is only executed again after 
       //a new motion sequence has been detected
       lockLow = true;  

            for (int pos1 = 0; pos1 <= 89; pos1 += 1)
          {
            servo1.write(pos1);
            delay(10);
          }
          for (int pos1 = 89; pos1 >= 1; pos1 -= 1)
          {
            servo1.write(pos1);
            delay(10);            
          }
       Serial.print("motion ended at ");      //output
       Serial.print((millis() - pause)/1000);
       Serial.println(" sec");
       delay(50);



       }
   }
}       //THE ISSUE IS HERE

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Я запускал ваш код с помощью инструмента UNIX indent.Это доступно для большинства платформ.Отступы предназначены не только для того, чтобы сделать их красивыми, но и для чтения кода.Также есть много редакторов-программистов, которые найдут «совпадающие» скобки / скобки (например: '%' в vim).

Код выглядит для меня так, как будто отсутствует условие if или что-то подобноеif ( digitalRead( pirPin ) == HIGH ), поскольку в { есть блок - или, по крайней мере, раздел внутри * без явной причины.

По сути, в вашем коде отсутствует 3 лота }, один из которых закрывает вышеупомянутыйблок.Это не должно быть трудно восстановить с тщательным чтением.Но если это не удастся, просто добавьте их в конце.

void loop(  )
{
    if ( digitalRead( pirPin ) == HIGH )
    {
        digitalWrite( ledPin, HIGH );   //the led visualizes the sensors output pin state
        if ( lockLow )
        {
            //makes sure we wait for a transition to LOW before any further output is made:
            lockLow = false;
            Serial.println( "---" );
            Serial.print( "motion detected at " );
            Serial.print( millis(  ) / 1000 );
            Serial.println( " sec" );
            delay( 50 );
        }
        takeLowTime = true;
    }

    if ( digitalRead( pirPin ) == LOW )
    {
        digitalWrite( ledPin, LOW );    //the led visualizes the sensors output pin state

        if ( takeLowTime )
        {
            lowIn = millis(  ); //save the time of the transition from high to LOW
            takeLowTime = false;        //make sure this is only done at the start of a LOW phase
        }
        //if the sensor is low for more than the given pause, 
        //we assume that no more motion is going to happen
        if ( !lockLow && millis(  ) - lowIn > pause )
        {
            //makes sure this block of code is only executed again after 
            //a new motion sequence has been detected
            lockLow = true;

            for ( int pos1 = 0; pos1 <= 89; pos1 += 1 )
            {
                servo1.write( pos1 );
                delay( 10 );
            }
            for ( int pos1 = 89; pos1 >= 1; pos1 -= 1 )
            {
                servo1.write( pos1 );
                delay( 10 );
            }
            Serial.print( "motion ended at " ); //output
            Serial.print( ( millis(  ) - pause ) / 1000 );
            Serial.println( " sec" );
            delay( 50 );

            {

                if ( digitalRead( pirPin ) == HIGH )
                {
                    digitalWrite( ledPin, HIGH );       //the led visualizes the sensors output pin state
                    if ( lockLow )
                    {
                        //makes sure we wait for a transition to LOW before any further output is made:
                        lockLow = false;
                        Serial.println( "---" );
                        Serial.print( "motion detected at " );
                        Serial.print( millis(  ) / 1000 );
                        Serial.println( " sec" );
                        delay( 50 );
                    }
                    takeLowTime = true;
                }

                if ( digitalRead( pirPin ) == LOW )
                {
                    digitalWrite( ledPin, LOW );        //the led visualizes the sensors output pin state

                    if ( takeLowTime )
                    {
                        lowIn = millis(  );     //save the time of the transition from high to LOW
                        takeLowTime = false;    //make sure this is only done at the start of a LOW phase
                    }
                    //if the sensor is low for more than the given pause, 
                    //we assume that no more motion is going to happen
                    if ( !lockLow && millis(  ) - lowIn > pause )
                    {
                        //makes sure this block of code is only executed again after 
                        //a new motion sequence has been detected
                        lockLow = true;

                        for ( int pos1 = 0; pos1 <= 89; pos1 += 1 )
                        {
                            servo1.write( pos1 );
                            delay( 10 );
                        }
                        for ( int pos1 = 89; pos1 >= 1; pos1 -= 1 )
                        {
                            servo1.write( pos1 );
                            delay( 10 );
                        }
                        Serial.print( "motion ended at " );     //output
                        Serial.print( ( millis(  ) - pause ) / 1000 );
                        Serial.println( " sec" );
                        delay( 50 );
                    }
                }
            }                   //THE ISSUE IS HERE
0 голосов
/ 24 февраля 2019

Этот онлайн-инструмент поможет вам разобраться.Я вижу, что по крайней мере две закрывающие скобки отсутствуют.

Также то, что люди предложили здесь для отступа в коде, является очень хорошим советом.

Другим способом может быть рефакторинг вашего кода вменьшие функции, работающие от внутренних частей наружу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...