РЕШЕНО 26 lcd.begin(); ошибка при компиляции.

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем otis, 13 май 2020.

  1. otis

    otis Гик

    Добрый день ГУРУ.Подскажите новичку. Повторяю игрушку с сайта АРДУИНО. При компиляции скетча выдает ошибку Если строку убрать то ошибки нет. Автору программы дает ссылку на библиотеку. И пишет что это помогает. Скачал и подключил. Но ошибка так и осталось . А если я убираю эту строку ошибки нет
    Код (C++):


    #include <LiquidCrystal.h>
    #include <Wire.h>
    #include <Servo.h>
    #include <LiquidCrystal_I2C.h>
    #define TOT_TARGETS 4
    #define TOT_SENSORS 4
    #define PIN_TARGET 7

    LiquidCrystal_I2C lcd(0x27, 16, 2 );
    Servo Targets[ TOT_TARGETS];  //Сервопривод
    int targetSensor[]  =  { A0, A1, A2, A3};   // Датчикb фоторезисторов
    int readingSensor[ TOT_SENSORS] ;
    int targetTimer[]  =  { 0 , 0 , 0 , 0 } ;
    int score =  0;
    int timer =  100;
    unsigned long interval =  100; // time we need to wait
    unsigned long previousMillis =  0;  // millis()  returns an unsigned long.

    void setup() {
    Serial.begin( 9600);

    lcd.backlight();
    lcd.clear();
    lcd.begin();
    lcd.setCursor( 0, 0 );
    lcd.print("SCORE: 0");
    lcd.setCursor( 0, 1);
    lcd.print("TIMER: 0");

    //attaches the servos from pin 7  to 10
      for (int targetNumber =  0 ;  targetNumber < TOT_TARGETS;  targetNumber++)
      {
    Targets[ targetNumber] .attach( targetNumber + PIN_TARGET);
    Targets[ targetNumber] .write(0 ) ;
      }
    }

    void loop()  {

    lcd.clear();
    lcd.setCursor( 0, 0); // (Column,Row)
    lcd.print("SCORE: ");
    lcd.setCursor( 12, 0);
    lcd.print( score);
    lcd.setCursor( 0, 1); // (Column,Row)
    lcd.print("TIME: ");
    lcd.setCursor( 12, 1);
    lcd.print(timer);

    unsigned long currentMillis =  millis() ;  // grab current time

    // check if "interval" time has passed (100 milliseconds)
      if ((unsigned long)(currentMillis - previousMillis) >= interval) {

        for (int targetsensorNumber = 0; targetsensorNumber < TOT_SENSORS; targetsensorNumber++) {
    readingSensor[targetsensorNumber] = analogRead({(targetSensor[targetsensorNumber])});
        }
        previousMillis = millis();
    Serial.print(readingSensor[1]);
    Serial.println(readingSensor[2]);
      }
    villainTarget();
    targetDown();
    ifZero();
    Countdowntimer();
     
    }

    void villainTarget() {

    int target = random(1, 5);
    delay(10);
      if (target == 1) {
    targetTimer[0]++;
    Targets[0].write(90 );
    delay( 10 );
        if (targetTimer[ 0 ]  ==  2 ) {
    targetTimer[ 0]  =  0 ;
    Targets[ 0].write(0);
    delay( 10);
        }
      }  else if ( target ==  2)  {
    targetTimer[ 1]++;
    Targets[ 1 ] .write( 90 ) ;
    delay( 10);
        if ( targetTimer[ 1 ]  ==  2)  {
    targetTimer[ 1 ]  =  0;
    Targets[ 1 ] .write(0);
    delay( 10);
        }

      }  else if ( target ==  3)  {
    targetTimer[ 2]++;
    Targets[ 2 ] .write( 90 ) ;
    delay( 10);
        if ( targetTimer[ 2 ]  ==  2)  {
    targetTimer[ 2 ]  =  0;
    Targets[ 2 ] .write(0);
    delay( 10);
        }
      }  else if ( target ==  4)  {
    targetTimer[ 3]++;
    Targets[ 3 ] .write( 90 ) ;
    delay( 10);
        if ( targetTimer[ 3 ]  ==  2)  {
    targetTimer[ 3 ]  =  0;
    Targets[ 3 ] .write( 0 );
    delay( 10 );
        }
      }
    }

    void targetDown() {
    //Sith Trooper
      if (readingSensor[ 0] >> 450 )  {
    score++;
    Targets[ 0].write( 0 );
    delay( 100 );
      }
    //Sith Trooper
      if (readingSensor[ 1] >> 990 )  {
    score++;
    Targets[ 1].write( 1 );
    delay( 100 );
      }
    // Palpatine
      if (readingSensor[ 2] >> 990 )  {
        score =  score + 5 ;
    Targets[ 2].write( 2 );
    delay( 100 );
      }
    //Sith Trooper
      if (readingSensor[ 3] >> 985 )  {
    score++;
    Targets[ 3].write( 3);
    delay( 100);
      }
    }


    void Countdowntimer()  {
    timer--;
    delay( 1000);
    }

    void ifZero()  {
      if ( timer ==  0)  {
        for ( int targetNumber =  0 ;  targetNumber < TOT_TARGETS;  targetNumber++)
        {
    Targets[ targetNumber] .write( 0);
        }
    lcd.clear();
    lcd.print(" YOUR SCORE: ");
    lcd.setCursor( 12, 0);
    lcd.print(score);
    delay(10000);
        score= 0;
        timer =  100;
      }
    }
     
  2. BAR__MEN

    BAR__MEN Официальный гик Администратор

    Ошибку мы из воздуха возьмем?
     
    otis нравится это.
  3. otis

    otis Гик

    Компилятору не нравиться вот это "lcd.begin();"
     
  4. BAR__MEN

    BAR__MEN Официальный гик Администратор

    Ну так а ошибку Вы дадите или как?
     
    otis нравится это.
  5. parovoZZ

    parovoZZ Гуру

    Это Joker-ошибка. Т.е. любая на твой выбор (или вкус).
     
    otis и BAR__MEN нравится это.
  6. otis

    otis Гик

    no matching function for call to 'LiquidCrystal_I2C::begin()'
    это то что пишет компилятор
     
  7. BAR__MEN

    BAR__MEN Официальный гик Администратор

    Используйте init() вместо begin(), Также библиотека LiquidCrystal.h здесь не нужна.
     
    otis нравится это.
  8. otis

    otis Гик

    Как убрать одну библиотеку и подключить другую. Походу у меня ошибка от того что не та библиотека.
     
  9. otis

    otis Гик

    Код (C++):
    C:\Users\73B5~1\AppData\Local\Temp\arduino_modified_sketch_964238\Tir_v1.ino: In function 'void ifZero()':

    Tir_v1:154:2: error: 'lcd' was not declared in this scope

      lcd.clear();

      ^~~

    exit status 1
    'lcd' was not declared in this scope
    [/code
    теперь вот эта ошибка. я убрал из папки либратес  библиотеку( вырезал папку) и на это место вставил другую. ( ту что рекомендовал автор )
     
  10. b707

    b707 Гуру

    otis. выложите код после редактирования, судя по ошибке, вы там что-то напортачили
     
    otis нравится это.
  11. BAR__MEN

    BAR__MEN Официальный гик Администратор

    И для кого придумана кнопка установки библиотеки из архива? [​IMG]
     
    otis нравится это.
  12. a1000

    a1000 Гик

    otis. Не путайте установку библиотеки в IDE (в среду разработки) и подключение библиотеки к вашему скетчу. Когда вы скачиваете библиотеку из интернета и закидываете её в папку libraries - это установка библиотеки в IDE. Там их может быть любое количество и на любой вкус. А вот если вы хотите использовать библиотеку в скетче, вы об этом сообщаете компилятору через директиву include. В вашем случае это строки

    Код (C++):
    #include <LiquidCrystal.h>
    #include <Wire.h>
    #include <Servo.h>
    #include <LiquidCrystal_I2C.h>
    Разберитесь в этом куске вашего кода. Если библиотека не нужна, закомментируйте строку с её объявлением или удалите.
     
    otis нравится это.
  13. otis

    otis Гик

    Код (C++):
    #include <Wire.h>
    #include <Servo.h>
    #include <LiquidCrystal_I2C.h>
    LiquidCrystal_I2C lcd(0x27, 16, 2 );

    #define TOT_TARGETS 4
    #define TOT_SENSORS 4
    #define PIN_TARGET 7


    Servo Targets[ TOT_TARGETS];  //Servo
    int targetSensor[]  =  { A0, A1, A2, A3};  // LDR Sensor
    int readingSensor[ TOT_SENSORS] ;
    int targetTimer[]  =  { 0 , 0 , 0 , 0 } ;
    int score =  0;
    int timer =  100;
    unsigned long interval =  100; // time we need to wait
    unsigned long previousMillis =  0;  // millis()  returns an unsigned long.

    void setup() {
    Serial.begin( 9600);

    lcd.backlight();
    lcd.clear();
    lcd.begin();
    lcd.setCursor( 0, 0 );
    lcd.print("SCORE: 0");
    lcd.setCursor( 0, 1);
    lcd.print("TIMER: 0");

    //attaches the servos from pin 7  to 10
      for (int targetNumber =  0 ;  targetNumber < TOT_TARGETS;  targetNumber++)
      {
    Targets[ targetNumber] .attach( targetNumber + PIN_TARGET);
    Targets[ targetNumber] .write(0 ) ;
      }
    }

    void loop()  {

    lcd.clear();
    lcd.setCursor( 0, 0); // (Column,Row)
    lcd.print("SCORE: ");
    lcd.setCursor( 12, 0);
    lcd.print( score);
    lcd.setCursor( 0, 1); // (Column,Row)
    lcd.print("TIME: ");
    lcd.setCursor( 12, 1);
    lcd.print(timer);

    unsigned long currentMillis =  millis() ;  // grab current time

    // check if "interval" time has passed (100 milliseconds)
      if ((unsigned long)(currentMillis - previousMillis) >= interval) {

        for (int targetsensorNumber = 0; targetsensorNumber < TOT_SENSORS; targetsensorNumber++) {
    readingSensor[targetsensorNumber] = analogRead({(targetSensor[targetsensorNumber])});
        }
        previousMillis = millis();
    Serial.print(readingSensor[1]);
    Serial.println(readingSensor[2]);
      }
    villainTarget();
    targetDown();
    ifZero();
    Countdowntimer();

    }

    void villainTarget() {

    int target = random(1, 5);
    delay(10);
      if (target == 1) {
    targetTimer[0]++;
    Targets[0].write(90 );
    delay( 10 );
        if (targetTimer[ 0 ]  ==  2 ) {
    targetTimer[ 0]  =  0 ;
    Targets[ 0].write(0);
    delay( 10);
        }
      }  else if ( target ==  2)  {
    targetTimer[ 1]++;
    Targets[ 1 ] .write( 90 ) ;
    delay( 10);
        if ( targetTimer[ 1 ]  ==  2)  {
    targetTimer[ 1 ]  =  0;
    Targets[ 1 ] .write(0);
    delay( 10);
        }

      }  else if ( target ==  3)  {
    targetTimer[ 2]++;
    Targets[ 2 ] .write( 90 ) ;
    delay( 10);
        if ( targetTimer[ 2 ]  ==  2)  {
    targetTimer[ 2 ]  =  0;
    Targets[ 2 ] .write(0);
    delay( 10);
        }
      }  else if ( target ==  4)  {
    targetTimer[ 3]++;
    Targets[ 3 ] .write( 90 ) ;
    delay( 10);
        if ( targetTimer[ 3 ]  ==  2)  {
    targetTimer[ 3 ]  =  0;
    Targets[ 3 ] .write( 0 );
    delay( 10 );
        }
      }
    }

    void targetDown() {
    //Sith Trooper
      if (readingSensor[ 0] >> 450 )  {
    score++;
    Targets[ 0].write( 0 );
    delay( 100 );
      }
    //Sith Trooper
      if (readingSensor[ 1] >> 990 )  {
    score++;
    Targets[ 1].write( 1 );
    delay( 100 );
      }
    // Palpatine
      if (readingSensor[ 2] >> 990 )  {
        score =  score + 5 ;
    Targets[ 2].write( 2 );
    delay( 100 );
      }
    //Sith Trooper
      if (readingSensor[ 3] >> 985 )  {
    score++;
    Targets[ 3].write( 3);
    delay( 100);
      }
    }


    void Countdowntimer()  {
    timer--;
    delay( 1000);
    }

    void ifZero()  {
      if ( timer ==  0)  {
        for ( int targetNumber =  0 ;  targetNumber < TOT_TARGETS;  targetNumber++)
        {
    Targets[ targetNumber] .write( 0);
        }
    lcd.clear();
    lcd.print(" YOUR SCORE: ");
    lcd.setCursor( 12, 0);
    lcd.print(score);
    delay(10000);
        score= 0;
        timer =  100;
      }
    }
     
    Всем спасибо. Вопрос закрыт. Добавил нужную библиотеку. И первый раз нажал кнопку "вкладки инструменты и Исправить кодировку и перезагрузить". И о МАГИЯ скетч заработал. В приложение компилированный скетч. Схема есть на https://create.arduino.cc/projecthu...ref=platform&ref_id=424_trending___&offset=69