Arduino lcd begin ошибка

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

    #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. Ошибку мы из воздуха возьмем?

  3. Компилятору не нравиться вот это «lcd.begin();»

  4. Ну так а ошибку Вы дадите или как?

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


    otis и NikitOS нравится это.

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

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

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

  9. C:Users73B5~1AppDataLocalTemparduino_modified_sketch_964238Tir_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. otis. выложите код после редактирования, судя по ошибке, вы там что-то напортачили

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

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

    #include <LiquidCrystal.h>
    #include <Wire.h>
    #include <Servo.h>
    #include <LiquidCrystal_I2C.h>

    Разберитесь в этом куске вашего кода. Если библиотека не нужна, закомментируйте строку с её объявлением или удалите.

  13. #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

Arduino Forum

Loading

I have tested the library and LCD with simple script and everything worked fine. Now I am trying to add the LCD functionality to my working program but the code reaches the lcd.begin(); function it causes a runtime error and no following lines are executed. I have tried many different configurations and none of them have worked; including have lcd.begin() in the setup(), in the InitSM(), loop(), and RunSM() and it crashes every time.

I am wondering if I am running into a similar issue described here.

Following thebusybee’s advice, I started with a simple working script that could print to the LCD screen. I then started adding initializing functions in the setup until it stopped working. InitSM(&AFC); is the line that causes the LCD functions to stop working. InitSM(&AFC); calls millis(), enables watchdog timer interrupts, and external interrupt on digital pin 2. Below is the exam code.

// Library 
#include <Arduino.h>
#include <EventTimers.h>
#include <EventCheckers.h>
#include <avr/sleep.h>
#include <Timeout.h>
#include <AFCSM.h>
#include <DoorServo.h>
#include <EventTypes.h>
#include <HardwareInterrupts.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,20,4);
//LiquidCrystal_I2C *lcdA; //0x27,20,4
//lcdA = &lcd;
//lcdA->begin();

// global variables
static uint8_t TimerCheck = 0;
static uint8_t Timer30; 
static EventType LCDButton;
static EventType BatteryEvents;
static EventType BumperEvents;
static EventType FogEvents;
static EventType CurrentEvent;
static EventType FrontDoor;
static EventType BackDoor;
static AFCDATA AFC;
static AFCState PreviousState;

void setup() {
  // set up serial communication with computer
  Serial.begin(9600);

  // uart for MiniOFS to MCU
  Serial1.begin(1200, SERIAL_8N1);

  /*** set up interrupts, not init ***/  
  SetUpWatchdogT(); // 8sec interrval counter for 32sec environ sensor check
  SetUpButtonInt(); // external button interrupt for LCD screen

  // init LCD
  lcd.begin();

  // Enable interrupts
  sei();

  // Set the sleep mode to Power-Down
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);

  // initi doors
  initDoor();

  // init statemachine
  InitSM(&AFC);
  PreviousState = AFC.State;
}

void loop() {
  Serial.flush();

  lcd.clear();
  // lcd.setCursor(2,0);   //Set cursor to character 2 on line 0
  lcd.print("LED INIT!");
  Serial.println("printed");
}

ISR(WDT_vect) {
  // Add to timer
  TimerCheck += 1;

  // check if 30secs have elapsed time has
  if (TimerCheck >= 3){
    TimerCheck = 0; // reset counter
    Timer30 = true; // raise flag
  }  

}

void Buttonisr(){
  // Button Flag
  LCDButton = BUTTON_ON;
}

I narrowed it down to being the external interrupt enable on digital pin 2. Below are the functions for the setup and enable of the external interrupt.

void SetUpButtonInt(){
    
    // set up the pin as an input and attach a isr 
    pinMode(ButtonPin, INPUT_PULLUP);
    attachInterrupt(digitalPinToInterrupt(ButtonPin), Buttonisr, RISING); // interrupt on rising edge of pin

    return; 
}

void EnableButtonInt(){

    EIMSK |= (1 << INT0); // enable external interrupt
    Serial.println("enable external interrupt");
    return;
}

How can this setup affect the lcd I2C setup?


hey all, i am trying to interface 16×2 LCD display with ESP8266 NodeMCU using I2C shield of 16×2 LCD display. I am getting following error:

Arduino: 1.8.8 (Windows 10), Board: "Arduino/Genuino Uno"

C:UsersnishantAppDataLocalTemparduino_modified_sketch_827962sketch_apr02a.ino: In function 'void setup()':

sketch_apr02a:15:13: error: no matching function for call to 'LiquidCrystal_I2C::begin()'

   lcd.begin();                    // start lcd 

             ^

In file included from C:UsersnishantAppDataLocalTemparduino_modified_sketch_827962sketch_apr02a.ino:5:0:

C:UsersnishantDocumentsArduinolibrariesLiquidCrystal_I2C-master/LiquidCrystal_I2C.h:58:8: note: candidate: void LiquidCrystal_I2C::begin(uint8_t, uint8_t, uint8_t)

   void begin(uint8_t cols, uint8_t rows, uint8_t charsize = LCD_5x8DOTS );

        ^

C:UsersnishantDocumentsArduinolibrariesLiquidCrystal_I2C-master/LiquidCrystal_I2C.h:58:8: note:   candidate expects 3 arguments, 0 provided

exit status 1
no matching function for call to 'LiquidCrystal_I2C::begin()'


can you please elaborate why i am getting this error. because i am not finding any mistake in program. 

    Join 100K+ Subscribers

    Your email is safe with us, we don’t spam.

    Be a part of our ever growing community.

    Offline

    Зарегистрирован: 30.10.2020

    Здравствуйте столкнулся с проблемой lcd was not declared in this scope 

    #include <LiquidCrystal.h>

    #include <Wire.h>

    int disp = 8;

    volatile int counter=0;

    uint32_t timer=0;

    void incCounter(){

      counter++;

    }

    void startMeas(){

      lcd.begin();

      counter=0;

      attachInterrupt(0, incCounter, FALLING );

      timer=millis();

    }

    void setup() {

      LiquidCrystal_I2C lcd(0x27,16,2); 

      Serial.begin(9600);

      pinMode(2,INPUT_PULLUP);

      pinMode(disp, OUTPUT);

      Serial.println(«Start»);

      startMeas();

    }

    void loop() {

    if(millis()-timer>=10000){

      detachInterrupt(0);

      Serial.print(«Frequency:»);

      Serial.print(counter/10);

      Serial.println(» Hz»);

      startMeas();

    }

    }

    Вот подключение дисплея к ардуино и вот датчика 

    htmlimage?id=2pa1-jdhdtnv1brmu0aspyu79tq

    Понравилась статья? Поделить с друзьями:

    Не пропустите эти материалы по теме:

  • Яндекс еда ошибка привязки карты
  • Arduino droid ошибка загрузки
  • Ardo ls 9205 e ошибка е4
  • Ardio ru коды ошибок
  • Arderia ошибка е9 как устранить

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии