Тупик с переменными и данными локализации

Тема в разделе "Arduino & Shields", создана пользователем SirSaaryan, 21 янв 2016.

Метки:
  1. SirSaaryan

    SirSaaryan Нуб

    АААА, хочу сделать локализацию. Помогите, код расскомментировал
    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);
    }
     
  2. Mestniy

    Mestniy Гуру

    Попробуй....
    Код (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);
    }
     
    Последнее редактирование: 21 янв 2016
    SirSaaryan нравится это.
  3. Mestniy

    Mestniy Гуру

    Adafruit_BMP085.h- это че за библиотека?
     
  4. SirSaaryan

    SirSaaryan Нуб

    Дружище, вот! 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);
    }
     

    Вложения:

  5. SirSaaryan

    SirSaaryan Нуб

  6. AlexU

    AlexU Гуру

    В ошибках прозрачно указано, что не объявлены переменные '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 ещё раз ;)
     
    SirSaaryan нравится это.
  7. SirSaaryan

    SirSaaryan Нуб

    Спасибо огромнюшее! Спасли мини-проект начинающего ардуинщика от провала! За оптимизацию отдельное спасибо):):):)
     
  8. AlexU

    AlexU Гуру

    Жду ответной помощи. В стартовом топике в коде указано подключение заголовочного файла: #include <LiquidCrystalRus.h>.
    Где взяли библиотеку LiquidCrystalRus?
     
    SirSaaryan нравится это.
  9. AlexU

    AlexU Гуру

    Спасибо!
     
  10. SirSaaryan

    SirSaaryan Нуб

    Вот, пожалуйста!
    Ссылочка на статейку!

    Код (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);
    }
    Пример фотографии с экранчиком.
    [​IMG]
    Была более старая (оригинальная) версия ликвида для кириллицы. Автор статьи её обновил
     
  11. AlexVS

    AlexVS Гик

    Блин, если вы не знаете даже того, что необходимо объявлять переменные, как вы собираетесь программировать?
     
  12. SirSaaryan

    SirSaaryan Нуб

    Аналогично фразе: "Блин, если вы не знаете даже того, что на нуль делить нельзя из-за непересечения прямых с точкой 0;0;", сказанной пятикласснику.
     
  13. SirSaaryan

    SirSaaryan Нуб

    и ошибка была не в том, что я не обьявил переменную, а в том, что я её неправильно объявил. Луркмоар эту тему
     
  14. AlexVS

    AlexVS Гик

    Пятиклассники получают знания не на форумах.
    sketch_jan21a:32: error: 'temp' was not declared in this scope - Переменная не объявлена
     
  15. Mestniy

    Mestniy Гуру

    У всех корректно библиотека LiquidCrystalRus.h работает? Пользуюсь Mega и LCD 2004. Делаю все как в ссылке, но пишет, так будто никакой библиотеки нет(каракули).
    http://robocraft.ru/blog/arduino/503.html
     
  16. AlexU

    AlexU Гуру

    Используемый LCD 2004 кириллицу поддерживает? Это первый вопрос. А второй: LiquidCrystalRus.h поддерживает только кодировку UTF-8, в какой кодировке "русские" строки хранятся в прошивке?
     
    Mestniy нравится это.
  17. Mestniy

    Mestniy Гуру

    Ясно. Спасибо. Но может кто пробовал подключать?
     
  18. SirSaaryan

    SirSaaryan Нуб

    при появлении в образовательной программе "программирования", обязательно похожу. А пока, форум -- второй дом