PCCar.ru - Ваш автомобильный компьютер

PCCar.ru - Ваш автомобильный компьютер (http://pccar.ru/index.php)
-   Рабочий журнал (http://pccar.ru/forumdisplay.php?f=25)
-   -   Duster и Nexus 7 2012 с опозданием на пол года (http://pccar.ru/showthread.php?t=20401)

d3890666 10.02.2014 23:48

Duster и Nexus 7 2012 с опозданием на пол года
 
Итак начну с того что установил планшет в июле. Правда всегда считал что в проекте ничего особо интересного нет. Но тут внезапно осознал что проектов на дастере практически нет... Испраляюсь!

Нексус 7 2012 года установил вместо штатной магнитолы закрепил за рамку. Питание организовал на PSD15 и реле 12 вольт с конденсатором. Первые 2 месяца откатал с батареей в планшете просто питая хаб, а от него и Y-кабель и планшет. Прокатился так в Крым (батарея все время была на 100 процентах заряда), уже на обратном пути через Одессу на ночь перед обратной дорогой не убил навител. Итог - батарея в ноль. Хорошо что ночью вышел покурить из мотеля и попробовал включить планшет. Снял рамку с нексусом (благо не сложно и не долго) понес в номер на зарядку. Больше проблем не было... пока не пришла зима! После первой морозной ночь утром батарея была заряжена процентов на 45. Следующим утром я вспомнил Одессу. Все! батарея умерла. Примерно в тот же вечер после работы купил реле и диод. Теперь все хорошо) Питаю после контролера примерно 4,5В от аккума авто, бужу Тимуром от зарядки через реле на 12В и тоненький сигнальный ACC дастера.

Вместо усилителя купил вот такую вот манитолу. Так как у меня недопривод установил её вниз бороды на место прикуривателя и ниши для переключателя и электро муфты. За планшетом расположил хаб dlink на 7 портов, прокинул 2 удлинителя юсб в бардачок. Туда же завёл отдельно запитанный до хаба конец мини юсб для такого роутера, так как питания от хаба отдавалось недостаточно для постоянной работы (иногда отваливался интернет). В него, в свою очередь, воткнут такой модем с симкой от йоты. Прекрасный интернет я вам скажу.

Рулевые кнопки же через ардуино и вот этот пост подключил к хабу. Скетч для ардуины у меня убогий. Иногда получаются произвольные срабатывания нажатия кнопок. Поэтому для меня актуальная вот эта программа, т.к. могу отключить использование джоя если начинается бред от кнопок. Как буду на работе найду файлик и выложу... может кто поможет подлечить.

Звук на магнилтолу вывожу джеком.

Все мои попытки получить работоспособный изикап увенчались покупкой такого чуда. Устраивает намного больше чем каркам. НО ВСЕ РАВНО ОГРОМНОЕ СПАСИБО ЗА ВАШИ ТРУДЫ Rage2 и DmitrySmol.

А ещё гарнитуру купил и установил таблет ток. Удобно. Очень. Разговаривать через аудиосистему не очень удобно. Стоишь так летом с открытыми окнами и народ мимо проходит и узнает о тебе немного больше чем хотелось, да и на смс не ответить с экрана. А с гарнитурой и tabletTalk'ом все иначе. Не ожидал честно говоря...

Камеру покупал Sony ssd для аутлэндера. Запилил в хромированную рамку с надписью DUSTER. Только вот провода так и не протащил в гофру между 5 дверью и салоном, а просто приклел их на скотч в расчете "на потом". Провод от камеры тащил по правой стороне за резинками между пластиком и валенком потолка. Минут за 15 протащил. И вообще полюбил дастер особенно за простоту всего что есть в нем. Инструкция для этой машины вообще не требуется.

В сухом остатке я имею:
-интернет, а вместе с ним пробки, музыку, радио (живое и архив) ну и иногда летом в пробках смотрю сериалы и фильмы.
-В августе очень помог планшет скостить 9 часов на границе с Украиной. Была возможность смотреть лост с флешки.
- не онлайн радио из магнитолы-усилителя когда я вне доступа йоты, так как в Москве и на даче ловит практически без перебоев (практически это максимум на минуту может в промзоне какой либо потерять сеть).
- камера заднего хода через зеркало.
- не потерял кнопки под рулём и даже расширил их функционал .
- хендс фри так же остался в авто. Только вот номера искать и на смс отвечать стало намного проще.

Многие скажут что стоит он низко и будут правы. Но честно говоря, есть как минимум 2 плюса такого расположения. Во-первых очень удобно положить кисть на рычаг АКПП и манипулировать планшетом. Во-вторых я не распилил не одной детали интерьера, что считаю успехом, и да я обошелся без липучек))).

