Показано с 1 по 10 из 12

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Новичок
    Регистрация
    10.10.2014
    Сообщений
    10
    Вес репутации
    122

    По умолчанию Управление Android при помощи Arduino Leonardo и подрулевого джойстика от Reno

    Доброе время суток вам всем!

    Пытаясь осуществить CarPc из Nexus 7 2013 у себя в машине наткнулся на одну интересную вещь - Leonardo с возможностью HID keyboard.
    До этого думал ставить просто контроллер для управлением включения-отключения планшета и переферии. Было просто.

    Но я задумал облегчить управление планшетом в движении и для этого купил подрулевой джойстик от ам Renault.

    Нажмите на изображение для увеличения. 

Название:	cc1b4a4s-960.jpg 
Просмотров:	2341 
Размер:	142.8 Кб 
ID:	18097

    Вот его схема

    Название: joy.jpg
Просмотров: 7901

Размер: 12.1 Кб

    То, что я находил из скетчей под Ардуино, были либо под UNO либо на резистивное управление магнитолой.
    PHP код:
    /////////////////////////////////////////////////////////////////


    // alpine
    #define alpinePin 13

    #define cmdPower 0x09
    #define cmdSource 0x0A
    #define cmdBand 0x0D
    #define cmdVolumeDown 0x15
    #define cmdVolumeUp 0x14
    #define cmdUp 0x0E
    #define cmdDown 0x0F
    #define cmdLeft 0x13
    #define cmdRight 0x12
    #define cmdPlay 0x07
    #define cmdAProc 0x06
    #define cmdMute 0x16
    #define cmdAngleUp 0x4C
    #define cmdAngleDown 0x4B
    #define cmdCDChange 0x03
    /////////////////////////////////////////////////////////////////
    // джойстик
    #define rows 3
    #define cols 2
    // номера кнопок в соответствии со схемой
    const byte keys[rows][cols] = 
    {
    {
    1,4},
    {
    2,5},
    {
    6,3}
    };

    // состояния направлений енкодера
    const byte encoderdirection[3][3] = // 0 - на месте, 1 - вниз, 2 - вверх
    {
    {
    012}, // 0
    {201}, // 1
    {120// 2 
    };

    // номера пинов
    const byte rowPins[rows] = {869}; // строки (желтый, зеленый, голубой)
    const byte colPins[cols] = {10}; // столбцы (черный, красный)
    #define encoderPin 2 // пин енкодера (коричневый)
    byte encodervalue;

    // маски для клавиш
    #define MaskMediaButton 1 
    #define MaskRadioButton 2
    #define MaskVolumeUpButton 4
    #define MaskVolumeDownButton 8
    #define MaskOkButton 16
    #define MaskMuteButton 32 
    #define MaskScrollDown 64 
    #define MaskScrollUp 128 

    /////////////////////////////////////////////////////////////////

    void setup() 

    int i;
    // строки - на выход
    for (0rows; ++i)
    {
    pinMode(rowPins[i], OUTPUT);
    }

    // столбцы - на вход
    for (0cols; ++i)
    {
    pinMode(colPins[i], INPUT);
    digitalWrite(colPins[i], HIGH); // включаем подтягивающий резистор 
    }

    // столбец для енкодера
    pinMode(encoderPinINPUT);
    digitalWrite(encoderPinHIGH); // включаем подтягивающий резистор 

    encodervalue 0;

    Serial.begin(9600);
    // initialize mouse control:
    Mouse.begin();
    Keyboard.begin();


    // сканирование джойстика
    byte scan(void)
    {
    int ij;
    byte code 0;

    for (
    0rows; ++i)
    {
    digitalWrite(rowPins[i], LOW);

    // кнопки
    for (0cols; ++j)
    {
    if(
    digitalRead(colPins[j]) == false)
    {
    code |= << (keys[i][j] - 1);

    }

    // енкодер
    if (digitalRead(encoderPin) == false)
    {
    int oldencodervalue encodervalue;
    encodervalue i;

    switch (
    encoderdirection[oldencodervalue][encodervalue])
    {
    case 
    1// вниз
    code |= 64;
    break;
    case 
    2// вверх
    code |= 128;
    break;
    }
    }

    digitalWrite(rowPins[i], HIGH); 
    }

    return 
    code;
    }

    // отправка байта
    void SendByte(byte data)
    {
    for (
    int i 08; ++i)
    {
    digitalWrite(alpinePinHIGH); 
    delayMicroseconds(560); 
    digitalWrite(alpinePinLOW); 

    if (
    data 1)
    // 1
    delayMicroseconds(1680);
    }
    else
    // 0
    delayMicroseconds(560);
    }

    data >>= 1
    }
    }

    // отправка команды
    void Send(byte command

    digitalWrite(alpinePinHIGH); 
    delayMicroseconds(9000); 
    digitalWrite(alpinePinLOW); 
    delayMicroseconds(4500); 

    SendByte(0x86);
    SendByte(0x72);
    SendByte(command);
    SendByte(~command); 

    digitalWrite(alpinePinHIGH); 
    delayMicroseconds(560); 
    digitalWrite(alpinePinLOW); 
    }

    // цикл программы
    void loop(void
    {
    byte code

    code scan();

    if (
    code MaskMediaButton)
    Keyboard.write('u'); 

    if (
    code MaskRadioButton)
    Send(cmdUp);

    if (
    code MaskVolumeUpButton)
    Send(cmdRight);

    if (
    code MaskVolumeDownButton)
    Send(cmdLeft);

    if (
    code MaskOkButton)
    Send(cmdPlay);

    if (
    code MaskMuteButton
    Send(cmdMute);

    if (
    code MaskScrollDown)
    Send(cmdVolumeDown);

    if (
    code MaskScrollUp)
    Send(cmdVolumeUp);

    Протестировав этот скетч на нажатия кнопок я попытался написать скетч под свои нужды.
    С управлением питания планшета и переферии я разобрался, а с джойстиком, увы нет.
    По этому проблема сейчас встала в управлении андроид планшетом с этого подрулевого джойстика как с HID клавиатуры с короткими и длинными нажатиями на кнопки + энкодер.

    Так как я в програмирование залез только сейчас, прошу вашей помощи в реализации проекта. В долгу не останусь, т.е. Ваш труд будет оплачен по договорености.
    Жду ваших предложений, можно в личку.

    С уважением,
    D. K.
    Вложения Вложения
    Последний раз редактировалось Stray; 10.10.2014 в 13:32.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •