АААА, хочу сделать локализацию. Помогите, код расскомментировал Спойлер: Ошибка компилятора Arduino: 1.6.5 (Mac OS X), Плата"Arduino/Genuino Uno" sketch_jan21a:6: error: 'tempEn' does not name a type sketch_jan21a:7: error: 'pressEn' does not name a type sketch_jan21a:8: error: 'altEn' does not name a type sketch_jan21a:9: error: 'tempRu' does not name a type sketch_jan21a:10: error: 'pressRu' does not name a type sketch_jan21a:11: error: 'altRu' does not name a type sketch_jan21a.ino: In function 'void loop()': sketch_jan21a:32: error: 'temp' was not declared in this scope sketch_jan21a:32: error: 'tempRu' was not declared in this scope sketch_jan21a:33: error: 'press' was not declared in this scope sketch_jan21a:33: error: 'pressRu' was not declared in this scope sketch_jan21a:34: error: 'alt' was not declared in this scope sketch_jan21a:34: error: 'altRu' was not declared in this scope sketch_jan21a:38: error: 'temp' was not declared in this scope sketch_jan21a:38: error: 'tempEn' was not declared in this scope sketch_jan21a:39: error: 'press' was not declared in this scope sketch_jan21a:39: error: 'pressEn' was not declared in this scope sketch_jan21a:40: error: 'alt' was not declared in this scope sketch_jan21a:40: error: 'altEn' was not declared in this scope sketch_jan21a:54: error: 'temp' was not declared in this scope sketch_jan21a:60: error: 'press' was not declared in this scope sketch_jan21a:66: error: 'alt' was not declared in this scope sketch_jan21a.ino: At global scope: sketch_jan21a:83: error: 'tempEn' does not name a type sketch_jan21a:84: error: 'pressEn' does not name a type sketch_jan21a:85: error: 'altEn' does not name a type sketch_jan21a:86: error: 'tempRu' does not name a type sketch_jan21a:87: error: 'pressRu' does not name a type sketch_jan21a:88: error: 'altRu' does not name a type sketch_jan21a:93: error: redefinition of 'Adafruit_BMP085 bmp' sketch_jan21a:16: error: 'Adafruit_BMP085 bmp' previously declared here sketch_jan21a:94: error: redefinition of 'LiquidCrystal lcd' sketch_jan21a:17: error: 'LiquidCrystal lcd' previously declared here sketch_jan21a:95: error: redefinition of 'int analogPin' sketch_jan21a:18: error: 'int analogPin' previously defined here sketch_jan21a:96: error: redefinition of 'int val' sketch_jan21a:19: error: 'int val' previously defined here sketch_jan21a:97: error: redefinition of 'int menu' sketch_jan21a:20: error: 'int menu' previously defined here sketch_jan21a:98: error: redefinition of 'int lang' sketch_jan21a:21: error: 'int lang' previously defined here sketch_jan21a.ino: In function 'void setup()': sketch_jan21a:99: error: redefinition of 'void setup()' sketch_jan21a:22: error: 'void setup()' previously defined here sketch_jan21a.ino: In function 'void loop()': sketch_jan21a:106: error: redefinition of 'void loop()' sketch_jan21a:29: error: 'void loop()' previously defined here sketch_jan21a:109: error: 'temp' was not declared in this scope sketch_jan21a:109: error: 'tempRu' was not declared in this scope sketch_jan21a:110: error: 'press' was not declared in this scope sketch_jan21a:110: error: 'pressRu' was not declared in this scope sketch_jan21a:111: error: 'alt' was not declared in this scope sketch_jan21a:111: error: 'altRu' was not declared in this scope sketch_jan21a:115: error: 'temp' was not declared in this scope sketch_jan21a:115: error: 'tempEn' was not declared in this scope sketch_jan21a:116: error: 'press' was not declared in this scope sketch_jan21a:116: error: 'pressEn' was not declared in this scope sketch_jan21a:117: error: 'alt' was not declared in this scope sketch_jan21a:117: error: 'altEn' was not declared in this scope sketch_jan21a:131: error: 'temp' was not declared in this scope sketch_jan21a:137: error: 'press' was not declared in this scope sketch_jan21a:143: error: 'alt' was not declared in this scope Multiple libraries were found for "LiquidCrystalRus.h" Used: /Users/SirSaaryan/Documents/Arduino/libraries/LiquidCrystalRus-master Not used: /Users/SirSaaryan/Documents/Arduino/libraries/RoboCraft-LiquidCrystalRus-ce8603e 'tempEn' does not name a type Это сообщение будет содержать больше информации чем "Отображать вывод во время компиляции" включено в Файл > Настройки Код (C++): // Meteostation with working menu // Menu is working via potentiometr // I've lost my DHT22, so now I use BMP180 // Narek Saaryan // 20.12.2016 tempEn = "Temp.= "; pressEn = "Pres.= "; altEn = "Alt.= "; tempRu = "Темп.= "; pressRu = "Давл.= "; altRu = "Выс.= "; #include <LiquidCrystal.h> #include <Wire.h> #include "Adafruit_BMP085.h" #include <LiquidCrystalRus.h> Adafruit_BMP085 bmp; LiquidCrystal lcd(4, 5, 10, 11, 12, 13); int analogPin = 0; int val = 0; int menu = 0; int lang = 0; //English void setup() { lcd.begin(16, 2); if (!bmp.begin()) { lcd.println("404"); while (1) {} } } void loop() { if (lang == 1) { temp = tempRu; press = pressRu; alt = altRu; } else { temp = tempEn; press = pressEn; alt = altEn; } val = analogRead(analogPin); //обозначаем вход потенциометра if (val <= 1024 && val >= 751) //Тут мы показываем menu = 0; //При каких значениях if (val <= 750 && val >= 501) //Потенциометра menu = 1; //Нужно открывать if (val <= 500 && val >= 251) //Какое меню menu = 2; // С помощью присвоения if (val < 250) //Числа переменой меню menu = 3; switch (menu) { case 0: lcd.clear(); lcd.print(temp); lcd.print(bmp.readTemperature()); lcd.println(" *C "); break; case 1: lcd.clear(); lcd.print(press); lcd.print(bmp.readPressure()); lcd.println(" Pa"); break; case 2: lcd.clear(); lcd.print(alt); lcd.print(bmp.readAltitude(100525)); lcd.println(" m. "); break; case 3: lcd.clear(); lcd.print("Settings"); lcd.setCursor(0, 1); lcd.print("Coming soon"); break; } delay(1000); }
Попробуй.... Код (C++): // Meteostation with working menu // Menu is working via potentiometr // I've lost my DHT22, so now I use BMP180 // Narek Saaryan // 20.12.2016 String tempEn = "Temp.= "; String pressEn = "Pres.= "; String altEn = "Alt.= "; String tempRu = "Темп.= "; String pressRu = "Давл.= "; String altRu = "Выс.= "; #include <LiquidCrystal.h> #include <Wire.h> #include <Adafruit_BMP085.h> #include <LiquidCrystalRus.h> Adafruit_BMP085 bmp; LiquidCrystal lcd(4, 5, 10, 11, 12, 13); int analogPin = 0; int val = 0; int menu = 0; int lang = 0; //English void setup() { lcd.begin(16, 2); if (!bmp.begin()) { lcd.println("404"); while (1) {} } } void loop() { if (lang == 1) { temp = tempRu; press = pressRu; alt = altRu; } else { temp = tempEn; press = pressEn; alt = altEn; } val = analogRead(analogPin); //обозначаем вход потенциометра if (val <= 1024 && val >= 751) //Тут мы показываем menu = 0; //При каких значениях if (val <= 750 && val >= 501) //Потенциометра menu = 1; //Нужно открывать if (val <= 500 && val >= 251) //Какое меню menu = 2; // С помощью присвоения if (val < 250) //Числа переменой меню menu = 3; switch (menu) { case 0: lcd.clear(); lcd.print(temp); lcd.print(bmp.readTemperature()); lcd.println(" *C "); break; case 1: lcd.clear(); lcd.print(press); lcd.print(bmp.readPressure()); lcd.println(" Pa"); break; case 2: lcd.clear(); lcd.print(alt); lcd.print(bmp.readAltitude(100525)); lcd.println(" m. "); break; case 3: lcd.clear(); lcd.print("Settings"); lcd.setCursor(0, 1); lcd.print("Coming soon"); break; } delay(1000); }
Дружище, вот! BMP -- датчик температуры и давления! Отличная вещь и по приемлемой цене. У меня 180, но по 85 работает! Эхх, а у меня вот еще ошибочки полезли! Я вижу ты гик, можешь помочь? Предыдущие ошибки ушли, новые пришли. Я эти переменные как-то должен объявить в цикле? Если да, то как? Спойлер: Ошибка! Опять(( Arduino: 1.6.5 (Mac OS X), Плата"Arduino/Genuino Uno" sketch_jan21a.ino: In function 'void loop()': sketch_jan21a:32: error: 'temp' was not declared in this scope sketch_jan21a:33: error: 'press' was not declared in this scope sketch_jan21a:34: error: 'alt' was not declared in this scope sketch_jan21a:38: error: 'temp' was not declared in this scope sketch_jan21a:39: error: 'press' was not declared in this scope sketch_jan21a:40: error: 'alt' was not declared in this scope sketch_jan21a:60: error: 'press' was not declared in this scope sketch_jan21a:66: error: 'alt' was not declared in this scope Multiple libraries were found for "LiquidCrystalRus.h" Used: /Users/SirSaaryan/Documents/Arduino/libraries/LiquidCrystalRus-master Not used: /Users/SirSaaryan/Documents/Arduino/libraries/RoboCraft-LiquidCrystalRus-ce8603e 'temp' was not declared in this scope Это сообщение будет содержать больше информации чем "Отображать вывод во время компиляции" включено в Файл > Настройки Спойлер: Кодик Код (C++): // Meteostation with working menu // Menu is working via potentiometr // I've lost my DHT22, so now I use BMP180 // Narek Saaryan // 20.12.2016 String tempEn = "Temp.= "; String pressEn = "Pres.= "; String altEn = "Alt.= "; String tempRu = "Темп.= "; String pressRu = "Давл.= "; String altRu = "Выс.= "; #include <LiquidCrystal.h> #include <Wire.h> #include <Adafruit_BMP085.h> #include <LiquidCrystalRus.h> Adafruit_BMP085 bmp; LiquidCrystal lcd(4, 5, 10, 11, 12, 13); int analogPin = 0; int val = 0; int menu = 0; int lang = 0; //English void setup() { lcd.begin(16, 2); if (!bmp.begin()) { lcd.println("404"); while (1) {} } } void loop() { if (lang == 1) { temp = tempRu; press = pressRu; alt = altRu; } else { temp = tempEn; press = pressEn; alt = altEn; } val = analogRead(analogPin); //обозначаем вход потенциометра if (val <= 1024 && val >= 751) //Тут мы показываем menu = 0; //При каких значениях if (val <= 750 && val >= 501) //Потенциометра menu = 1; //Нужно открывать if (val <= 500 && val >= 251) //Какое меню menu = 2; // С помощью присвоения if (val < 250) //Числа переменой меню menu = 3; switch (menu) { case 0: lcd.clear(); lcd.print(temp); lcd.print(bmp.readTemperature()); lcd.println(" *C "); break; case 1: lcd.clear(); lcd.print(press); lcd.print(bmp.readPressure()); lcd.println(" Pa"); break; case 2: lcd.clear(); lcd.print(alt); lcd.print(bmp.readAltitude(100525)); lcd.println(" m. "); break; case 3: lcd.clear(); lcd.print("Settings"); lcd.setCursor(0, 1); lcd.print("Coming soon"); break; } delay(1000); }
В ошибках прозрачно указано, что не объявлены переменные 'temp', 'press', 'alt', используемые в коде. Но я бы Вам посоветовал немного оптимизировать код, например: код: Код (C++): String tempEn = "Temp.= "; String pressEn = "Pres.= "; String altEn = "Alt.= "; String tempRu = "Темп.= "; String pressRu = "Давл.= "; String altRu = "Выс.= "; заменить на: Код (C++): String temp[] = { String("Temp.= "), String("Темп.= ") }; String press[] = { String("Pres.= "), String("Давл.= ") }; String alt[] = { String("Alt.= "), String("Выс.= ") }; убрать из кода условие (оно становиться не нужным): Код (C++): if (lang == 1) { temp = tempRu; press = pressRu; alt = altRu; } else { temp = tempEn; press = pressEn; alt = altEn; } код вывода строк 'lcd.print(temp);' и т.п. заменить на: Код (C++): ............................... lcd.print(temp[lang]); ............................... lcd.print(press[lang]); ............................... lcd.print(alt[lang]); Можно вместо String использовать C-строки: Код (C++): char *temp[] = { "Temp.= ", "Темп.= " }; char *press[] = { "Pres.= ", "Давл.= " }; char *alt[] = { "Alt.= ", "Выс.= " }; PS: UP ещё раз
Спойлер: Ответ Спасибо огромнюшее! Спасли мини-проект начинающего ардуинщика от провала! За оптимизацию отдельное спасибо)
Жду ответной помощи. В стартовом топике в коде указано подключение заголовочного файла: #include <LiquidCrystalRus.h>. Где взяли библиотеку LiquidCrystalRus?
Вот, пожалуйста! Ссылочка на статейку! Спойлер: Пример кодика Код (C++): #include <LineDriver.h> #include <LiquidCrystalExt.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); } Пример фотографии с экранчиком. Была более старая (оригинальная) версия ликвида для кириллицы. Автор статьи её обновил
Блин, если вы не знаете даже того, что необходимо объявлять переменные, как вы собираетесь программировать?
Аналогично фразе: "Блин, если вы не знаете даже того, что на нуль делить нельзя из-за непересечения прямых с точкой 0;0;", сказанной пятикласснику.
и ошибка была не в том, что я не обьявил переменную, а в том, что я её неправильно объявил. Луркмоар эту тему
Пятиклассники получают знания не на форумах. sketch_jan21a:32: error: 'temp' was not declared in this scope - Переменная не объявлена
У всех корректно библиотека LiquidCrystalRus.h работает? Пользуюсь Mega и LCD 2004. Делаю все как в ссылке, но пишет, так будто никакой библиотеки нет(каракули). http://robocraft.ru/blog/arduino/503.html
Используемый LCD 2004 кириллицу поддерживает? Это первый вопрос. А второй: LiquidCrystalRus.h поддерживает только кодировку UTF-8, в какой кодировке "русские" строки хранятся в прошивке?
при появлении в образовательной программе "программирования", обязательно похожу. А пока, форум -- второй дом