Картинки готового решения. Изнутри будут когда разбирать буду. А буду надеюсь скоро...
Общий план:
https://lh5.googleusercontent.com/-k...213_091238.jpg

Отдельно магнитола-усилитель-аналоговое радио на месте ниши прикуривателя:
https://lh5.googleusercontent.com/-Y...213_091258.jpg

Автокартинки от гугл+:
https://lh5.googleusercontent.com/-R...931-MOTION.gif

rv9me 11.02.2014 20:45

Ждем фото, коллега!

d3890666 13.02.2014 13:15

обновил шапку.

По планам:

переползти на Регтайм, удобно на коротких остановках не терять интернет на минуту (ждать пока роутер прогрузится).
установить антенну для GPS.
сфотографировать как планшет закреплен за рамку, и сколько свободного места в "забородье" у DUSTERa.

rv9me 14.02.2014 12:01

Цитата:

Сообщение от d3890666 (Сообщение 287106)
сфотографировать как планшет закреплен за рамку, и сколько свободного места в "забородье" у DUSTERa.

Вот это бы место, да поподробнее. Я жду тепла, для залезания в "Забородье"(до этого только магнитолку 1дин ставил), вот не помешает знать, к чему быть готовым. А пока я закупаюсь железяками. Работа встала из-за необходимости идти за радиодетальками и борьбой с жабой на их покупку(радиодетальки выходят дороже, чем целые блоки моего САРРС):wacko2:

d3890666 15.02.2014 20:48

Цитата:

Сообщение от rv9me (Сообщение 287233)
Вот это бы место, да поподробнее. Я жду тепла, для залезания в "Забородье"(до этого только магнитолку 1дин ставил), вот не помешает знать, к чему быть готовым. А пока я закупаюсь железяками. Работа встала из-за необходимости идти за радиодетальками и борьбой с жабой на их покупку(радиодетальки выходят дороже, чем целые блоки моего САРРС):wacko2:

Места там хватит что бы китайцев по стране катать. Я сначала хотел запихнуть туда старую магнитолу на 2 din. Она туда свободно входит и выходит. Только не в глубь, а в высоту. А вообще как я понял тебе придеться много ковырять и сверлить если хочешь ставить писи вверху...
Сам попробую сфоткать не раньше чем через неделю.

d3890666 17.02.2014 10:51

На прошлой неделе перепал мне еще один Нексус 7 2012 с зазбитым экраном. Заказал вот тут матрицу с тачем в сборе. Пришла за 6 дней фри шипом(!). В выходные переклеил. Работает! Ура товарищи!

d3890666 26.02.2014 18:39

Авторотэйт в Москва.фм
 
Вложений: 2
Есть такой сервис у нас Москва.ФМ называется. Хороши они своим архивом радио на 5 лет назад. Я люблю послушать передачи которые уже прошли, перематывая рекламу новости и т.д. Но вот в Play приложение так и не выкладывают разрабы. Однако оно существует! Лежит приспокойненько у них на сайтике. Но вот авторотейт у апк выключен оно всегда в портрете. Я вот докрутил работу в ландскейпе. УРА! могу кстати помочь и с другими приложениями.

d3890666 14.03.2014 19:11

Закончил с переделкой кнопок с ардуино. Подключал уже не через резисторы, а все 6 проводов к цифровым входам. Таким образом смог задействовать скролл и подчистить сам скетч.

Провода по пинам:

13-черный;
11-красный;
10-коричневый;
7-синий;
6-зеленый;
5-желтый;

От земли к пинам 13,11,10 - резисторы по 4-10кОм. Большинство кнопок возвращают коды нажатия клавиатуры. Остальные для RemoteWhellControll с xda. Почти у каждой кнопки по 3 положения. Длина зажатия определяется "LongPressTime" и "LooongPressTime". Возвращаемые значения в большом массиве. Если вдруг кто захочет использовать и не сможет разобраться, пишите.

Код:

                  нажатие          зажим менее 2 секунд            зажим более 2 секунд
media            HOME                    тек. Музыка                  меню приложен. музыки
radio              BACK                      тек. Нави                    меню приложен. нави
+                  D_PAD_LEFT            след. трек
play              D_PAD_CENTER        PLAY_PAUSE                          MUTE
-                  D_PAD_RIGHT          пред. трек
ok                SEARCH                  контакты                        сочетание ALT+TAB
scrollUp          D_PAD_UP
scrollDown      D_PAD_DOWN

