Проблема с кодировкой.

Тема в разделе "Arduino & Shields", создана пользователем Zaic, 11 окт 2013.

  1. Zaic

    Zaic Нерд

    Всем добрый день.
    Вылезла такая проблема.
    Я создал массив (5 строк по 20 символов)
    volatile char menu[] = {
    " Demo mode "
    " Objectc "
    " Conditions "
    " Вниз "
    " Вверх "};
    При передачи в LCD, строки с русским съезжают.
    При передачи в порт каждая русская буква превращается в две крюгозябры.
    Подскажите, пожалуйста, как с этим бороться.
     
  2. Megakoteyka

    Megakoteyka Оракул Модератор

  3. Zaic

    Zaic Нерд

    Читал.
    Я использую библиотеку LiquidCrystalRus.h
    Код (Text):
    volatile char menu[] = {
      "      Demo mode    "
      "      Objectc      "
      "      Conditions    "
      "1      Вниз      2"
      "3      Вверх      4"};
    Когда даю команду lcd.print("3 Вверх 4");
    Все ровно.
    А когда в цикле
    for (int i=80; i<=99;i++) lcd.write(menu);
    Съезжает.
     
  4. Megakoteyka

    Megakoteyka Оракул Модератор

    Тут пишут:
     
  5. Megakoteyka

    Megakoteyka Оракул Модератор

    Код (Text):
    lcd.write(menu[i]);
    ?
     
    Последнее редактирование: 12 окт 2013
  6. Zaic

    Zaic Нерд

    Проблема не в LCD
    Проблема в том, что меняется кодировка в момент компиляции.
    вот попробовал сделать пример:
    Код (Text):
    volatile char menu[] = "куку";
    void setup()
    {
      Serial.begin(9600);
    }
    void loop()
    {
    Serial.println(sizeof(menu));
    for (int i=0; i<=9; i++) Serial.print(menu[i]);

    while (1);
    }
    В терминале видим:
    9
    куку
     
  7. Dmitriy Kunin

    Dmitriy Kunin Гик

    На эти грабли наступил ещё при первых экспериментах с дисплеем, и пользуюсь только выводом из массива кодов символов. Писать по русски в среде ардуино с тех пор не пробовал.
     
  8. NR55RU

    NR55RU Гик

    А почему sizeof() выводит 9 ? ...русские символы были сохранены по 2 байта на символ ?
    Но тогда Мегакотейка верно подсказал, может стоит для начала попробовать вывести что то использую ASCII коды.
    Например так:
    char menu[] = {170, 227,170,227,0}; // куку
    К счастью цифры они в любой кодировке цифры :)
     
  9. Zaic

    Zaic Нерд

    Есть ли директива в С, в какой кодировке передавать строку в массив?
     
  10. Megakoteyka

    Megakoteyka Оракул Модератор