Добрый день ГУРУ.Подскажите новичку. Повторяю игрушку с сайта АРДУИНО. При компиляции скетча выдает ошибку Если строку убрать то ошибки нет. Автору программы дает ссылку на библиотеку. И пишет что это помогает. Скачал и подключил. Но ошибка так и осталось . А если я убираю эту строку ошибки нет Код (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; } }
Код (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 теперь вот эта ошибка. я убрал из папки либратес библиотеку( вырезал папку) и на это место вставил другую. ( ту что рекомендовал автор )
otis. Не путайте установку библиотеки в IDE (в среду разработки) и подключение библиотеки к вашему скетчу. Когда вы скачиваете библиотеку из интернета и закидываете её в папку libraries - это установка библиотеки в IDE. Там их может быть любое количество и на любой вкус. А вот если вы хотите использовать библиотеку в скетче, вы об этом сообщаете компилятору через директиву include. В вашем случае это строки Код (C++): #include <LiquidCrystal.h> #include <Wire.h> #include <Servo.h> #include <LiquidCrystal_I2C.h> Разберитесь в этом куске вашего кода. Если библиотека не нужна, закомментируйте строку с её объявлением или удалите.
Код (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