По опыту использования кнопок с августа понял что не самое главное это открытие предопределенных приложений, а возможность управлять планшетом без использования тача. Так и реализовал. D_PAD аналог стрелок на клавиатуре и ENTER. Получилось использовать практически все кнопки без переопределения Generic.kl. Только кнопку SEARCH пришлось переопределить. Все функции что написаны на русском реализованы таскером и РемоутКонтроллом.

Код:

int rows[]={5,6,7}; //указываем пины строк.
int scroll=3;
int cols[]={10,11,13}; //и столбцов
int scrollWire=0;
int Button=0;
int ArrayOfAltTab=0;
int AtlTab=-3;
int LooongPressTime=1900;
int LongPressTime=550;
int PauseButton=6;
int test=0;
int AltEsc=-4;
int KEY_END_TAB=-2;
int KEY_SEARCH=-5;
//int LEFT_ALT=(125);
//int TAB=13;
//int KEY_SHIFT=14;

//int DPad=KEY_RETURN;
//int DUp=KEY_UP_ARROW;
//int DDown=KEY_DOWN_ARROW;
//int Dleft=KEY_LEFT_ARROW;
//int DRight=KEY_RIGHT_ARROW;

int Buttons[3][3]={
{0,3,6},//{"ScrollUP","DOWN","Media"},

{1,4,7},//{"ScrollDown","Search","Radio"},

{2,5,8}//{"3","UP","PLAY"}
};

int idButtons[9][5]={
//0            1            2        keyboard          ALTTab
{-1,          0,            0,        KEY_UP_ARROW,      KEY_TAB},//ScrollUP
{-1,          0,            0,        KEY_DOWN_ARROW,    KEY_LEFT_SHIFT},//ScrollDown
{0,            0,            0,        0,                0},//не такой кнопки
{0,            1555,        0,        KEY_LEFT_ARROW,    KEY_LEFT_SHIFT},//DOWN
{666,          1666,        AtlTab,  AtlTab,            0},//Search
{0,            1333,        0,        KEY_RIGHT_ARROW,  KEY_TAB},//UP
{0,            111,            2111,    AltEsc,          0},//Media
{0,            222,            2222,    KEY_ESC,        KEY_ESC},//Radio
{0,            1444,        2444,    KEY_RETURN,        KEY_END_TAB} //PLAY
};
 
