-
Добрый день ГУРУ.Подскажите новичку. Повторяю игрушку с сайта АРДУИНО. При компиляции скетча выдает ошибку Если строку убрать то ошибки нет. Автору программы дает ссылку на библиотеку. И пишет что это помогает. Скачал и подключил. Но ошибка так и осталось . А если я убираю эту строку ошибки нет
#include <LiquidCrystal.h>
#include <Wire.h>
#include <Servo.h>
#include <LiquidCrystal_I2C.h>
#define TOT_TARGETS 4
#define TOT_SENSORS 4
#define PIN_TARGET 7LiquidCrystal_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;
}
} -
Ошибку мы из воздуха возьмем?
-
Компилятору не нравиться вот это «lcd.begin();»
-
Ну так а ошибку Вы дадите или как?
-
Это Joker-ошибка. Т.е. любая на твой выбор (или вкус).
otis и NikitOS нравится это.
-
no matching function for call to ‘LiquidCrystal_I2C::begin()’
это то что пишет компилятор -
Используйте init() вместо begin(), Также библиотека LiquidCrystal.h здесь не нужна.
-
Как убрать одну библиотеку и подключить другую. Походу у меня ошибка от того что не та библиотека.
-
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
теперь вот эта ошибка. я убрал из папки либратес библиотеку( вырезал папку) и на это место вставил другую. ( ту что рекомендовал автор ) -
otis. выложите код после редактирования, судя по ошибке, вы там что-то напортачили
-
И для кого придумана кнопка установки библиотеки из архива?
-
otis. Не путайте установку библиотеки в IDE (в среду разработки) и подключение библиотеки к вашему скетчу. Когда вы скачиваете библиотеку из интернета и закидываете её в папку libraries — это установка библиотеки в IDE. Там их может быть любое количество и на любой вкус. А вот если вы хотите использовать библиотеку в скетче, вы об этом сообщаете компилятору через директиву include. В вашем случае это строки
#include <LiquidCrystal.h>
#include <Wire.h>
#include <Servo.h>
#include <LiquidCrystal_I2C.h>Разберитесь в этом куске вашего кода. Если библиотека не нужна, закомментируйте строку с её объявлением или удалите.
-
#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 7Servo 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
Loading
Помогите пожалуйста, понять, где ошибка ?
Offline
Зарегистрирован: 05.07.2012
Имеется скетч
#include <LiquidCrystal.h> #include <LiquidCrystalRus.h> LiquidCrystalRus lcd(12, 11, 5, 4, 3, 2); void setup() { lcd.begin(16, 2); lcd.print("Здравствуй, мир!"); } void loop() { lcd.setCursor(0, 1); lcd.print(millis() / 1000); }
И при компиляции выдаёт ошибку ‘LiquidCristalRus’ does not name a type. Я только начал учиться и никак не пойму, где ошибка ?
Есть ещё и другие скетчи с подобной ошибкой но, мне пока с этой бы разобраться…
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:\Users\nishant\AppData\Local\Temp\arduino_modified_sketch_827962\sketch_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:\Users\nishant\AppData\Local\Temp\arduino_modified_sketch_827962\sketch_apr02a.ino:5:0: C:\Users\nishant\Documents\Arduino\libraries\LiquidCrystal_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:\Users\nishant\Documents\Arduino\libraries\LiquidCrystal_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.
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?