Русские буквы в Arduino IDE

Тема в разделе "Arduino & Shields", создана пользователем last1971, 27 апр 2014.

  1. last1971

    last1971 Нерд

    Задача: Щелкать релюшками, которые подключены к ардуино, которое подключено к компьютеру, через программу на компьютере. Т.е. жмем кнопку в программе - реле включилось и т.д. При инициализации программа читает из ардуино количество реле и создает в окне соответствующее количество кнопок.
    Захотелось надписи кнопок тоже хранить в скетче, ибо ну будет не много и для разных приложений разные. Т.е. в скетче правим количество кнопок, надписи и вперед.
    Но вот незадача IDE работает с utf-8. Пытался включить внешний редактор, и писать в нем, не помогло. Попробовал indexOf - тоже не помогает. Вообще может кому-то удалось как-то разобрать или преобразовать строку написанную в скетче по русски. Т.е. хочется чего-то типа
    String s="Тут чего-то";
    print_converting_to_serial(s);
    Где print_converting_to_serial преобразует utf-8 в ascii и пишет ее в Serial.
     
  2. last1971

    last1971 Нерд

    Решил сделать так:
    const wchar_t rele_names[4][20] = {L"СветON",L"Second",L"tttt",L"light"};//Назвния кнопок

    далее пишем в порт следующим образом
    void charinserial(int j){
    byte pr;
    for (int i=0;i<sizeof(rele_names[j])/2;i++){
    if (rele_names[j]>255){
    switch (rele_names[j]) {
    case 1025:
    pr=168;
    break;
    case 1105:
    pr=184;
    break;
    default:
    pr =rele_names[j]-848;
    }
    } else pr=rele_names[j];
    if (pr!=0) Serial.write(pr);
    }

    Если смотреть монитор последовательного порта в ардуино IDE то все ок.

    Но вот здесь:

    String^ rele::getBoxName(int i){
    array<unsigned char>^ b1 = {i,127};
    arduino->Write("name");
    arduino->Write(b1,0,2);
    Sleep(30);
    return rele::arduino->ReadExisting();
    }

    почему-то вместо русских букв получаются вопросы. Возможно как-то локаль нужно указать?
     
  3. last1971

    last1971 Нерд

    Жалко что никто не помог советом. Проблему решил следующим образом

    Со стороны Ардуино

    Код (Text):
    String  rele_names[] = {"СветON","Second","tttt","light"};//Назвния кнопок
    void charinserial(int j){
     
      Serial.print(rele_names[j]);

    }
    Со стороны компьютера

    Код (Text):
    rele::rele(){
        rele::is=false;
        rele::arduino = gcnew System::IO::Ports::SerialPort();
        rele::arduino->Encoding = gcnew UTF8Encoding();
       
    }

    String^ rele::getBoxName(int i){
        array<unsigned char>^ b1 = {i,127};
        arduino->Write("name");
        arduino->Write(b1,0,2);
        Sleep(30);
        return rele::arduino->ReadExisting();
       
    }