void setup() {

          Serial.begin(9600);
         
          Keyboard.begin();
         
          //Serial.println("Starting...");
         
          ArrayOfAltTab=0;
         
          pinMode(10, INPUT);
           
          pinMode(11, INPUT);

          pinMode(13, INPUT);

          pinMode(6, OUTPUT);

          pinMode(5, OUTPUT);

          pinMode(7, OUTPUT);

       
        for(int i=0;i<3;i++) //цикл для перехода по всем строкам
          {digitalWrite(rows[i],HIGH);
          if(digitalRead(cols[scrollWire])==HIGH) {scroll=i;}} //подаем на текущую строку высокий уровень }
        }
       
        void loop() {
         
          for(int i=0;i<3;i++){ //цикл для перехода по всем строкам

            digitalWrite(rows[i], HIGH); //подаем на текущую строку высокий уровень

            for(int j=0;j<3;j++){ //цикл для переходов по всем столбцам

              if(digitalRead(cols[j])==HIGH && (j!=scrollWire || i!=scroll)){ //если уровень высокий, то кнопка нажата
                int a=FindKey(i,j);
                if(j==scrollWire){scroll=i;}
              }
             
            }
            digitalWrite(rows[i], LOW);  //выключаем высокий уровень для пройденной строки           
          }
        }

        //функция возвращающая код нажатой кнопки

        int FindKey(unsigned int CodeI,unsigned int CodeJ)
        {unsigned long TimeKeyPressed;
        unsigned long TimeKeyReliased;
        if(test==1){Serial.println("!");}
        if(CodeJ==scrollWire)
            {
            if(scroll==2 && CodeI==0 || scroll==0 && CodeI==1 || scroll==1 && CodeI==2)
              {
              SendKey(Buttons[1][0],CodeJ,100); return Buttons[1][0];
              }
            else if(scroll==0 && CodeI==2 || scroll==1 && CodeI==0 || scroll==2 && CodeI==1)
            {
            SendKey(Buttons[0][0],CodeJ,100); return Buttons[0][0];
            }
            }
          else
          { boolean i;TimeKeyPressed=millis();
            int button=Buttons[CodeI][CodeJ];
            i=digitalRead(cols[CodeJ]);
            for(i;i>0;i=digitalRead(cols[CodeJ])){delay(45);
              if(test==1){Serial.println(millis()-TimeKeyPressed);}
              //if(button==PauseButton && (millis()-TimeKeyPressed)>10000){break;}
              if(button!=PauseButton && (millis()-TimeKeyPressed)>LooongPressTime+100){break;}}
            TimeKeyReliased = millis();
            SendKey(button,CodeJ,TimeKeyReliased-TimeKeyPressed);
            return button;
          }         
        }

      void SendKey(int Key, unsigned int CodeJ,unsigned long Time)
      {int value=0;
      int LongPressArray=0;  //Serial.print(Key);
        if(Time         else if(Time>LongPressTime && Time         else if(Time>LooongPressTime && Time<100000){LongPressArray=2;}     
        //else if(Time>10000){Serial.println("pause_loop forever."); delay(100000);}
       
      value=idButtons[Key][LongPressArray];
      //Serial.print(value);
      //Serial.print(LongPressArray);
      //Serial.print(ArrayOfAltTab);
      if (value>0 && ArrayOfAltTab==0){     
        if(value==666){Keyboard.write(198);}
        else{ Serial.print("         Serial.print(value);
        Serial.print(">");}}
        //Serial.println();}
      else if (value<=0 || ArrayOfAltTab==1) {
      value=idButtons[Key][3+ArrayOfAltTab];
      //Serial.println(value);
      if(value==AtlTab)
        {
        ArrayOfAltTab=1;
        if(test==0){Keyboard.press(KEY_LEFT_ALT);Keyboard.press(KEY_TAB);Keyboard.release(KEY_TAB);}
        //Serial.println("ATBeg");
        }
        else if(value==KEY_TAB)
        {
          if(test==0){Keyboard.press(value);Keyboard.release(value);}
          //Serial.println(value);
          //Serial.println("ATNext");
        }
        else if(value==KEY_LEFT_SHIFT)
        {
          if(test==0){Keyboard.press(KEY_LEFT_SHIFT);Keyboard.press(KEY_TAB);Keyboard.release(KEY_LEFT_SHIFT);Keyboard.release(KEY_TAB);}
          //Serial.print("ATPrev");
        }
        else if(value==KEY_END_TAB)
        {
          if(test==0){
          //Keyboard.press(KEY_RETURN);Keyboard.release(KEY_RETURN);
          Keyboard.release(KEY_LEFT_ALT);}
          ArrayOfAltTab=0;
          //Serial.println("ATend");
        }
        else if(value==KEY_ESC && ArrayOfAltTab==1)
        {
          if(test==0){
          Keyboard.press(KEY_ESC);Keyboard.release(KEY_ESC);
          Keyboard.release(KEY_LEFT_ALT);}
          ArrayOfAltTab=0;
          //Serial.println("ATend");
        }
        else if(value==AltEsc)
        {
          if(test==0){Keyboard.press(KEY_LEFT_ALT);Keyboard.press(KEY_ESC);Keyboard.release(KEY_LEFT_ALT);Keyboard.release(KEY_ESC);}
          //Serial.println(value);
          //Serial.println("ATNext");
        }
        else
        {
          if(test==0){Keyboard.press(value);Keyboard.release(value);}
          //Serial.println("s");
          //Serial.println(value);
        }
        }       
        if(CodeJ!=scrollWire){
        delay(150);
        boolean i;
        i=digitalRead(cols[CodeJ]);
        for(i;i>0;i=digitalRead(cols[CodeJ])){
          if(test==1){Serial.println(digitalRead(cols[CodeJ]));}
        }
        }
      }


rv9me 27.11.2014 08:03

А куды ж ты прикуриватель девал?

я у себя пока вынес наружу, а вообще уже подготовил разветвитель прикуривателя в подстаканник(круглый как стакан), все времени нет поставить, да и подключить хотелось бы с помощью разъема, а не на скрутку. Вот думаю, что придумать в качестве штатного разъема.

d3890666 28.11.2014 16:59

Цитата:

Сообщение от rv9me (Сообщение 312258)
А куды ж ты прикуриватель девал?

Так вот и нет у меня прикуривателя. Лежит на даче сейчас, мерзнет. Прикуриваю зажигалкой, в качестве зарядки у магнитолы есть USB, а насос у меня механический ножной в багажнике лежит... За более чем год понадобилось всего раз гнездо прикуривателя колесо накачать, вот и положил обычный насос))) Думал в багажнике гнездо вывезти, руки не доходят...

d3890666 28.11.2014 17:09

ПС. в апреле у себя много чего переделал кстати! руки дойдут сфоткать обязательно обновлю тему.

ymka-66 28.11.2014 20:10

ну вот и дастероводы подтянулись


Часовой пояс GMT +4, время: 16:17.

Работает на vBulletin® версия 3.8.4.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot