Всем добрый день. Вылезла такая проблема. Я создал массив (5 строк по 20 символов) volatile char menu[] = { " Demo mode " " Objectc " " Conditions " " Вниз " " Вверх "}; При передачи в LCD, строки с русским съезжают. При передачи в порт каждая русская буква превращается в две крюгозябры. Подскажите, пожалуйста, как с этим бороться.
Читал. Я использую библиотеку 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); Съезжает.
Проблема не в 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 кÑкÑ
На эти грабли наступил ещё при первых экспериментах с дисплеем, и пользуюсь только выводом из массива кодов символов. Писать по русски в среде ардуино с тех пор не пробовал.
А почему sizeof() выводит 9 ? ...русские символы были сохранены по 2 байта на символ ? Но тогда Мегакотейка верно подсказал, может стоит для начала попробовать вывести что то использую ASCII коды. Например так: char menu[] = {170, 227,170,227,0}; // куку К счастью цифры они в любой кодировке цифры