РЕШЕНО 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. NikitOS

    NikitOS Public enemy Администратор

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

    otis Гик

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

    NikitOS Public enemy Администратор

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

    parovoZZ Гуру

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

    otis Гик

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

    NikitOS Public enemy Администратор

    Используйте 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. NikitOS

    NikitOS Public enemy Администратор

    И для кого придумана кнопка установки библиотеки из архива? [​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